Repository navigation
ci(release): add SBOM evidence and attestations for published packages- #1 - #1865
Open
turbobobbytraykov wants to merge 9 commits into
Open
turbobobbytraykov wants to merge 9 commits into
turbobobbytraykov wants to merge 9 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>
Contributor
Author
|
@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. |
Member
Yes, please, we need the README. Don't remove it from generation. |
kdinev
previously approved these changes
Oct 28, 2026
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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