Supply chain hardening for pnpm and GitHub Actions#130
Merged
Cahllagerfeld merged 1 commit intomainfrom Apr 1, 2026
Merged
Conversation
- Add pnpm-workspace.yaml with 7-day minimumReleaseAge cooldown, onlyBuiltDependencies allowlist (esbuild), blockExoticSubdeps, and trustPolicy: no-downgrade - Pin all GitHub Actions to full-length commit SHAs to prevent tag hijacking attacks (e.g. tj-actions incident) - Add persist-credentials: false to all checkout steps - Add Dependabot config for GitHub Actions with 7-day cooldown
Cahllagerfeld
approved these changes
Apr 1, 2026
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
Adds supply chain security hardening based on an audit of current configuration against best practices for package cooldowns and dependency management.
Changes
pnpm-workspace.yaml(new): Configures pnpm v10 supply chain protections:minimumReleaseAge: 10080— 7-day cooldown before newly published packages can be installed (blocks the window where most compromised packages get detected and yanked)onlyBuiltDependencies: [esbuild]— only esbuild is allowed to run lifecycle scripts (postinstall); all others are blockedblockExoticSubdeps: true— prevents transitive dependencies from pulling code from git repos or tarballstrustPolicy: no-downgrade— blocks package versions that have weaker authentication than prior releases (catches credential compromise)GitHub Actions pinned to commit SHAs: All 4 third-party actions (
actions/checkout,anthropics/claude-code-action,openai/codex-action,actions/github-script) are pinned to full-length commit SHAs instead of mutable tag refs. This prevents tag hijacking attacks like the tj-actions/changed-files incident that affected 23,000+ repos.persist-credentials: falseadded to allactions/checkoutsteps to prevent theGITHUB_TOKENfrom leaking to subsequent steps..github/dependabot.yml(new): Enables Dependabot for thegithub-actionsecosystem with weekly checks and a 7-day cooldown on updates.What's NOT included (follow-up)
Test plan
pnpm installsucceeds locally with the newpnpm-workspace.yaml