Skip to content

[claude] Bump the frontend to Node 26 and drop corepack - #15

Open
myieye wants to merge 5 commits into
developfrom
node-26-drop-corepack
Open

[claude] Bump the frontend to Node 26 and drop corepack#15
myieye wants to merge 5 commits into
developfrom
node-26-drop-corepack

Conversation

@myieye

@myieye myieye commented Aug 17, 2026

Copy link
Copy Markdown
Owner

[Claude, autonomous]

Staging PR — never merge; promoted to sillsdev when polished (see FORK.md).

Node 20 is EOL (2026-04-30). This takes the frontend to 26 and cleans up what the bump exposed. Supersedes sillsdev#2522.

  • Base images to node:26 (dependabot's commit, unchanged). 26 goes LTS 2026-10-28, EOL 2029-04-30.
  • Drop corepack: node 25+ no longer ships it, and pnpm reads packageManager itself and switches to the pinned version. Also removes the unpinned corepack@latest.
  • Pin CI's Node with frontend/.node-version. It was resolving engines.node (>=20) to whatever the runner had cached (24.19.0), so tests ran on a different major than the container shipped.
  • engines.node >=20>=22 in all three package.json. Floor only, and frontend/.npmrc sets engine-strict=true so it's a hard gate: it tracks the oldest Node still supported upstream rather than the pinned version.
  • Setup docs: the root README advertised node v20 and never mentioned pnpm, and frontend/README.md told devs to run corepack enable. Both fixed, and corepack enable || true (a silent no-op on node 25+) is gone from the Taskfiles.
  • .github/actions/playwright-tests was the last place on setup-node@v4 and pnpm/action-setup@v3.0.0. It now runs node 26 via .node-version, so it moves to the same SHAs (v7.0.0 / v6.0.10) and identical inputs as the other five call sites, rather than meeting a new major on two-year-old actions.

Not verified here: the docker build, and node 26 itself. The fork runs no docker/deploy workflows, and fork-ui.yaml/fork-fwlite.yaml keep their own node-version-file: './frontend/package.json', so fork CI tests on 24. Upstream covers both.

dependabot Bot and others added 3 commits August 17, 2026 13:20
Bumps the docker group with 1 update in the /frontend directory: node.


Updates `node` from 20 to 26

---
updated-dependencies:
- dependency-name: node
  dependency-version: '26'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: docker
...

Signed-off-by: dependabot[bot] <support@github.com>
Node stopped shipping corepack in 25, so on the new base image the
`npm install -g corepack@latest` line went from working around an old corepack
bug to being required just to get corepack at all. pnpm reads the
`packageManager` field itself and switches to the pinned version, so corepack
was buying us nothing here: install pnpm and drop the extra tool. This also
drops the unpinned `corepack@latest`, which made the image non-reproducible.

`corepack enable || true` in the Taskfiles silently did nothing on node 25+,
and the README told new devs to run `corepack enable`, which no longer exists.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
CI resolved its Node from engines.node (">=20"), which setup-node satisfies
with whatever the runner has cached: 24.19.0 at the time of writing. So tests
ran on 24 while the container shipped 20, and the two drifted silently.

Pin CI with frontend/.node-version instead, which is also what nvm/fnm/mise
read, and leave engines.node as a permissive floor. Raising the floor is a
hard gate because frontend/.npmrc sets engine-strict=true, so it moves to the
oldest Node still supported upstream (22) rather than to the pinned version.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 85c5e6be-6339-4a12-af14-64cb9a3cc1fa

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 47ae39a5-49d1-4099-9bf5-b5e234bbdf19

📥 Commits

Reviewing files that changed from the base of the PR and between 9df949e and 8c5932c.

📒 Files selected for processing (14)
  • .github/actions/playwright-tests/action.yaml
  • .github/workflows/develop-ui.yaml
  • .github/workflows/fw-lite.yaml
  • .github/workflows/lexbox-ui.yaml
  • README.md
  • frontend/.node-version
  • frontend/Dockerfile
  • frontend/README.md
  • frontend/Taskfile.yml
  • frontend/dev.Dockerfile
  • frontend/https-proxy/package.json
  • frontend/package.json
  • frontend/viewer/Taskfile.yml
  • frontend/viewer/package.json
💤 Files with no reviewable changes (2)
  • frontend/viewer/Taskfile.yml
  • frontend/Taskfile.yml

Included review availability: 4 reviews are currently available. Based on recent review activity, included reviews refill at 5 per hour.


📝 Walkthrough

Walkthrough

The PR centralizes the frontend Node.js version in .node-version, raises minimum engine requirements to Node.js 22, updates container images to Node.js 26, installs pnpm directly, and updates CI workflows to use the shared version file.

Changes

Frontend runtime and tooling

Layer / File(s) Summary
Version contract and local setup
frontend/.node-version, frontend/package.json, frontend/https-proxy/package.json, frontend/viewer/package.json, README.md, frontend/README.md, frontend/Taskfile.yml, frontend/viewer/Taskfile.yml
The frontend pins Node.js 26, requires Node.js 22 or newer, updates setup instructions, and removes Corepack enablement from install tasks.
Container runtime setup
frontend/Dockerfile, frontend/dev.Dockerfile
Builder and runtime images now use Node.js 26. Builder images install pnpm 10.24.0 directly.
CI version setup
.github/actions/playwright-tests/action.yaml, .github/workflows/develop-ui.yaml, .github/workflows/fw-lite.yaml, .github/workflows/lexbox-ui.yaml
CI setup reads frontend/.node-version. The Playwright action pins actions/setup-node v7 and pnpm/action-setup v6.0.10.

Suggested reviewers: hahn-kev, rmunn


Comment @coderabbitai help to get the list of available commands.

@deepsource-io

deepsource-io Bot commented Aug 17, 2026

Copy link
Copy Markdown

DeepSource Code Review

We reviewed changes in 9df949e...1a1123e on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSource ↗

PR Report Card

Overall Grade   Security  

Reliability  

Complexity  

Hygiene  

Code Review Summary

Analyzer Status Updated (UTC) Details
C# Aug 17, 2026 1:06p.m. Review ↗
Docker Aug 17, 2026 1:06p.m. Review ↗
JavaScript Aug 17, 2026 1:06p.m. Review ↗
Shell Aug 17, 2026 1:06p.m. Review ↗
SQL Aug 17, 2026 1:06p.m. Review ↗
Secrets Aug 17, 2026 1:06p.m. Review ↗
PowerShell Aug 17, 2026 1:06p.m. Review ↗
CSS Aug 17, 2026 1:06p.m. Review ↗

Important

AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.

The root README still advertised node v20 (EOL, and below the new engines
floor, which engine-strict turns into a hard pnpm install failure) and never
mentioned pnpm at all. That was survivable while the Taskfiles ran
`corepack enable`; now that they don't, a fresh machine needs the pnpm step
written down.

The playwright composite action was the only place left on setup-node v4 and
pnpm/action-setup v3.0.0. It now runs node 26 via .node-version, so move it to
the pins the rest of the repo already uses.

Also reword the pnpm comment in the Dockerfiles: pnpm switches itself to the
packageManager version, so the pinned version is just a bootstrap and doesn't
have to be kept in lockstep by hand.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@myieye

myieye commented Aug 17, 2026

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 17, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

The previous wording explained that pnpm overrides this version without
saying why it's still pinned, which reads as an invitation to float it to
`pnpm@latest` and lose the reproducibility the corepack removal bought.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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