Skip to content

Upgrade to Node 26 and pin pnpm 12.17.0 - #4835

Merged
marcoacierno merged 2 commits into
mainfrom
node-update
Nov 1, 2026
Merged

marcoacierno merged 2 commits into
mainfrom
node-update

Conversation

@marcoacierno

Copy link
Copy Markdown
Member

Why

docker build of the frontend failed in the deps stage:

Error: Cannot find module '/root/.cache/node/corepack/v1/pnpm/12.16.1/bin/pnpm.cjs'

package.json had no packageManager field, so corepack enable pnpm resolved the newest pnpm and the download broke. Node 25+ images also ship without corepack, so the same line cannot work on node:26-alpine at all.

Changes

  • Node 26 everywhere: frontend/Dockerfile (node:26-alpine), backend/Dockerfile js-stage, Dockerfile.node.local, both workflows that pinned 23.9.0, graphql-schema-diff.yml, root and badge-service .tool-versions.
  • pnpm 12.17.0 pinned: packageManager in frontend/package.json, PNPM_VERSION in frontend/Dockerfile, npm install -g pnpm@12.17.0 in Dockerfile.node.local and backend/Dockerfile (both previously installed an unpinned latest pnpm).
  • pnpm/action-setup no longer passes version: 9; it reads packageManager instead. Passing both with different values makes the action fail.
  • frontend/pnpm-lock.yaml: pnpm 12 records itself under packageManagerDependencies when packageManager is set. Without this entry pnpm i --frozen-lockfile fails with ERR_PNPM_FROZEN_LOCKFILE_WITH_OUTDATED_LOCKFILE. custom_admin has no packageManager field, so its lockfile is unchanged.

Verified

  • docker build --target deps of frontend/ on node:26-alpine: pnpm 12.17.0, frozen install, exit 0.
  • backend/custom_admin frozen install under node:26 + pnpm 12.17.0: exit 0, lockfile unchanged.
  • Next 16.2.9 requires node >=20.9.0, pnpm 12 requires >=18.

Not verified

  • Full pnpm run build stages for frontend and custom_admin. Needs the backend for codegen plus build args. CI on this PR covers lint and codegen.

The frontend image build failed: without a packageManager field, corepack
resolved the newest pnpm and the download broke. Node 25+ images also ship
without corepack, so the Dockerfiles now install a pinned pnpm with npm.

- Node 26 in every Dockerfile, workflow and .tool-versions
- pnpm 12.17.0 pinned via packageManager and in every Dockerfile
- pnpm/action-setup reads the version from packageManager
- pnpm 12 records itself in frontend/pnpm-lock.yaml; frozen installs
  fail without that entry
@vercel

vercel Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
pycon Ready Ready Preview Nov 1, 2026 2:34am UTC

@claude

claude Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

This PR bumps Node to 26.10.0 and pnpm to 12.17.0 across CI workflows, Dockerfiles and .tool-versions. It pins pnpm through packageManager in frontend/package.json.

  • frontend/pnpm-lock.yaml: pnpm 12 prepended a second YAML document (the packageManagerDependencies env lockfile) to the file. Tools that parse the lockfile as a single document may break on it. That includes Dependabot, Renovate, and the cache-dependency-path hashing in setup-node. Check that Dependabot and any other tool reading this file still work.
  • backend/Dockerfile: custom_admin is built with pnpm 12.17.0 against its own lockfile, which still looks like the old format. --frozen-lockfile may fail or rewrite the lockfile. Confirm the Docker build passes. Also consider adding packageManager to custom_admin/package.json so the version isn't hard-coded in the Dockerfile.
  • Version duplication: 12.17.0 is hard-coded in Dockerfile.node.local, backend/Dockerfile and frontend/Dockerfile, as well as in package.json. The frontend Dockerfile could read it from package.json or use corepack as before, so there is one source of truth.
  • Node 26: this is a non-LTS (Current) release line. Confirm that the Next.js version and the native deps (e.g. sharp) support it before this goes to production images.
  • claude.yml: the system prompt text says "pnpm 12" but the workflow pins 12.17.0 via packageManager. This is fine, but it will go stale on the next bump.

@codecov

codecov Bot commented Oct 31, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 92.41%. Comparing base (6e6bb59) to head (5dfa69c).

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #4835   +/-   ##
=======================================
  Coverage   92.41%   92.41%           
=======================================
  Files         360      360           
  Lines       10920    10920           
  Branches      946      946           
=======================================
  Hits        10092    10092           
  Misses        706      706           
  Partials      122      122           
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

The action runs at the repository root, where there is no package.json,
so it cannot find the packageManager field.
@marcoacierno
marcoacierno merged commit 7e470e1 into main Nov 1, 2026
11 checks passed
@marcoacierno
marcoacierno deleted the node-update branch November 1, 2026 03:31

This branch was successfully deployed

1 active deployment
Preview — 5dfa69c3 Deployed Nov 1, 2026 by vercel[bot]
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.

1 participant