Skip to content

Token-free CI: public-npm deps, OIDC, built-in GITHUB_TOKEN, pnpm 11 - #35

Merged
rosskevin merged 2 commits into
mainfrom
ci-pat-free
Jun 3, 2026
Merged

rosskevin merged 2 commits into
mainfrom
ci-pat-free

Conversation

@rosskevin

@rosskevin rosskevin commented Jun 3, 2026 •

Copy link
Copy Markdown
Member

Summary

Completes the move to a fully token-free release pipeline and bumps to pnpm 11. Follows up on #34 (which fixed npm publishing via OIDC) by removing the last long-lived token — the GH_TOKEN PAT auto used for GitHub releases, which was the cause of the v4.0.0 release 404.

Why

The v4.0.0 release published to npm (OIDC ✓) but failed to create the GitHub Release: auto's Releases API call used GH_TOKEN (a fine-grained PAT that could read packages but lacked Contents: write), returning 404. Rather than rotate another PAT, this removes the PAT entirely.

Changes

Token-free releases

  • Drop GitHub Packages routing — remove .npmrc. @alienfast/biome-config and @alienfast/tsconfig are now consumed from public npm, so dependency installs need no token at all. (Requires biome-config ≥ 1.0.5 on public npm, now published as 1.0.6.)
  • auto uses the built-in GITHUB_TOKEN for GitHub releases/labels (it already has contents/issues/pull-requests: write from the workflow permissions block). Removed the GH_TOKEN PAT, PROTECTED_BRANCH_REVIEWER_TOKEN, and the now-unused NPM_TOKEN envs from build.yml.
  • npm publish stays on OIDC trusted publishing (from Migrate tooling to pnpm, Biome, and tsdown #34) — no NPM_TOKEN.

Net: no long-lived secrets in the release path — installs use public npm, GitHub releases use the per-run built-in token, npm publish uses OIDC.

pnpm 10 → 11

  • packageManager: pnpm@11.5.1.
  • pnpm 11 no longer reads the package.json pnpm field, so build-script approval moves to pnpm-workspace.yaml as allowBuilds (the pnpm 11 mechanism; onlyBuiltDependencies alone is no longer honored).
  • minimumReleaseAge is a pnpm 11 default (won't install <24h-old packages — a supply-chain delay enforced on every pnpm install, including CI). Freshly-published @alienfast/* releases (our own org) would block CI, so pnpm-workspace.yaml allowlists the scope via minimumReleaseAgeExclude: ['@alienfast/*']. Third-party deps keep the age protection.
  • Regenerated pnpm-lock.yaml (pnpm 11 format; @alienfast/* resolve from public npm).

Dependency bumps

  • @alienfast/biome-config ^1.0.6, @biomejs/biome ^2.4.16.
  • i18next pinned to 26.3.0 (exact). 26.3.1 was published <24h ago and trips the minimumReleaseAge policy above; since i18next is third-party (not covered by the @alienfast/* allowlist) it's pinned to the prior, functionally-equivalent release and can be bumped once 26.3.1 ages out.

Testing

  • ✅ pnpm install --frozen-lockfile — passes pnpm 11's supply-chain policy check (the exact CI command), token-free (public npm), esbuild/biome build scripts approved via allowBuilds
  • ✅ pnpm build — ESM + DTS (4 files)
  • ✅ pnpm check-types
  • ✅ pnpm test — 18 passed
  • ✅ pnpm check-biome — no findings
  • ✅ no npm.pkg.github.com references remain (config or lockfile)

Note

The v4.0.0 GitHub Release is still missing (the failed run). Once this merges, future releases will create it correctly; the existing v4.0.0 can be backfilled separately from the existing tag if desired.


🤖 Generated with Claude Code

rosskevin added 2 commits June 3, 2026 11:52
…); pnpm 11

- drop GitHub Packages routing (remove .npmrc): @alienfast/biome-config + @alienfast/tsconfig now resolve from public npm, so installs need no token
- auto creates GitHub releases/labels with the built-in GITHUB_TOKEN; remove the GH_TOKEN PAT, PROTECTED_BRANCH_REVIEWER_TOKEN and (now unused) NPM_TOKEN envs. npm publish stays on OIDC trusted publishing
- pnpm 10 -> 11: move build-script approval to pnpm-workspace.yaml `allowBuilds`; drop the package.json `pnpm` field (no longer read by pnpm 11)
- bump @alienfast/biome-config ^1.0.6, @biomejs/biome ^2.4.16; pin i18next 26.3.0 (26.3.1 was published <24h ago and trips a minimumReleaseAge supply-chain policy)
- regenerate pnpm-lock.yaml
pnpm 11 enforces a default ~24h minimumReleaseAge supply-chain delay. Freshly-published @alienfast packages (our own org, e.g. biome-config 1.0.6) blocked 'pnpm install --frozen-lockfile' in CI. Allowlist the @alienfast scope so our own releases install immediately, while third-party deps keep the age protection.
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown
📦 Published PR as canary version: 4.0.1--canary.35.26899931270.0

✨ Test out this PR locally via:

npm install vite-plugin-i18next-loader@4.0.1--canary.35.26899931270.0
# or 
yarn add vite-plugin-i18next-loader@4.0.1--canary.35.26899931270.0

@rosskevin
rosskevin merged commit e30f992 into main Jun 3, 2026
4 checks passed
@rosskevin
rosskevin deleted the ci-pat-free branch June 3, 2026 16:59
@github-actions

github-actions Bot commented Jun 3, 2026

Copy link
Copy Markdown

🚀 PR was released in v4.0.1 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant