Skip to content

chore(quality): SBOM as release asset only — drop in-repo commit step#34

Merged
rubenvdlinde merged 1 commit intomainfrom
chore/sbom-release-asset-only
May 1, 2026
Merged

chore(quality): SBOM as release asset only — drop in-repo commit step#34
rubenvdlinde merged 1 commit intomainfrom
chore/sbom-release-asset-only

Conversation

@rubenvdlinde
Copy link
Copy Markdown
Contributor

Drops Commit-SBOM step from central Quality workflow. Adds SECURITY.md SBOM section. SBOM continues to ship as workflow artifact (90d) + release asset on tag push. Stable URLs: https://github.com/ConductionNL//releases/latest/download/sbom.cdx.json. Per-app cleanup PRs follow.

The SBOM job in the central reusable Quality workflow used to commit the
generated `sbom.cdx.json` back to the calling repo's main branch on every
push. That created two problems:

1. **PAT pressure** — pushing to a protected `main` from a workflow needed
   either an admin override (each PR via `--admin`) or a PAT/GitHub App with
   bypass on `sbom.cdx.json`. PATs in repo secrets are a security liability
   we want to avoid.

2. **Workflow self-recursion + double-fire of release/CI workflows** — every
   SBOM commit triggered another push event that re-ran the Quality workflow
   (regenerating the same SBOM → no-op → still a CI minute), and could fire
   downstream workflows (release-to-appstore, etc.) that watch `push: main`.

Fix: don't commit. Publish exclusively via two channels that already exist:

- **Workflow artifact** (90-day retention) — for internal CI audit/replay.
- **Release asset** on every tag push — stable URL for downstream consumers
  via `https://github.com/ConductionNL/<app>/releases/latest/download/sbom.cdx.json`.

Both channels are already implemented by the existing `Upload SBOM artifact`
+ `Attach SBOM to release` steps, which are kept unchanged.

Removed:
- `Commit SBOM` step (the only step that wrote back to the repo).
- `token: ${{ secrets.GITHUB_TOKEN }}` from the SBOM checkout step (no
  push privilege needed anymore).

Added: SECURITY.md "Software Bill of Materials" section documenting the
consumer contract — stable URLs, format (CycloneDX 1.5 JSON), update
cadence (per release), verification gates (Grype + composer audit + npm
audit), and where to report SBOM issues.

Per-app fan-out (separate PRs): each app deletes its
`.github/workflows/sbom.yml` (the central job replaces it), removes the
checked-in `sbom.cdx.json`, and adds it to `.gitignore`.
@rubenvdlinde rubenvdlinde merged commit ea31f28 into main May 1, 2026
4 checks passed
@rubenvdlinde rubenvdlinde deleted the chore/sbom-release-asset-only branch May 1, 2026 11:46
rubenvdlinde added a commit to ConductionNL/docudesk that referenced this pull request May 1, 2026
…asset only) (#113)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/docudesk/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit to ConductionNL/mydash that referenced this pull request May 1, 2026
…asset only) (#86)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/mydash/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit to ConductionNL/nextcloud-app-template that referenced this pull request May 1, 2026
…asset only) (#24)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/nextcloud-app-template/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit to ConductionNL/nldesign that referenced this pull request May 1, 2026
…asset only) (#58)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/nldesign/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit to ConductionNL/opencatalogi that referenced this pull request May 1, 2026
…asset only) (#507)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/opencatalogi/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit to ConductionNL/openconnector that referenced this pull request May 1, 2026
…asset only) (#735)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/openconnector/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit to ConductionNL/openregister that referenced this pull request May 1, 2026
…asset only) (#1386)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/openregister/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit to ConductionNL/shillinq that referenced this pull request May 1, 2026
…asset only) (#68)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/shillinq/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
rubenvdlinde added a commit that referenced this pull request May 1, 2026
…#35)

Documents the org-wide rules so new and existing apps know exactly how
to wire CI:
- One central reusable Quality workflow at ConductionNL/.github
- Every app calls it via a thin wrapper at .github/workflows/code-quality.yml
- No per-app duplication of quality logic
- SBOM follows from central job → release asset (see SECURITY.md)
- Branch flow: feature/* → development → beta → main with the protection
  matrix described

Triggered by drift discovered in the audit after the SBOM cleanup
(#34): three apps had non-canonical wrapper filenames
(quality-check.yml, quality.yml) and one app (openconnector) duplicates
quality logic instead of consuming the central workflow.
rubenvdlinde added a commit to ConductionNL/mydash that referenced this pull request May 3, 2026
…asset only) (#86)

The central Quality workflow (ConductionNL/.github#34) now publishes SBOMs
exclusively as release assets — see SECURITY.md "Software Bill of Materials".

This PR cleans up the per-app remnants:
- delete .github/workflows/sbom.yml (the central job replaces it)
- delete the checked-in sbom.cdx.json (release asset is the source of truth)
- gitignore SBOM files so future generations don't accidentally land in repo

Stable URL for clients:
  https://github.com/ConductionNL/mydash/releases/latest/download/sbom.cdx.json

Co-authored-by: SBOM Cleanup <ops@conduction.nl>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant