Skip to content

ci: supply-chain baseline (P3): no cache in release, npm scripts off, exact Node, cooldowns, zizmor - #5

Merged
jschuller merged 1 commit into
mainfrom
ci/supply-chain-baseline
Oct 21, 2026
Merged

jschuller merged 1 commit into
mainfrom
ci/supply-chain-baseline

Conversation

@jschuller

Copy link
Copy Markdown
Owner

Supply-chain baseline, step P3 (Tier 2: public and publishing repos), finding F7. References: jschuller/homelab-governance (ci.yml, .github/zizmor.yml, .github/dependabot.yml), jschuller/health-lakehouse#25, jschuller/chatops#15.

What changed

  • release.yml (F7, SC-7/SC-10): this job writes the release and signs attestations.
    • No npm cache. cache: npm is removed and package-manager-cache: false is set. Before, the job restored a cache that other runs had written.
    • Node 24.21.0 by exact version (2026-09-07; it bundles npm 11.19.0). Before, it took the newest Node 24 through .nvmrc. 24.22.0 came out on 2026-10-14 and fails the cooldown.
    • npm ci --ignore-scripts.
  • ci.yml:
    • npm ci --ignore-scripts in build and instance-test.
    • No npm cache in instance-test, which holds the instance's OAuth client secret.
    • A zizmor 1.30.1 job (zizmor-action v0.6.4 cc914d7f), configured by .github/zizmor.yml.
  • Permissions: both workflows set top-level permissions: {}. Each job asks for what it needs: the release job's grants are unchanged, and the CI jobs get contents: read.
  • .github/dependabot.yml cooldowns: npm 7 days (14 for a semver-major bump), github-actions 7 days. Groups and the React ignores are unchanged.
  • New .npmrc with min-release-age=7. Node 24's npm 11.19 supports it (from 11.10).
  • CHANGELOG: one line at the top of [Unreleased] → Added. It is placed so that it merges cleanly with docs: explain SDK development-dependency advisories #2 (checked with git merge-tree).

Install scripts

With scripts off, four packages skip their install scripts: @parcel/watcher, @swc/core, fsevents and libxmljs2.

  • I checked on the mini (npm 11.20, with min-release-age=7 active): npm ci --ignore-scripts, npm run lint, npm run sync:skills -- --check, npm run build:ci (frozen keys) and npm run pack all pass. libxmljs2 is only used by the SDK's SBOM library.
  • Not verified:
    • npm run deploy and npm run test:instance without install scripts. They run only on main when SN_SDK_INSTANCE_URL is set.
    • A real release run. It runs only when a release is published.

Checks

  • zizmor 1.30.1 offline: no findings (8 suppressed by persona).
  • check_pr_ci.py: no findings.

Unchanged pins: checkout v7.0.1, setup-node v7.1.0, attest v4.2.2. Open Dependabot PR #4 (eslint 10.13.0) and docs PR #2 are left alone.

Nothing to apply; merging is the owner's.

… exact Node, cooldowns, zizmor

- release.yml: no npm cache (a cache written by another run never reaches the job that writes the release
  and signs attestations), Node 24.21.0 by exact version (npm 11.19.0), npm ci --ignore-scripts.
- ci.yml: npm ci --ignore-scripts in build and instance-test (the SDK builds and packs without install
  scripts); no npm cache in instance-test, which holds the instance's OAuth secret; a zizmor 1.30.1 job.
- Both workflows grant nothing at the top; each job asks for what it needs.
- Dependabot cooldowns (7 days, 14 for a semver-major npm bump); .npmrc min-release-age=7.
- CHANGELOG: one line under [Unreleased] Added (placed so it merges cleanly with #2).
@jschuller
jschuller merged commit 7eb905b into main Oct 21, 2026
3 checks passed
@jschuller
jschuller deleted the ci/supply-chain-baseline branch October 21, 2026 01:37
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.

2 participants