FOSSA Reporting Runbook
How to publish FOSSA attribution and SBOM reports for a component in the monorepo release. For license checks and triage see License Checks and Unhandled FOSSA Licensing Issues. This runbook covers the plumbing only.
How it works
check-licenses.ymlscans each FOSSA project (single-app,optimize,c8run) on every tag and push.- The
fossa-release*jobs incamunda-platform-release.ymlwait for the scan at the release tag revision, then create a FOSSA release in two release groups (attribution as TXT, SBOM as CycloneDX JSON). - The reports are served from the public FOSSA portal, not attached to GitHub releases.
The steps live in the local composite action
fossa-release-project. Each project gets
its own job, so a failure in one does not hide the result of another.
Add a component
Who: Engineering Operations, plus an Infra team member (FOSSA org Admin) for step 2.
- Check the scan. The component needs its own FOSSA project and a matching entry in the
check-licenses.ymlmatrix. Note the project locator, for examplecustom+50756/camunda/camunda@optimize. - Create the release groups. Ask the Infra team (
#ask-infra) to createcamunda-<component>-attributionandcamunda-<component>-sbomunder Monorepo Team and set them to public. The CI accountci-camunda-camundalacks the rights, and the FOSSA UI search only shows groups visible to the searching account, so ask them to check for existing groups first. Note both group IDs from the group URL (https://app.fossa.com/projects/group/<id>). Ask them to store the API key underproducts/camunda/ci/camundaasFOSSA_API_KEY_<COMPONENT>, next to the single-app key. See infra FOSSA docs. - Add a job. In
camunda-platform-release.yml, copyfossa-release-optimizeand change theproject-id, the group IDs,fossa-api-key-vault-keyand theifgate. Add the job toneedsand to theifofnotify-on-successandnotify-if-failed. - Dry run. Dispatch
camunda-platform-release-main-dry-run.ymlwith both the workflow ref and itsbranchinput set to the branch containing the changes. Run withincludeOptimize: trueandincludeOptimize: false, checking that the new job prints the expected FOSSA calls or is skipped respectively. Check that the otherfossa-release*jobs are unchanged. Usezeebe-release-stable-dry-run.ymlto validate stable branches after backporting. - Backfill. For releases already shipped, replay the
fossa/releasecalls per tag withdry-run: truefirst. Check beforehand that each tag revision has a completed scan. - Link the docs. Add the portal links to the
dependencies page in
camunda-docs, indocs/and each supportedversioned_docs/folder. Check that all links resolve. - Backport. Add the
backport stable/X.Ylabels for each supported stable branch, ideally before the next patch release.
When a release run fails
wait-for-scantimes out. The scan for that tag revision is missing, failed or still running. Release artifacts are already published at that point, so only the scan and the failed job need a re-run:-
Find the
check-licenses.ymlruns for the tag SHA. A release starts two of them, one for therelease-X.Y.Zbranch push and one for the tag push.wait-for-scanlooks up the revision by project and SHA only, so either run is enough.gh api "repos/camunda/camunda/actions/workflows/check-licenses.yml/runs?head_sha=$(git rev-list -n1 <tag>)" \--jq '.workflow_runs[] | "\(.id) \(.head_branch) \(.conclusion)"' -
If the
Analyze <project> dependenciesjob is red, use "Re-run failed jobs" on that run.check-licenses.ymlhas noworkflow_dispatch, so a re-run is the only way to scan an existing tag again. If the scan is still running, wait for it to finish. -
Once the scan is green, use "Re-run job" on the failed
fossa-release*job in the release run. That job and the notify jobs that depend on it run again, the rest of the release keeps its results.
-
fossa/releasefails partway. The step makes four calls in order: attribution release, SBOM release, attribution report, SBOM report. It does no lookup or rollback, so a re-run always starts again from the first call. Check the job log to see how far it got:- No release created (the first call failed): fix the cause, then re-run the job.
- Some releases created: the log prints each created release ID. Make only the missing calls locally with those IDs, as for a backfill. Do not re-run the job, it would create duplicate releases.
- Fails again: check the HTTP status in the log. 401/403 means the API key or group rights, 404 a wrong group ID, 5xx a FOSSA outage. A re-run only helps for 5xx.
- If this happens again: make the local
fossa-release-projectaction look up each release by title before creating it, so a re-run skips the calls that already succeeded. Not done yet, as no partial failure has been seen so far.
- Other failures. The failed job triggers
notify-if-failed. The release manager dispatches it to Engineering Operations for plumbing issues. Wrong report content goes through the license triage process.