Repository navigation
ci(release): add SBOM evidence and attestations for published packages- #1 - #1865
turbobobbytraykov wants to merge 15 commits into
Conversation
…blish Pack every publishable package once and describe the exact tarballs with validated CycloneDX 1.6 SBOMs, build provenance and per-package SBOM attestations, then attach the evidence to the GitHub release. Licenses a package does not declare are looked up on ClearlyDefined; gaps produce a warning instead of failing the release. npm publish (and the MCP Registry job that depends on it) is disabled until the flow is validated with a dummy GitHub release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
….json The README already states MIT; without the field the package's SBOM component carried no license and every release raised a license-gap warning. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
setup-node v7 no longer exports a dummy NODE_AUTH_TOKEN, and yarn 1 fails on
the ${NODE_AUTH_TOKEN} reference in the .npmrc that registry-url writes. The
build job never publishes, so it does not need the registry configuration.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TEST ONLY - revert before merging. The release workflow validates that the MCP server's package.json and server.json match the release tag, so the dummy 0.0.0 release needs igniteui-cli, @igniteui/cli-core and @igniteui/mcp-server at 0.0.0 and the internal ~ranges pointing at it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This reverts commit 48562a5. The dummy 0.0.0 release validated the workflow; the packages return to 15.8.2. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The release flow was validated end to end with a dummy 0.0.0 release: the publish job runs again after the attestations, and the MCP Registry job follows a successful npm publish. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@kdinev , do you need the accompanying README.MD file like the one we have for the full product (https://static.infragistics.com/marketing/Website/compliance/sbom/Angular/README.md) ? If we don't need that README for the igniteui-cli package family/group, I'll remove all of the files necessary for generating it. |
Yes, please, we need the README. Don't remove it from generation. |
…mmy release TEST ONLY - revert before merging. Validates the per-package CycloneDX SBOM flow with a dummy 0.0.1 GitHub release in this fork: - the npm publish job is disabled, and the MCP Registry job is skipped with it, since it runs only after a successful publish; - igniteui-cli, @igniteui/cli-core and @igniteui/mcp-server (package.json and server.json) are set to 0.0.1, with the internal ~ranges pointing at it, because the workflow checks the MCP server version against the release tag. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@turbobobbytraykov Let's create an alpha release off of this branch next week, so the publish can be tested. |
git push
…ublishing Reverts 27dbfd9 now that the dummy 0.0.1 release validated the SBOM flow end to end: - igniteui-cli, @igniteui/cli-core and @igniteui/mcp-server (package.json and server.json) are back at 15.8.2, matching IgniteUI/igniteui-cli master, with the internal ~ranges pointing at it again; - the npm publish job runs again, and the MCP Registry job with it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Prepares a full prerelease of the SBOM release flow: - igniteui-cli, @igniteui/cli-core and @igniteui/mcp-server (package.json and server.json) are set to 15.8.3-alpha.0; - @igniteui/angular-templates and @igniteui/angular-schematics are set to 22.2.1583-alpha.0, following the scheme in scripts/versionScript.ts; - the internal ~ranges point at the new versions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kdinev , I opened a new PR so I can do this - PR #1878 . I'm thus closing this PR so we can continue with the newer one. |
Description
Adds release supply-chain evidence for every package
npm-publish.ymlpublishes, using the same approach as IgniteUI/igniteui-angular, IgniteUI/igniteui-webcomponents and IgniteUI/igniteui-react: one delivered CycloneDX SBOM per package, plus an overall SBOM README for the release. npm publishing now uses the exact tarballs that were inventoried and attested.What the release workflow now does
build (read-only, no OIDC): builds as before, then
scripts/build-sbom.jspacks every publishable lerna package once. The packages are@igniteui/cli-core,@igniteui/angular-templates,@igniteui/angular-schematics,@igniteui/mcp-serverandigniteui-cli, read fromlerna.jsonand sorted in dependency order. For each tarball it:--omit=dev --ignore-scripts), with workspace siblings resolved from the tarballs of the same build through npmoverrides, because those versions aren't on npm yet;@cyclonedx/cyclonedx-npm, re-roots it on the published package and checks the graph for duplicate, unknown or unreachable refs;.sha256/.sha512digests and runsnpm auditon the delivered closure.It also writes a best-effort build-environment SBOM of the repository toolchain and one README covering every package in the release.
attest: build provenance for all tarballs. attest-sbom: a matrix job that creates one CycloneDX SBOM attestation per package. Both are skipped in private repos.
publish: now publishes the verified tarballs in dependency order instead of
lerna exec npm publish, after verifying their checksums. It runs only after both attestation jobs succeed.attach-to-release: uploads the tarballs, digests, delivered SBOMs, an SBOM archive (with README and supply-chain notes) and the attestation bundles to the release. It also adds a supply-chain section to the release notes, unless the notes were edited during the build.
mcp-registry: now
needs: publishand runs after a successful npm publish (still skipped for prereleases). Theworkflow_dispatchpath is unchanged.Licenses in each SBOM are the ones the installed packages declare, as in the Angular, Web Components and React releases. No external license lookup is performed and no SPDX documents are produced.
Related Issue
N/A
Type of Change
Affected Packages
@igniteui/mcp-server(packages/igniteui-mcp):licensefield onlyNo other package contents change; the release workflow now inventories all of them.
Checklist
npm run jasmine: 714 passed, 2 pre-existing pending)tsc,tsconfig-pack,build:mcp)npm run lint: 0 errors; 1 pre-existing warning inpackages/core/util/Schematics.ts)Additional Context
Ran
scripts/build-sbom.jsend to end locally against the current packages (15.8.2 / 22.2.1582). All five SBOMs and the build-environment SBOM validated against CycloneDX 1.6, and the overall README rendered with every package. Findings:@igniteui/mcp-serverdeclared nolicensein itspackage.json, so its SBOM component had none. Fixed in this PR by declaring MIT, as its README states.masterbumpedzodto^4.6.6,npm auditreported a high-severity advisory inzod, reached through@igniteui/mcp-server(and so also throughigniteui-cli). The next release run's supply-chain notes will show whether the bump clears it.Validated with a dummy release (previous revision; a re-run against this revision is pending). A
0.0.0GitHub release in this fork ran the workflow withpublishdisabled and the versions temporarily set to 0.0.0 (both since reverted; packages are back at 15.8.2). All jobs succeeded. Checked:.sha256,.sha512, SBOM and SBOM attestation bundle, plus the SBOM archive and the provenance bundle. Every digest matches its tarball.gh attestation verifypasses for every tarball with both the provenance and CycloneDX predicate types, bound to the release tag, commit and run. The attested SBOMs match the released ones.🤖 Generated with Claude Code