chore(deps): upgrade frontend Node engine to 24#4658
Conversation
Bump the frontend Node engine from 20.x to 24.x ahead of the Node 20 end-of-life window. Updates the package engines field, the CI matrix, the @types/node devDependency, the docker build stage that compiles the frontend bundle, and the Node references in AGENTS.md. Also fixes a stale literal `18` in the frontend job-name format string in build.yml that no longer matched the matrix. Closes #4657
Signed-off-by: Xinyuan Lin <xinyual3@uci.edu>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4658 +/- ##
=========================================
Coverage 42.93% 42.93%
- Complexity 2028 2030 +2
=========================================
Files 957 957
Lines 34077 34077
Branches 3753 3753
=========================================
Hits 14632 14632
- Misses 18667 18669 +2
+ Partials 778 776 -2
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR upgrades the frontend’s required Node.js runtime to Node 24 (Active LTS), updating the version surfaces in the frontend package metadata, CI workflow, Docker build stage, and contributor docs.
Changes:
- Bump
frontend/package.jsonNode engine to>=24.0.0and update@types/nodeto24.10.1. - Update CI to use Node
24.10.0for the frontend job. - Update the web application Dockerfile frontend build stage to
node:24-bookwormand refresh docs/lockfile accordingly.
Reviewed changes
Copilot reviewed 3 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
frontend/package.json |
Raises minimum Node engine to 24 and updates Node typings. |
frontend/yarn.lock |
Regenerated lockfile reflecting updated @types/node and undici-types. |
.github/workflows/build.yml |
Updates frontend CI Node version to 24.10.0 (but also removes job name: fields). |
bin/texera-web-application.dockerfile |
Updates frontend build stage base image to Node 24. |
AGENTS.md |
Updates Node version references to >=24.0.0. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Remove dynamic job name formatting for amber build. Signed-off-by: Xinyuan Lin <xinyual3@uci.edu>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Xinyuan Lin <xinyual3@uci.edu>
### What changes were proposed in this PR? Manual backport of #4925 to `release/v1.1.0-incubating`. Auto-backport failed because `bin/texera-web-application.dockerfile` diverged on main (Node 22 → 24 in #4658, landed 2026-05-02). Conflict resolved by keeping the release branch's `FROM node:22-bookworm` and inserting the disclaimer block above it. The other 11 Dockerfiles applied cleanly. ### Any related issues, documentation, discussions? Backport of #4925. Closes the auto-backport failure noted at https://github.com/apache/texera/actions/runs/25336814980/job/74284062316. ### How was this PR tested? Comment-only change; no functional impact. `git diff --stat upstream/release/v1.1.0-incubating` shows 12 Dockerfiles touched, +9 each (+108 / 0). ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Opus 4.7)
### What changes were proposed in this PR? Delete the root `Dockerfile`. It is dead code that has been broken since the `core/` reorganization in late 2025 and is referenced by nothing in the build system. **Why it is broken on its own terms.** The file still contains: - `COPY core/gui/package.json core/gui/yarn.lock ./` and `COPY core/gui .` — `core/gui/` was relocated to `frontend/` in #3851 (`chore: relocate core/gui to frontend`). - `COPY core/ .` — `core/` was renamed to `common/` in #3882 (`chore: rename core to common`). - `RUN pip3 install -r requirements.txt` and `RUN pip3 install -r operator-requirements.txt` — those files now live under `amber/`. - `FROM node:18-alpine` — the active frontend builder is `node:24-bookworm` in `bin/texera-web-application.dockerfile` (post #4658). The last touch was #3877 (`chore: rename core/scripts to bin`, Oct 2025), which only fixed one path inside this file and left the rest pointing at directories that no longer exist. `docker build .` against this file fails immediately — there is nothing to copy from `core/gui/`. **Why nothing uses it.** - `.github/workflows/build-and-push-images.yml` builds images by globbing `bin/*.dockerfile` only. - `bin/build-images.sh` and `bin/merge-image-tags.sh` likewise iterate `*.dockerfile` from `bin/`. - `bin/README.md` documents `bin/*.dockerfile` as the supported pattern (e.g. `docker build -f bin/texera-web-application.dockerfile -t ... .`). - The two `docker-compose.yml` files (`bin/single-node/`, `sql/`) consume pre-built images and do not declare `build:` for the root `Dockerfile`. `.dockerignore` is intentionally kept — it still applies as a build-context filter for the active `bin/*.dockerfile` builds run from the project root. ### Any related issues, documentation, discussions? Closes #4661. ### How was this PR tested? No automated tests apply; this is a pure deletion of an unreferenced file. Verified manually that no remaining file references the root `Dockerfile`: ```bash grep -rIn -E '(^|[^.a-zA-Z/])\./Dockerfile|-f Dockerfile' \ --exclude-dir=node_modules --exclude-dir=.git . | wc -l # → 0 ``` The active image-build paths still resolve (`bin/*.dockerfile` enumerated by both the local `bin/build-images.sh` and the `build-and-push-images.yml` matrix builder). ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Opus 4.7)
### What changes were proposed in this PR? Delete the root `Dockerfile`. It is dead code that has been broken since the `core/` reorganization in late 2025 and is referenced by nothing in the build system. **Why it is broken on its own terms.** The file still contains: - `COPY core/gui/package.json core/gui/yarn.lock ./` and `COPY core/gui .` — `core/gui/` was relocated to `frontend/` in #3851 (`chore: relocate core/gui to frontend`). - `COPY core/ .` — `core/` was renamed to `common/` in #3882 (`chore: rename core to common`). - `RUN pip3 install -r requirements.txt` and `RUN pip3 install -r operator-requirements.txt` — those files now live under `amber/`. - `FROM node:18-alpine` — the active frontend builder is `node:24-bookworm` in `bin/texera-web-application.dockerfile` (post #4658). The last touch was #3877 (`chore: rename core/scripts to bin`, Oct 2025), which only fixed one path inside this file and left the rest pointing at directories that no longer exist. `docker build .` against this file fails immediately — there is nothing to copy from `core/gui/`. **Why nothing uses it.** - `.github/workflows/build-and-push-images.yml` builds images by globbing `bin/*.dockerfile` only. - `bin/build-images.sh` and `bin/merge-image-tags.sh` likewise iterate `*.dockerfile` from `bin/`. - `bin/README.md` documents `bin/*.dockerfile` as the supported pattern (e.g. `docker build -f bin/texera-web-application.dockerfile -t ... .`). - The two `docker-compose.yml` files (`bin/single-node/`, `sql/`) consume pre-built images and do not declare `build:` for the root `Dockerfile`. `.dockerignore` is intentionally kept — it still applies as a build-context filter for the active `bin/*.dockerfile` builds run from the project root. ### Any related issues, documentation, discussions? Closes #4661. ### How was this PR tested? No automated tests apply; this is a pure deletion of an unreferenced file. Verified manually that no remaining file references the root `Dockerfile`: ```bash grep -rIn -E '(^|[^.a-zA-Z/])\./Dockerfile|-f Dockerfile' \ --exclude-dir=node_modules --exclude-dir=.git . | wc -l # → 0 ``` The active image-build paths still resolve (`bin/*.dockerfile` enumerated by both the local `bin/build-images.sh` and the `build-and-push-images.yml` matrix builder). ### Was this PR authored or co-authored using generative AI tooling? (backported from commit d837578) Generated-by: Claude Code (Opus 4.7)
What changes were proposed in this PR?
Bump the frontend from Node 20 to Node 24 (current Active LTS) ahead of the Node 20 end-of-life window (October 2026 maintenance / April 2027 EOL).
frontend/package.jsonengines.node:>=20.19.0→>=24.0.0@types/node:20.19.39→24.10.1.github/workflows/build.ymlnode-version:20.19.0→24.10.018in the frontend job-name format string (now24, matching the matrix)bin/texera-web-application.dockerfilenode:22-bookworm→node:24-bookwormAGENTS.md— two doc references to the Node engine bumped to>=24.0.0frontend/yarn.lock— regenerated; only@types/nodeand itsundici-typespeer changedOut of scope:
Dockerfilestill pinsnode:18-alpinebut references the long-removedcore/gui/paths. It is stale and should be cleaned up or removed separately.frontend/.nvmrcalready sayslts/*, so no change was needed.Any related issues, documentation, discussions?
Closes #4657. Related: #4647 (Node 24 inside GitHub Actions runtimes).
How was this PR tested?
Locally on Windows with Node 24.15.0 + Yarn 4.14.1:
yarn --cwd frontend install— lockfile updated cleanly (only@types/node20.19.39 → 24.10.1 andundici-types6.21.0 → 7.16.0).yarn --cwd frontend build:ci— production bundle built (initial total 13.82 MB raw / 2.87 MB transfer), exit 0.yarn --cwd frontend test:ci— Karma/Jasmine, 298 of 299 specs passed (1 pre-existing skip), exit 0 under Chrome Headless 147.CI will exercise the new
24.10.0matrix value acrossubuntu-latest,windows-latest, andmacos-latest.Was this PR authored or co-authored using generative AI tooling?
Generated-by: Claude Code (Opus 4.7)