Skip to content

Commit b56b6a5

Browse files
committed
Generate SBom info
WE2-1144 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent 0de1619 commit b56b6a5

5 files changed

Lines changed: 168 additions & 1 deletion

File tree

.github/workflows/cmake-macos.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ jobs:
7777
cmake --build ${BUILD_DIR} --config ${BUILD_TYPE}
7878
cmake --build ${BUILD_DIR} --config ${BUILD_TYPE} --target installer
7979
cmake --build ${BUILD_DIR} --config ${BUILD_TYPE} --target installer-safari
80+
cmake --install build/sbom
8081
8182
#- name: Test
8283
# run: ctest -V -C ${BUILD_TYPE} --test-dir ${BUILD_DIR}
@@ -88,3 +89,4 @@ jobs:
8889
path: |
8990
build/src/app/*.pkg
9091
build/src/app/*.dmg
92+
build/*.spdx

.github/workflows/cmake-windows.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ jobs:
6767
cmake --build build --config ${env:BUILD_TYPE}
6868
cmake --build build --config ${env:BUILD_TYPE} --target installer
6969
cmake --build build --config ${env:BUILD_TYPE} --target bundle
70+
cmake --install build/sbom
7071
7172
- name: Test
7273
if: ${{ matrix.arch == 'x64' }}
@@ -79,6 +80,7 @@ jobs:
7980
path: |
8081
build/src/app/*.msi
8182
build/src/app/*.exe
83+
build/*.spdx
8284
8385
- name: Upload debug artifacts
8486
uses: actions/upload-artifact@v7

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,4 @@ endif()
5050
enable_testing()
5151
add_subdirectory(tests/mock-ui)
5252
add_subdirectory(tests/tests)
53+
include(cmake/sbom.cmake)

cmake/sbom.cmake

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# SBOM generation using DEMCON/cmake-sbom (SPDX 2.3, install-time)
2+
# Run: cmake --install <build-dir>/sbom
3+
4+
include(FetchContent)
5+
FetchContent_Declare(cmake-sbom
6+
GIT_REPOSITORY https://github.com/DEMCON/cmake-sbom.git
7+
GIT_TAG v1.4.0
8+
GIT_SHALLOW TRUE
9+
)
10+
if(POLICY CMP0169)
11+
cmake_policy(SET CMP0169 OLD)
12+
endif()
13+
FetchContent_GetProperties(cmake-sbom)
14+
if(NOT cmake-sbom_POPULATED)
15+
FetchContent_Populate(cmake-sbom)
16+
endif()
17+
list(APPEND CMAKE_MODULE_PATH "${cmake-sbom_SOURCE_DIR}/cmake")
18+
include(sbom)
19+
20+
execute_process(
21+
COMMAND git describe --tags --abbrev=0
22+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/lib/libelectronic-id"
23+
OUTPUT_VARIABLE ELECTRONIC_ID_VERSION
24+
OUTPUT_STRIP_TRAILING_WHITESPACE
25+
ERROR_QUIET
26+
)
27+
string(REGEX REPLACE "^v" "" ELECTRONIC_ID_VERSION "${ELECTRONIC_ID_VERSION}")
28+
29+
sbom_generate(
30+
OUTPUT "${CMAKE_BINARY_DIR}/web-eid-${PROJECT_VERSION}.spdx"
31+
LICENSE "MIT"
32+
SUPPLIER "Estonian Information System Authority"
33+
SUPPLIER_URL https://www.ria.ee
34+
DOWNLOAD_URL https://github.com/web-eid/web-eid-app
35+
VERSION "${PROJECT_VERSION}"
36+
)
37+
38+
set(_sbom_reset "${CMAKE_BINARY_DIR}/sbom/sbom-reset.cmake")
39+
file(WRITE "${_sbom_reset}"
40+
"file(WRITE \"${CMAKE_BINARY_DIR}/sbom/sbom.spdx.in\" \"\")\n"
41+
"file(READ \"${CMAKE_BINARY_DIR}/SPDXRef-DOCUMENT.spdx.in\" _doc)\n"
42+
"file(APPEND \"${CMAKE_BINARY_DIR}/sbom/sbom.spdx.in\" \"\${_doc}\")\n"
43+
"set(SBOM_VERIFICATION_CODES \"\")\n"
44+
)
45+
file(APPEND "${CMAKE_BINARY_DIR}/sbom/CMakeLists.txt"
46+
"install(SCRIPT \"${_sbom_reset}\")\n"
47+
)
48+
49+
set(_app_spdxid "SPDXRef-Package-${PROJECT_NAME} DEPENDS_ON @SBOM_LAST_SPDXID@")
50+
if(APPLE)
51+
sbom_add(PACKAGE web-eid-safari
52+
VERSION "${PROJECT_VERSION}"
53+
SUPPLIER "Organization: Estonian Information System Authority"
54+
DOWNLOAD_LOCATION https://github.com/web-eid/web-eid-app
55+
LICENSE "MIT"
56+
EXTREF "cpe:2.3:a:web-eid:web-eid:${PROJECT_VERSION}:*:*:*:*:*:*:*"
57+
RELATIONSHIP "@SBOM_LAST_SPDXID@ VARIANT_OF SPDXRef-Package-${PROJECT_NAME}"
58+
)
59+
set(_app_spdxid "${_app_spdxid}\nRelationship: ${SBOM_LAST_SPDXID} DEPENDS_ON @SBOM_LAST_SPDXID@")
60+
file(READ "${CMAKE_SOURCE_DIR}/src/mac/js/package.json" _webext_json)
61+
string(JSON WEBEXT_VERSION GET "${_webext_json}" "version")
62+
sbom_add(PACKAGE web-eid-webextension
63+
VERSION "${WEBEXT_VERSION}"
64+
SUPPLIER "Organization: Estonian Information System Authority"
65+
DOWNLOAD_LOCATION https://github.com/web-eid/web-eid-webextension
66+
LICENSE "MIT"
67+
RELATIONSHIP "${SBOM_LAST_SPDXID} DEPENDS_ON @SBOM_LAST_SPDXID@"
68+
)
69+
if(NPM_EXECUTABLE)
70+
execute_process(
71+
COMMAND "${NPM_EXECUTABLE}" --version
72+
OUTPUT_VARIABLE NPM_VERSION
73+
OUTPUT_STRIP_TRAILING_WHITESPACE
74+
ERROR_QUIET
75+
)
76+
string(REGEX REPLACE "^v" "" NPM_VERSION "${NPM_VERSION}")
77+
endif()
78+
if(NPM_VERSION)
79+
sbom_add(PACKAGE npm
80+
VERSION "${NPM_VERSION}"
81+
SUPPLIER "Organization: OpenJS Foundation"
82+
DOWNLOAD_LOCATION https://www.npmjs.com
83+
LICENSE "Artistic-2.0"
84+
EXTREF "cpe:2.3:a:npmjs:npm:${NPM_VERSION}:*:*:*:*:*:*:*"
85+
RELATIONSHIP "@SBOM_LAST_SPDXID@ BUILD_TOOL_OF ${SBOM_LAST_SPDXID}"
86+
)
87+
endif()
88+
endif()
89+
90+
if(WIN32)
91+
find_program(WIX_EXECUTABLE NAMES wix)
92+
if(WIX_EXECUTABLE)
93+
execute_process(
94+
COMMAND "${WIX_EXECUTABLE}" --version
95+
OUTPUT_VARIABLE WIX_VERSION
96+
OUTPUT_STRIP_TRAILING_WHITESPACE
97+
ERROR_QUIET
98+
)
99+
# Strip build metadata suffix (e.g. "6.0.2+b3f3403" -> "6.0.2")
100+
string(REGEX REPLACE "\\+.*$" "" WIX_VERSION "${WIX_VERSION}")
101+
endif()
102+
if(WIX_VERSION)
103+
sbom_add(PACKAGE WiX
104+
VERSION "${WIX_VERSION}"
105+
SUPPLIER "Organization: WiX Toolset Contributors"
106+
DOWNLOAD_LOCATION https://wixtoolset.org
107+
LICENSE "MS-RL"
108+
EXTREF "cpe:2.3:a:wixtoolset:wix_toolset:${WIX_VERSION}:*:*:*:*:*:*:*"
109+
)
110+
endif()
111+
endif()
112+
113+
sbom_add(PACKAGE libelectronic-id
114+
VERSION "${ELECTRONIC_ID_VERSION}"
115+
SUPPLIER "Organization: Estonian Information System Authority"
116+
DOWNLOAD_LOCATION https://github.com/web-eid/libelectronic-id
117+
LICENSE "MIT"
118+
EXTREF "cpe:2.3:a:web-eid:libelectronic-id:${ELECTRONIC_ID_VERSION}:*:*:*:*:*:*:*"
119+
RELATIONSHIP "${_app_spdxid}"
120+
)
121+
122+
find_package(GTest QUIET)
123+
if(GTest_FOUND)
124+
sbom_add(PACKAGE GTest
125+
VERSION "${GTest_VERSION}"
126+
SUPPLIER "Organization: Google LLC"
127+
DOWNLOAD_LOCATION https://github.com/google/googletest
128+
LICENSE "BSD-3-Clause"
129+
EXTREF "cpe:2.3:a:google:googletest:${GTest_VERSION}:*:*:*:*:*:*:*"
130+
RELATIONSHIP "${SBOM_LAST_SPDXID} TEST_TOOL_OF @SBOM_LAST_SPDXID@"
131+
)
132+
endif()
133+
134+
if(PCSC_FOUND)
135+
sbom_add(PACKAGE libpcsclite
136+
VERSION "${PCSC_VERSION}"
137+
SUPPLIER "Organization: Muscle project"
138+
DOWNLOAD_LOCATION https://pcsclite.apdu.fr
139+
LICENSE "BSD-3-Clause"
140+
EXTREF "cpe:2.3:a:pcsc-lite_project:pcsc-lite:${PCSC_VERSION}:*:*:*:*:*:*:*"
141+
)
142+
endif()
143+
144+
sbom_add(PACKAGE Qt6
145+
VERSION "${Qt6_VERSION}"
146+
SUPPLIER "Organization: The Qt Company"
147+
DOWNLOAD_LOCATION https://download.qt.io/
148+
LICENSE "LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only OR LicenseRef-Qt-commercial"
149+
EXTREF "cpe:2.3:a:qt:qt:${Qt6_VERSION}:*:*:*:*:*:*:*"
150+
RELATIONSHIP "${_app_spdxid}"
151+
)
152+
153+
sbom_add(PACKAGE OpenSSL
154+
VERSION "${OPENSSL_VERSION}"
155+
SUPPLIER "Organization: OpenSSL Software Foundation"
156+
DOWNLOAD_LOCATION https://openssl.org
157+
LICENSE "Apache-2.0"
158+
EXTREF "cpe:2.3:a:openssl:openssl:${OPENSSL_VERSION}:*:*:*:*:*:*:*"
159+
RELATIONSHIP "${_app_spdxid}"
160+
)
161+
162+
sbom_finalize(NO_VERIFY)

src/app/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ if(WIN32)
2222
endif()
2323
set(WEBEID_PATH web-eid.exe)
2424
set(BASE_FILE $<TARGET_NAME:web-eid>_${PROJECT_VERSION}.$ENV{PLATFORM})
25-
set(WIX_CMD wix.exe build -nologo
25+
set(WIX_CMD wix build -nologo
2626
-arch $ENV{PLATFORM}
2727
-ext WixToolset.UI.wixext
2828
-bv WixUIDialogBmp=${CMAKE_SOURCE_DIR}/install/dlgbmp.bmp

0 commit comments

Comments
 (0)