Skip to content

Commit 525918d

Browse files
committed
ci(sbom): split bomsh upload into provenance bundle + trace diagnostics
The bomsh job previously bundled the provenance proof (OmniBOR ADG + enriched SPDX, valuable long-term) with raw bomtrace3 trace and config (useful only for triaging the producing run) in one 90-day artefact. Split into `bomsh-omnibor-<sha>` (90 days) and `bomsh-trace-diag-<sha>` (14 days) so each class of output gets a sensible retention lifecycle.
1 parent b3aab11 commit 525918d

1 file changed

Lines changed: 34 additions & 12 deletions

File tree

.github/workflows/sbom.yml

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,13 +1032,25 @@ jobs:
10321032
# rather than only running here against a real bomsh trace.
10331033
run: python3 scripts/bomsh_verify.py
10341034

1035-
# The full provenance bundle - the high-value artefact of the whole
1036-
# PR, the one a CRA reviewer or downstream packager wants to download.
1037-
# MUST be uploaded BEFORE the `make clean` step below, which deletes
1038-
# everything by design. `if: always()` so even when the assertion
1039-
# above fails (which is when triage matters most), the bundle ships.
1035+
# Split into two artefacts deliberately:
10401036
#
1041-
# Contents:
1037+
# bomsh-omnibor-${{ github.sha }} (90-day retention)
1038+
# The provenance bundle a CRA reviewer or downstream packager
1039+
# actually wants. Small, signed-meaningful, kept long.
1040+
#
1041+
# bomsh-trace-diag-${{ github.sha }} (14-day retention)
1042+
# The raw bomtrace3 syscall trace + bomsh config. ~3 MB,
1043+
# useful only for diagnosing trace gaps (e.g. a build step
1044+
# that escaped ptrace) -- not part of the provenance proof.
1045+
# Short retention because it stops being useful as soon as
1046+
# you've finished triaging the run that produced it.
1047+
#
1048+
# Both MUST upload BEFORE the `make clean` step below, which
1049+
# deletes everything by design. `if: always()` so even when an
1050+
# assertion above fails (which is when triage matters most),
1051+
# the bundles ship.
1052+
#
1053+
# Provenance bundle contents:
10421054
# omnibor/ - OmniBOR Artifact Dependency Graph
10431055
# (objects/ + metadata/bomsh/*),
10441056
# content-addressed by gitoid; the
@@ -1049,11 +1061,6 @@ jobs:
10491061
# against omnibor.* to confirm only
10501062
# the externalRef was added).
10511063
# wolfssl-*.cdx.json - CycloneDX equivalent.
1052-
# bomsh_raw_logfile.sha1 - raw bomtrace3 syscall trace, for
1053-
# debugging trace gaps (e.g. a build
1054-
# step that escaped ptrace).
1055-
# _bomsh.conf - 1-line config passed to bomtrace3
1056-
# -c at trace time.
10571064
- name: Upload OmniBOR graph + bomsh-enriched SBOMs
10581065
if: always()
10591066
uses: actions/upload-artifact@v4
@@ -1064,10 +1071,25 @@ jobs:
10641071
omnibor.wolfssl-*.spdx.json
10651072
wolfssl-*.spdx.json
10661073
wolfssl-*.cdx.json
1074+
if-no-files-found: warn
1075+
retention-days: 90
1076+
1077+
- name: Upload bomsh trace diagnostics
1078+
# Diagnostic-only, short retention. Kept separate so the
1079+
# provenance bundle above stays slim for downstream consumers
1080+
# who don't need to debug ptrace gaps. `_bomsh.artefact` is
1081+
# included here (not in the provenance bundle) because it is
1082+
# a CI-internal pointer file, not part of the SBOM contract.
1083+
if: always()
1084+
uses: actions/upload-artifact@v4
1085+
with:
1086+
name: bomsh-trace-diag-${{ github.sha }}
1087+
path: |
10671088
bomsh_raw_logfile.sha1
10681089
_bomsh.conf
1090+
_bomsh.artefact
10691091
if-no-files-found: warn
1070-
retention-days: 90
1092+
retention-days: 14
10711093

10721094
- name: make clean removes all bomsh + sbom artefacts
10731095
# Regression guard: if a future change adds an output to either

0 commit comments

Comments
 (0)