Skip to content

Build the frontend on Node 26 and update dependencies - #53

Merged
codeministry merged 3 commits into
mainfrom
chore/node-26
Nov 8, 2026
Merged

codeministry merged 3 commits into
mainfrom
chore/node-26

Conversation

@codeministry

Copy link
Copy Markdown
Owner

What

  • Node 26 for the frontend image: node:26.13.0-alpine (from 24.22.1). The Angular CLI accepts >=26.0.0.
  • Angular 22.2.5 / CLI 22.2.6 and the remaining frontend dependencies to their current releases (vitest 5.1, Playwright 1.65, eslint 10.14, Tailwind 4.3.5, …), including three majors:
    • jsdom 31 answers none instead of '' for a grid-template-columns nothing computed. ShortlistPage.readSplit() read that as one track and hid the second column in the specs; it now treats none like the empty string, as "no grid". A browser can answer none too.
    • stylelint 18 + stylelint-config-standard 41: the new selector-no-invalid flags all 109 ::ng-deep selectors and has no option to accept them, so it is switched off. The rule did not exist in 17, so the check covers what it covered.
  • Backend: jsoup 1.24.1, Spotless 8.11.0.

Deliberately not in this PR

  • TypeScript 7: Angular 22 accepts >=6.0 <6.1.
  • palantir-java-format 2.103.0 reformats four files; per the catalog comment that is a commit of its own.
  • Gradle 9.9.0: gradle:9.9.0-jdk25 is not published yet, and wrapper and backend image move together.
  • openai-java: 4.101.0 still fails the four chat-stop tests (ChatStreamTest, ChatConversationTest, ChatTurnDeadlineTest); the hold at 4.65.0 stays, the comment now names 4.101.0.

Verified

  • ./gradlew check --no-configuration-cache --rerun-tasks: green, 1289 backend test cases, 0 failures; frontend lint + unit + browser suites green.
  • bun run build: initial bundle 883 kB, under the 1 MB error budget.
  • docker build -f frontend/Dockerfile . on Node 26: builds.

- Frontend image on node:26.13.0-alpine (from 24.22.1).
- Angular 22.2.5 / CLI 22.2.6 and the remaining frontend dependencies to
  their current releases, including jsdom 31, stylelint 18 and
  stylelint-config-standard 41.
- stylelint 18's new selector-no-invalid rejects ::ng-deep and has no option
  to accept it, so it is switched off.
- jsdom 31 answers `none` for an uncomputed grid-template-columns; the
  shortlist treats it like the empty string, as "no grid".
- Backend: jsoup 1.24.1, Spotless 8.11.0. openai-java 4.101.0 still fails
  the chat-stop tests, so the 4.65.0 hold stays.
@codeministry codeministry self-assigned this Nov 8, 2026
A root .nvmrc names Node 26; actions/setup-node reads it in both
workflows, so the frontend half of check no longer runs on whatever
Node the runner ships.
NodePinTest compares the major in .nvmrc with the node:<tag> build stage
in frontend/Dockerfile, and checks that both workflows set up Node from
.nvmrc. Same shape as BunPinTest.
@codeministry
codeministry merged commit 89adcc4 into main Nov 8, 2026
9 of 12 checks passed
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