Skip to content

Commit d31368a

Browse files
Paul Mulliganclaude
andcommitted
fix(ci): pin pnpm to v10 and approve builds via onlyBuiltDependencies
CI's `pnpm/action-setup version: latest` floated onto pnpm 11, which hard-fails `pnpm install --frozen-lockfile` with ERR_PNPM_IGNORED_BUILDS on unapproved native build scripts (esbuild). pnpm 11 also ignores the documented v10 `onlyBuiltDependencies` key (it renames it to `allowBuilds`), so the prior `allowBuilds` workaround was inert on v10 and the approval mechanism is version-dependent. - Pin pnpm/action-setup@v6 with version: 10 in all jobs (was @v4 latest) - Replace non-standard allowBuilds with documented onlyBuiltDependencies (esbuild, sharp) in app/pnpm-workspace.yaml - Bump checkout@v7, setup-node@v6, upload-artifact@v7 (clears the Node 20 deprecation warning) Verified locally on pnpm 10.15.1: frozen install exits 0 and runs esbuild's build script; lockfile unchanged (frozen-lockfile stays valid). Reproduced the original ERR_PNPM_IGNORED_BUILDS failure on pnpm 11.9.0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent cfbb186 commit d31368a

2 files changed

Lines changed: 30 additions & 23 deletions

File tree

.github/workflows/ci.yml

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ jobs:
1515
name: Lint & Format
1616
runs-on: ubuntu-latest
1717
steps:
18-
- uses: actions/checkout@v4
19-
- uses: pnpm/action-setup@v4
18+
- uses: actions/checkout@v7
19+
- uses: pnpm/action-setup@v6
2020
with:
21-
version: latest
22-
- uses: actions/setup-node@v4
21+
version: 10
22+
- uses: actions/setup-node@v6
2323
with:
2424
node-version: 22
2525
cache: pnpm
@@ -31,11 +31,11 @@ jobs:
3131
name: Type Check
3232
runs-on: ubuntu-latest
3333
steps:
34-
- uses: actions/checkout@v4
35-
- uses: pnpm/action-setup@v4
34+
- uses: actions/checkout@v7
35+
- uses: pnpm/action-setup@v6
3636
with:
37-
version: latest
38-
- uses: actions/setup-node@v4
37+
version: 10
38+
- uses: actions/setup-node@v6
3939
with:
4040
node-version: 22
4141
cache: pnpm
@@ -47,18 +47,18 @@ jobs:
4747
name: Test
4848
runs-on: ubuntu-latest
4949
steps:
50-
- uses: actions/checkout@v4
51-
- uses: pnpm/action-setup@v4
50+
- uses: actions/checkout@v7
51+
- uses: pnpm/action-setup@v6
5252
with:
53-
version: latest
54-
- uses: actions/setup-node@v4
53+
version: 10
54+
- uses: actions/setup-node@v6
5555
with:
5656
node-version: 22
5757
cache: pnpm
5858
cache-dependency-path: app/pnpm-lock.yaml
5959
- run: pnpm install --frozen-lockfile
6060
- run: pnpm test
61-
- uses: actions/upload-artifact@v4
61+
- uses: actions/upload-artifact@v7
6262
if: always()
6363
with:
6464
name: coverage-report
@@ -70,11 +70,11 @@ jobs:
7070
runs-on: ubuntu-latest
7171
needs: [lint, typecheck, test]
7272
steps:
73-
- uses: actions/checkout@v4
74-
- uses: pnpm/action-setup@v4
73+
- uses: actions/checkout@v7
74+
- uses: pnpm/action-setup@v6
7575
with:
76-
version: latest
77-
- uses: actions/setup-node@v4
76+
version: 10
77+
- uses: actions/setup-node@v6
7878
with:
7979
node-version: 22
8080
cache: pnpm

app/pnpm-workspace.yaml

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
# pnpm build-script approval. pnpm v11 replaced onlyBuiltDependencies with
2-
# `allowBuilds`; this allows esbuild's (and sharp's) postinstall so CI's
3-
# `pnpm install --frozen-lockfile` passes instead of ERR_PNPM_IGNORED_BUILDS.
4-
allowBuilds:
5-
esbuild: true
6-
sharp: true
1+
# Approve the dependencies allowed to run install/build scripts during
2+
# `pnpm install` (pnpm blocks dependency build scripts by default). This is
3+
# pnpm v10's documented mechanism — https://pnpm.io/settings#onlybuiltdependencies
4+
# — so CI's `pnpm install --frozen-lockfile` runs them and exits 0 instead of
5+
# failing with ERR_PNPM_IGNORED_BUILDS.
6+
#
7+
# The pnpm major is pinned to 10 in .github/workflows/ci.yml because pnpm v11
8+
# renames this key to `allowBuilds` (and ignores `onlyBuiltDependencies`); keep
9+
# the two in sync. esbuild ships a native postinstall; sharp is listed
10+
# defensively (it uses prebuilt @img/* binaries today, with no install script).
11+
onlyBuiltDependencies:
12+
- esbuild
13+
- sharp

0 commit comments

Comments
 (0)