From 155558ee62ff09fb146472763eccdf6c188cd6aa Mon Sep 17 00:00:00 2001 From: Matt Fiddaman Date: Sat, 18 Oct 2025 23:58:27 +0100 Subject: [PATCH] drop support for node 20 (#5937) * node 24 * node types * dockerfiles * readme * note --- .github/actions/setup/action.yml | 2 +- .github/workflows/check.yml | 2 +- .../workflows/issues-feature-implemented.yml | 2 +- .../publish-nightly-npm-packages.yml | 2 +- .github/workflows/publish-npm-packages.yml | 2 +- .nvmrc | 2 +- Dockerfile | 2 +- package.json | 4 ++-- packages/loot-core/package.json | 2 +- packages/plugins-service/package.json | 2 +- packages/sync-server/README.md | 2 +- packages/sync-server/docker/ubuntu.Dockerfile | 4 ++-- packages/sync-server/package.json | 2 +- sync-server.Dockerfile | 4 ++-- upcoming-release-notes/5937.md | 6 ++++++ yarn.lock | 19 ++++++++++++++----- 16 files changed, 37 insertions(+), 22 deletions(-) create mode 100644 upcoming-release-notes/5937.md diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 54244d4044..f26feae2b9 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -17,7 +17,7 @@ runs: - name: Install node uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 - name: Install yarn run: npm install -g yarn shell: bash diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c7ebd00a7e..c96bcfb4be 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -53,6 +53,6 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 - name: Check migrations run: node ./.github/actions/check-migrations.js diff --git a/.github/workflows/issues-feature-implemented.yml b/.github/workflows/issues-feature-implemented.yml index 15301dec6f..af378e2476 100644 --- a/.github/workflows/issues-feature-implemented.yml +++ b/.github/workflows/issues-feature-implemented.yml @@ -27,7 +27,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 - name: Handle feature requests run: node .github/actions/handle-feature-requests.js env: diff --git a/.github/workflows/publish-nightly-npm-packages.yml b/.github/workflows/publish-nightly-npm-packages.yml index 33b514f6a3..78933d29f6 100644 --- a/.github/workflows/publish-nightly-npm-packages.yml +++ b/.github/workflows/publish-nightly-npm-packages.yml @@ -73,7 +73,7 @@ jobs: - name: Setup node and npm registry uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Publish Web diff --git a/.github/workflows/publish-npm-packages.yml b/.github/workflows/publish-npm-packages.yml index 71cd7454da..29aada7022 100644 --- a/.github/workflows/publish-npm-packages.yml +++ b/.github/workflows/publish-npm-packages.yml @@ -56,7 +56,7 @@ jobs: - name: Setup node and npm registry uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 registry-url: 'https://registry.npmjs.org' - name: Publish Web diff --git a/.nvmrc b/.nvmrc index fed2115258..c4c5185671 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20/* +v22/* diff --git a/Dockerfile b/Dockerfile index 2b20169175..95ffc59ca9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ # you are doing. ################################################### -FROM node:20-bullseye as dev +FROM node:22-bookworm as dev RUN apt-get update -y && apt-get upgrade -y && apt-get install -y openssl WORKDIR /app CMD ["sh", "./bin/docker-start"] diff --git a/package.json b/package.json index 3b80f4a5d0..6833a729c1 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ }, "devDependencies": { "@octokit/rest": "^22.0.0", - "@types/node": "^22.18.8", + "@types/node": "^22.18.11", "@types/prompts": "^2.4.9", "@typescript-eslint/parser": "^8.46.0", "cross-env": "^10.1.0", @@ -91,7 +91,7 @@ "socks": ">=2.8.3" }, "engines": { - "node": ">=20", + "node": ">=22", "yarn": "^4.9.1" }, "lint-staged": { diff --git a/packages/loot-core/package.json b/packages/loot-core/package.json index 0c9bad5866..e59ea118fa 100644 --- a/packages/loot-core/package.json +++ b/packages/loot-core/package.json @@ -47,7 +47,7 @@ "@types/better-sqlite3": "^7.6.13", "@types/emscripten": "^1.41.2", "@types/jlongster__sql.js": "npm:@types/sql.js@latest", - "@types/node": "^22.18.8", + "@types/node": "^22.18.11", "@types/pegjs": "^0.10.6", "assert": "^2.1.0", "browserify-zlib": "^0.2.0", diff --git a/packages/plugins-service/package.json b/packages/plugins-service/package.json index 75c743e6b7..8cc358f2f3 100644 --- a/packages/plugins-service/package.json +++ b/packages/plugins-service/package.json @@ -14,7 +14,7 @@ "workbox-precaching": "^7.3.0" }, "devDependencies": { - "@types/node": "^22.18.8", + "@types/node": "^22.18.11", "cross-env": "^10.1.0", "typescript": "^5.9.3", "vite": "^7.1.9" diff --git a/packages/sync-server/README.md b/packages/sync-server/README.md index d12a6d1c8b..54bd1678ec 100644 --- a/packages/sync-server/README.md +++ b/packages/sync-server/README.md @@ -10,7 +10,7 @@ Want to say thanks? Click the ⭐ at the top of the page. ### Using the CLI tool -Node.js v18 or higher is required for the @actual-app/sync-server npm package +Node.js v22 or higher is required for the @actual-app/sync-server npm package **Install globally with npm:** diff --git a/packages/sync-server/docker/ubuntu.Dockerfile b/packages/sync-server/docker/ubuntu.Dockerfile index c84a4ba7fd..74395ecc02 100644 --- a/packages/sync-server/docker/ubuntu.Dockerfile +++ b/packages/sync-server/docker/ubuntu.Dockerfile @@ -1,4 +1,4 @@ -FROM node:20-bookworm AS deps +FROM node:22-bookworm AS deps # Install required packages RUN apt-get update && apt-get install -y openssl @@ -37,7 +37,7 @@ RUN rm -rf ./node_modules/@actual-app/web ./node_modules/@actual-app/sync-server COPY packages/desktop-client/package.json ./node_modules/@actual-app/web/package.json COPY packages/desktop-client/build ./node_modules/@actual-app/web/build -FROM node:20-bookworm-slim AS prod +FROM node:22-bookworm-slim AS prod # Minimal runtime dependencies RUN apt-get update && apt-get install tini && apt-get clean -y && rm -rf /var/lib/apt/lists/* diff --git a/packages/sync-server/package.json b/packages/sync-server/package.json index d8407a372c..4b8ca49ee3 100644 --- a/packages/sync-server/package.json +++ b/packages/sync-server/package.json @@ -57,7 +57,7 @@ "@types/cors": "^2.8.19", "@types/express": "^5.0.3", "@types/express-actuator": "^1.8.3", - "@types/node": "^22.18.8", + "@types/node": "^22.18.11", "@types/supertest": "^6.0.3", "@vitest/coverage-v8": "3.2.4", "http-proxy-middleware": "^3.0.5", diff --git a/sync-server.Dockerfile b/sync-server.Dockerfile index c8879c6569..4c2f56a2a9 100644 --- a/sync-server.Dockerfile +++ b/sync-server.Dockerfile @@ -1,4 +1,4 @@ -FROM node:20-bookworm AS deps +FROM node:22-bookworm AS deps # Install required packages RUN apt-get update && apt-get install -y openssl @@ -43,7 +43,7 @@ RUN rm -rf ./node_modules/@actual-app/web ./node_modules/@actual-app/sync-server COPY ./packages/desktop-client/package.json ./node_modules/@actual-app/web/package.json RUN cp -r ./packages/desktop-client/build ./node_modules/@actual-app/web/build -FROM node:20-bookworm-slim AS prod +FROM node:22-bookworm-slim AS prod # Minimal runtime dependencies RUN apt-get update && apt-get install -y tini && apt-get clean -y && rm -rf /var/lib/apt/lists/* diff --git a/upcoming-release-notes/5937.md b/upcoming-release-notes/5937.md new file mode 100644 index 0000000000..6ff4783db4 --- /dev/null +++ b/upcoming-release-notes/5937.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [matt-fidd] +--- + +Drop support for Node.js v20 diff --git a/yarn.lock b/yarn.lock index 3e0917d15f..4dc831eaa5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,7 +94,7 @@ __metadata: "@types/cors": "npm:^2.8.19" "@types/express": "npm:^5.0.3" "@types/express-actuator": "npm:^1.8.3" - "@types/node": "npm:^22.18.8" + "@types/node": "npm:^22.18.11" "@types/supertest": "npm:^6.0.3" "@vitest/coverage-v8": "npm:3.2.4" bcrypt: "npm:^6.0.0" @@ -6203,7 +6203,16 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.18.8, @types/node@npm:^22.7.7": +"@types/node@npm:^22.18.11": + version: 22.18.11 + resolution: "@types/node@npm:22.18.11" + dependencies: + undici-types: "npm:~6.21.0" + checksum: 10/787049231bf4655d57e6deb7e7be46da6b476f29f8184b470e49ce7db45acfd0ad106b67c4f4b09b77f205c83b6b0a0b3d6a69ba17c28a155d3ec4a608eb332d + languageName: node + linkType: hard + +"@types/node@npm:^22.7.7": version: 22.18.8 resolution: "@types/node@npm:22.18.8" dependencies: @@ -6942,7 +6951,7 @@ __metadata: resolution: "actual@workspace:." dependencies: "@octokit/rest": "npm:^22.0.0" - "@types/node": "npm:^22.18.8" + "@types/node": "npm:^22.18.11" "@types/prompts": "npm:^2.4.9" "@typescript-eslint/parser": "npm:^8.46.0" cross-env: "npm:^10.1.0" @@ -13463,7 +13472,7 @@ __metadata: "@types/better-sqlite3": "npm:^7.6.13" "@types/emscripten": "npm:^1.41.2" "@types/jlongster__sql.js": "npm:@types/sql.js@latest" - "@types/node": "npm:^22.18.8" + "@types/node": "npm:^22.18.11" "@types/pegjs": "npm:^0.10.6" absurd-sql: "npm:0.0.54" adm-zip: "patch:adm-zip@npm%3A0.5.16#~/.yarn/patches/adm-zip-npm-0.5.16-4556fea098.patch" @@ -15718,7 +15727,7 @@ __metadata: version: 0.0.0-use.local resolution: "plugins-service@workspace:packages/plugins-service" dependencies: - "@types/node": "npm:^22.18.8" + "@types/node": "npm:^22.18.11" cross-env: "npm:^10.1.0" typescript: "npm:^5.9.3" vite: "npm:^7.1.9"