Skip to content

Commit 1d1438d

Browse files
IONOS(sbom-matrix): add SBOM generation as child of a parent project
in order to reflect version of component and to set it as latest Signed-off-by: Misha M.-Kupriyanov <kupriyanov@strato.de>
1 parent 4d60e7e commit 1d1438d

1 file changed

Lines changed: 24 additions & 4 deletions

File tree

.github/workflows/sbom-matrix.yaml

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,78 +118,90 @@ jobs:
118118
"component": [
119119
{
120120
"name": "nextcloud",
121+
"project_name": "HiDrive NEXT Core",
121122
"path": ".",
122123
"composer_output": "bom.nextcloud.composer.json",
123124
"npm_output": "bom.nextcloud.npm.json",
124125
"project_id": "DT_OBJECT_NEXTCLOUD"
125126
},
126127
{
127128
"name": "theme-nc-ionos-theme-legacy",
129+
"project_name": "HiDrive NEXT Theme: nc-ionos-theme",
128130
"path": "themes/nc-ionos-theme/IONOS",
129131
"npm_output": "bom.theme-nc-ionos-theme-legacy.json",
130132
"project_id": "DT_OBJECT_THEME"
131133
},
132134
{
133135
"name": "app-simplesettings",
136+
"project_name": "HiDrive NEXT App: simplesettings",
134137
"path": "apps-custom/simplesettings",
135138
"composer_output": "bom.app-simplesettings.composer.json",
136139
"npm_output": "bom.app-simplesettings.npm.json",
137140
"project_id": "DT_OBJECT_APP_SIMPLESETTINGS"
138141
},
139142
{
140143
"name": "app-googleanalytics",
144+
"project_name": "HiDrive NEXT App: googleanalytics",
141145
"path": "apps-custom/googleanalytics",
142146
"composer_output": "bom.app-googleanalytics.json",
143147
"project_id": "DT_OBJECT_APP_GOOGLE_ANALYTICS"
144148
},
145149
{
146150
"name": "app-ionos-processes",
151+
"project_name": "HiDrive NEXT App: nc_ionos_processes",
147152
"path": "apps-custom/nc_ionos_processes",
148153
"composer_output": "bom.app-ionos-processes.json",
149154
"project_id": "DT_OBJECT_APP_IONOS_PROCESSES"
150155
},
151156
{
152157
"name": "app-theming",
158+
"project_name": "HiDrive NEXT App: nc_theming",
153159
"path": "apps-custom/nc_theming",
154160
"composer_output": "bom.app-theming.json",
155161
"project_id": "DT_OBJECT_APP_THEMING"
156162
},
157163
{
158164
"name": "app-viewer",
165+
"project_name": "HiDrive NEXT App: viewer",
159166
"path": "apps-external/viewer",
160167
"composer_output": "bom.app-viewer.composer.json",
161168
"npm_output": "bom.app-viewer.npm.json",
162169
"project_id": "DT_OBJECT_APP_VIEWER"
163170
},
164171
{
165172
"name": "app-user_oidc",
173+
"project_name": "HiDrive NEXT App: user_oidc",
166174
"path": "apps-external/user_oidc",
167175
"composer_output": "bom.app-user_oidc.composer.json",
168176
"npm_output": "bom.app-user_oidc.npm.json",
169177
"project_id": "DT_OBJECT_APP_USER_OIDC"
170178
},
171179
{
172180
"name": "app-groupquota",
181+
"project_name": "HiDrive NEXT App: groupquota",
173182
"path": "apps-external/groupquota",
174183
"composer_output": "bom.app-groupquota.json",
175184
"project_id": "DT_OBJECT_APP_GROUPQUOTA"
176185
},
177186
{
178187
"name": "app-richdocuments",
188+
"project_name": "HiDrive NEXT App: richdocuments",
179189
"path": "apps-external/richdocuments",
180190
"composer_output": "bom.app-richdocuments.composer.json",
181191
"npm_output": "bom.app-richdocuments.npm.json",
182192
"project_id": "DT_OBJECT_APP_RICHDOCUMENTS"
183193
},
184194
{
185195
"name": "app-files_downloadlimit",
196+
"project_name": "HiDrive NEXT App: files_downloadlimit",
186197
"path": "apps-external/files_downloadlimit",
187198
"composer_output": "bom.app-files_downloadlimit.composer.json",
188199
"npm_output": "bom.app-files_downloadlimit.npm.json",
189200
"project_id": "DT_OBJECT_APP_FILES_DOWNLOADLIMIT"
190201
},
191202
{
192203
"name": "app-serverinfo",
204+
"project_name": "HiDrive NEXT App: serverinfo",
193205
"path": "apps-external/serverinfo",
194206
"composer_output": "bom.app-serverinfo.json",
195207
"project_id": "DT_OBJECT_APP_SERVERINFO"
@@ -321,7 +333,7 @@ jobs:
321333
# 4. Uploads each SBOM to the corresponding Dependency Track project
322334
# 5. Uses custom CA certificate for secure communication with Dependency Track
323335
upload-sboms:
324-
needs: [ setup-matrix, generate-sbom ]
336+
needs: [ get-version, setup-matrix, generate-sbom ]
325337
runs-on: self-hosted
326338

327339
steps:
@@ -342,25 +354,28 @@ jobs:
342354
DT_API_KEY: ${{ secrets.DEPENDENCY_TRACK_API_KEY }}
343355
IONOS_CA_CERT: ${{ secrets.IONOS_CA }}
344356
MATRIX_CONTEXT: ${{ needs.setup-matrix.outputs.matrix }}
357+
PROJECT_VERSION: ${{ needs.get-version.outputs.project_version }}
345358
VARS_CONTEXT: ${{ toJSon(vars) }}
346359
run: |
347360
# Create temporary CA cert file
348361
cert_file=$(mktemp)
349362
echo "$IONOS_CA_CERT" > "${cert_file}"
350363
351364
echo "Beginning SBOM upload process..."
365+
echo "PROJECT_VERSION: $PROJECT_VERSION"
352366
353367
# Function to upload SBOM to Dependency Track via REST API
354368
upload_bom() {
355369
local bom_file="$1"
356370
local project_id="$2"
371+
local project_name="$3"
357372
358373
if [[ ! -f "$bom_file" ]]; then
359374
echo "Warning: $bom_file not found, skipping..."
360375
return 0
361376
fi
362377
363-
echo "Uploading SBOM ($bom_file) to project $project_id..."
378+
echo "Uploading SBOM ($bom_file) to project $project_id ($project_name)..."
364379
365380
response=$(curl \
366381
--cacert "${cert_file}" \
@@ -371,7 +386,11 @@ jobs:
371386
-X POST "${DT_BASE_URL}/api/v1/bom" \
372387
-H "Content-Type: multipart/form-data" \
373388
-H "X-API-Key: ${DT_API_KEY}" \
374-
-F "project=${project_id}" \
389+
-F "isLatest=true" \
390+
-F "autoCreate=true" \
391+
-F "parentUUID=${project_id}" \
392+
-F "projectName=${project_name}" \
393+
-F "projectVersion=${PROJECT_VERSION}" \
375394
-F "bom=@${bom_file}")
376395
377396
http_code=$(echo "$response" | grep -o "HTTPSTATUS:[0-9]*" | cut -d: -f2)
@@ -397,6 +416,7 @@ jobs:
397416
project_id_var_name=$(echo "$component_json" | jq -r '.project_id')
398417
component_name=$(echo "$component_json" | jq -r '.name')
399418
project_id_var_value=$(echo "$VARS_CONTEXT" | jq -r --arg key "$project_id_var_name" '.[$key]')
419+
project_name=$(echo "$component_json" | jq -r '.project_name')
400420
401421
echo "Processing component: ${component_name}"
402422
@@ -414,7 +434,7 @@ jobs:
414434
continue
415435
fi
416436
417-
upload_bom "$bom_file" "$project_id_var_value" || exit 1
437+
upload_bom "$bom_file" "$project_id_var_value" "$project_name" || exit 1
418438
done
419439
420440
# Cleanup

0 commit comments

Comments
 (0)