@@ -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