ci: attest provenance + SBOM for released .vsix, add grouped Dependabot config#228
Merged
Conversation
…ot config Generate an SPDX SBOM (Syft via anchore/sbom-action) and attest signed build provenance + the SBOM against the packaged extension.vsix, inserted after the .vsix audit and before the Marketplace/Open VSX publish so an unattested artifact is never published. Uses the unified actions/attest for both legs (GitHub deprecated attest-sbom and folded attest-build-provenance into actions/attest). Adds only id-token:write + attestations:write to the publish job. Add .github/dependabot.yml: weekly grouped version updates (npm minor+patch grouped, majors individual; github-actions grouped), silencing only routine version bumps of the hand-pinned @types/vscode / @types/node while leaving the security-update path intact.
Address review findings: - Move the third-party anchore/sbom-action before packaging/audit so a compromised action cannot mutate an already-audited .vsix before the attest/publish steps (the SBOM scans the dependency graph and does not need the packaged .vsix). Only first-party actions/attest steps now run between the audit gate and publish. - Scope the github-actions Dependabot group to minor+patch so action majors open individually, matching the npm group and the config's header comment.
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.
Summary
Post-publish security automation for the release pipeline: the publish job now attaches a signed build-provenance attestation and an SBOM attestation to the released
.vsix, and a new grouped Dependabot config keeps dependencies visible without daily churn. LOW-priority supply-chain hardening; no change to the shipped extension's behaviour.Changes
publish.yml— provenance + SBOM attestation. Generates an SPDX SBOM (Syft via SHA-pinnedanchore/sbom-action) and attests both signed build provenance and the SBOM against the packagedextension.vsix, via the first-partyactions/attest. Step order: Build → Generate SBOM → Package.vsix→ Audit.vsix→ Attest provenance → Attest SBOM → Publish. The two attest steps sit before the Marketplace / Open VSX publish, so a transient attestation failure blocks the release rather than shipping an unattested artifact, and the attested digest equals the bytes handed to the marketplaces. The third-party SBOM step is deliberately placed before the.vsixaudit so that audit remains the last gate before any publish-bound step — a compromised action cannot mutate an already-audited.vsix(review finding). Consumers verify withgh attestation verify extension.vsix --repo mtskf/quoll.id-token: write+attestations: writeto the publish job; everything else staysread. Noartifact-metadata: write— that is only needed for registry storage records, which this file-subject attestation does not create..github/dependabot.yml(new). Weekly grouped version updates: minor+patch grouped into one PR per ecosystem (majors open individually), for both npm and GitHub Actions. Complements the already-enabled repo-level Dependabot security-updates toggle.Design notes
actions/attest-build-provenance, but GitHub has unified onactions/attest:actions/attest-sbomnow carries an explicit deprecation notice, andattest-build-provenancestates "new implementations should useactions/attest". Using the single canonicalactions/attestfor both legs (Provenance mode = nosbom-path; SBOM mode =sbom-path) is the future-proof, core-API-direct choice (Quoll's top design axis) and needs the exact same two permissions.path: .) — a superset that covers every component esbuild bundles into the shippeddist/— rather than a byte-for-byte manifest of the--no-dependencies.vsix. Prod-only extraction under pnpm + bundling was judged disproportionate for this LOW-priority hardening; the superset never under-reports shipped components.sbom-actionleast-privilege.upload-release-assets: false(the job holds onlycontents: read); the SBOM is retained as a downloadable workflow artifact. Syft is frozen transitively by the action SHA pin (v1.42.3, baked inSyftVersion.ts), sosyft-versionis intentionally left unset to avoid drift — Dependabot bumps the action and its Syft in lockstep.@typesignore (Codex review, addressed).engines.vscode↔@types/vscode↔@types/nodeare hand-pinned together; theignoreentries are scoped withupdate-types: [version-update:*]so only routine version bumps are silenced — the security-update path stays intact.Design reviewed by Codex (5 findings: all addressed or reasoned).
Related
Test Plan
js-yaml).{contents: read, id-token: write, attestations: write}.v*release tag — the publish workflow runs only on tag push, so CI on this PR does not exercise these steps. Verify on the next release that provenance + SBOM attestations appear for the.vsixandgh attestation verifysucceeds.