ci: unpin pnpm and upgrade pnpm/action-setup to v6.1.0 - #844
Conversation
There was a problem hiding this comment.
Code Review
This pull request removes the packageManager field from package.json and adds the @harperfast/rocksdb-js-linux-x64-musl dependency to pnpm-lock.yaml. The reviewer recommends retaining and updating the packageManager field to a v12 version (such as pnpm@12.3.4) instead of removing it entirely, to ensure deterministic builds across different environments.
📊 Benchmark Resultsget-sync.bench.tsgetSync() > random keys - small key size (100 records)
getSync() > sequential keys - small key size (100 records)
ranges.bench.tsgetRange() > small range (100 records, 50 range)
realistic-load.bench.tsRealistic write load with workers > write variable records with transaction log
transaction-log.bench.tsTransaction log > read 100 iterators while write log with 100 byte records
Transaction log > read one entry from random position from log with 1000 100 byte records
worker-put-sync.bench.tsputSync() > random keys - small key size (100 records, 10 workers)
worker-transaction-log.bench.tsTransaction log with workers > write log with 100 byte records
Results from commit 9f2b658 |
Remove the twelve workflow-local pnpm pins so this PR stays focused on the AI-review callers and leaves the package-manager policy to PR #844. Co-Authored-By: GPT-5 Codex <noreply@openai.com>
| uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9 | ||
| uses: pnpm/action-setup@ea17c68df8912ef543352723c149a84f56e3d413 # v6.1.0 | ||
| with: | ||
| version: latest |
There was a problem hiding this comment.
latest makes the release toolchain mutable: identical release commits can use different pnpm versions across runs—or even across preflight, build, and publish jobs. A newly tagged incompatible version can change install/build/publish behavior without a repository change, and a compromised release would eventually execute as pnpm publish with NPM_TOKEN. This is the same class of unreviewed package-manager drift the previous pin guarded against; upgrading pnpm/action-setup fixes the current bootstrap issue but does not require unpinning pnpm. Please retain a single exact, tested packageManager version in package.json (for example, the verified pnpm@12.3.4) and omit the duplicated version inputs so every workflow reads that central pin.
5643fe3 to
1641ce5
Compare
Reverts the `packageManager: pnpm@11.25.0` pin added in #824 and restores `version: latest` on every `pnpm/action-setup` step. The pin was a workaround for a Windows-only CI failure, but the root cause was not pnpm 12 itself — it was `pnpm/action-setup@v6.0.9` not supporting pnpm 12. That version bootstraps pnpm 11 via npm and then runs `pnpm self-update <target>`. pnpm 12 ships a native executable (`node_modules/pnpm/pnpm[.exe]`) instead of the old JS entry point, so the CMD shim pnpm 11's self-update wrote pointed at an extensionless file: '"C:\...\setup-pnpm\node_modules\.bin\bin\\..\global\v11\...\node_modules\pnpm\pnpm"' is not recognized as an internal or external command `actions/setup-node` with `cache: pnpm` then died invoking `pnpm store path`, which failed every Windows job. `pnpm/action-setup@v6.1.0` (released 2026-09-05, pnpm/action-setup#288) adds a native pnpm 12 bootstrap path with Linux/macOS/Windows smoke coverage, so the action can install pnpm 12 without the self-update hop. Verified locally that pnpm 11.25.0 and 12.3.4 produce byte-identical lockfiles for this repo and that `lockfileVersion` stays at 9.0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1641ce5 to
d40284a
Compare
What
Reverts the
packageManager: "pnpm@11.25.0"pin added in Make a WriteBufferManager write stall observable (#824) and restoresversion: lateston all 12pnpm/action-setupsteps, while bumping the action itself from v6.0.9 → v6.1.0.Why — the pin treated a symptom
The pin was added in response to a CI failure, but the failure was not caused by pnpm 12 being broken. It was caused by
pnpm/action-setup@v6.0.9not supporting pnpm 12.Root cause, from the pre-pin run on
codex/issue-831-phase0-lease(job log):action-setup@v6.0.9bootstraps pnpm 11 via npm, then runspnpm self-update <target>. pnpm 12 ships a native executable atnode_modules/pnpm/pnpm[.exe]instead of the oldbin/pnpm.mjsJS entry point, so the CMD shim that pnpm 11's self-update wrote points at an extensionless file thatcmd.execannot execute.actions/setup-nodewithcache: 'pnpm'then dies callingpnpm store path, failing every Windows job.This was Windows-only — Linux and macOS were fine on pnpm 12 the whole time.
The actual fix
pnpm/action-setup@v6.1.0(released 2026-09-05, pnpm/action-setup#288) adds a native pnpm 12 bootstrap path — installing pnpm 12's plain package directly instead of self-updating across the v11→v12 binary boundary — with new smoke coverage on Linux, macOS, and Windows. The repo was pinned to v6.0.9 (June 15), two releases behind.Verification done locally
pnpm install --ignore-scripts --no-frozen-lockfileunder both 11.25.0 and 12.3.4 against this repo's manifest. Both succeed and produce byte-identicalpnpm-lock.yaml.lockfileVersionstays at9.0, so there is no lockfile-format hazard (and CI uses--no-frozen-lockfileeverywhere regardless).pnpm-workspace.yamlallowBuilds/minimumReleaseAgesettings unchanged.CI result — confirmed green
Full matrix passed on the first run, including all six Windows jobs (Node 22/24/26, Bun, Deno, Native C++). The
Install pnpmandUse Node.jssteps — the exact pair that failed before — are green on every Windows runner.I had expected Windows to still fail here:
action-setup@v6.1.0routes to its new native path viasemver.subset(validRange(version), '>=12.0.0 <13.0.0'), andvalidRange('latest')isnull, soversion: latesttakes the legacy bootstrap-then-self-update path. That prediction was wrong — v6.1.0 also fixes the legacy path's Windows shim, so plainlatestis fine and noversion: 12fallback is needed.Longer term,
pnpm/setup@v2is the documented successor toaction-setup, but it also replacesactions/setup-nodeand auto-runspnpm install, so migrating it is a larger change and out of scope here.🤖 Generated with Claude Code