From 4a7adf7468ee84cf269aa14d0a1f961edc5c1fb8 Mon Sep 17 00:00:00 2001 From: Tim Svensson Date: Thu, 5 Nov 2026 15:16:10 +0100 Subject: [PATCH] chore: upgrade to Node 26 - Docker images: node:24.9.0 -> node:26.13.0-slim for all stages - CI matrix and .tool-versions: Node 26 - @types/node ^24.6.2 -> ^26.6.6 - pnpm override for the @types/ioredis4 npm: alias, which pnpm 12 otherwise fails to resolve (404) whenever the lockfile is re-resolved Co-Authored-By: Claude Opus 5.5 --- .github/workflows/build.yml | 2 +- .tool-versions | 2 +- Dockerfile | 6 +-- package.json | 2 +- pnpm-lock.yaml | 87 +++++++++++++++++++++---------------- pnpm-workspace.yaml | 2 + 6 files changed, 58 insertions(+), 43 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3c0f982..2ed91ff 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [24.x] + node-version: [26.x] steps: - uses: actions/checkout@v4 diff --git a/.tool-versions b/.tool-versions index 332b840..b8c6097 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,2 +1,2 @@ -node 24.9.0 +node 26.13.0 pnpm 12.3.1 diff --git a/Dockerfile b/Dockerfile index 233405d..7f03b15 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:24.9.0 AS builder +FROM node:26.13.0-slim AS builder WORKDIR /app RUN npm install -g corepack@0.36.0 && corepack enable COPY src src @@ -6,13 +6,13 @@ COPY package.json pnpm-lock.yaml pnpm-workspace.yaml tsconfig.json tsconfig.sett RUN pnpm install --frozen-lockfile RUN pnpm run build -FROM node:24.9.0 AS deps +FROM node:26.13.0-slim AS deps WORKDIR /app RUN npm install -g corepack@0.36.0 && corepack enable COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ RUN pnpm install --frozen-lockfile --prod -FROM node:24.9.0-slim +FROM node:26.13.0-slim WORKDIR /app COPY package.json ./ diff --git a/package.json b/package.json index 35e20aa..dc64dd9 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "@types/koa__router": "^8.0.3", "@types/mkdirp": "^0.5.2", "@types/multer": "^1.3.7", - "@types/node": "^24.6.2", + "@types/node": "^26.6.6", "@types/uuid": "^8.3.0", "dotenv": "^7.0.0", "lint-staged": "^8.1.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2874d57..77aa5c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -107,6 +107,7 @@ settings: overrides: graphql: 15.5.0 + '@opentelemetry/instrumentation-ioredis>@types/ioredis4': npm:@types/ioredis@4.28.10 importers: @@ -240,8 +241,8 @@ importers: specifier: ^1.3.7 version: 1.4.13 '@types/node': - specifier: ^24.6.2 - version: 24.13.6 + specifier: ^26.6.6 + version: 26.6.6 '@types/uuid': specifier: ^8.3.0 version: 8.3.4 @@ -271,7 +272,7 @@ importers: version: 7.0.2 vitest: specifier: ^5.0.1 - version: 5.0.1(@opentelemetry/api@1.4.1)(@types/node@24.13.6)(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(tsx@4.23.15)) + version: 5.0.1(@opentelemetry/api@1.4.1)(@types/node@26.6.6)(vite@8.3.0(@types/node@26.6.6)(esbuild@0.28.2)(tsx@4.23.15)) packages: @@ -1576,6 +1577,9 @@ packages: '@types/node@24.13.6': resolution: {integrity: sha512-SGrw/h3KPFshy3OE6ZL53LMBG5vGQQ8/gIpiqz/kRZhPJ7HgwCEs8LBuNtWLa8dvGZVpSF7+Bf+c11HUrCb/yg==} + '@types/node@26.6.6': + resolution: {integrity: sha512-MzQj+8Kx3XI40OmUAE6Qoh58ZMNstNNMwn2nfd3qWsfe7nDNSqJNzes4njhz6AHwrSHOffSLwXU6yb474Q4aog==} + '@types/pg-pool@2.0.3': resolution: {integrity: sha512-fwK5WtG42Yb5RxAwxm3Cc2dJ39FlgcaNiXKvtTLAwtCn642X7dgel+w1+cLWwpSOFImR3YjsZtbkfjxbHtFAeg==} @@ -3521,6 +3525,9 @@ packages: undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + undici-types@8.9.0: + resolution: {integrity: sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==} + union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} @@ -4761,22 +4768,22 @@ snapshots: '@types/accepts@1.3.7': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/amqplib@0.10.8': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/aws-lambda@8.10.81': {} '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/bunyan@1.8.7': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/chai@5.2.3': dependencies: @@ -4785,11 +4792,11 @@ snapshots: '@types/connect@3.4.35': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/connect@3.4.38': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/content-disposition@0.5.9': {} @@ -4800,7 +4807,7 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.6 '@types/keygrip': 1.0.6 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/deep-eql@4.0.2': {} @@ -4813,14 +4820,14 @@ snapshots: '@types/express-serve-static-core@4.19.9': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.3': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -4865,7 +4872,7 @@ snapshots: '@types/hapi__catbox': 12.1.0 '@types/hapi__mimos': 4.1.4 '@types/hapi__shot': 6.0.0 - '@types/node': 24.13.6 + '@types/node': 26.6.6 joi: 17.13.8 '@types/hapi__mimos@4.1.4': @@ -4886,7 +4893,7 @@ snapshots: '@types/jsonwebtoken@8.5.9': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/keygrip@1.0.6': {} @@ -4897,12 +4904,12 @@ snapshots: '@types/koa-compress@2.0.9': dependencies: '@types/koa': 2.15.2 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/koa-graphql@0.8.11': dependencies: '@types/koa': 2.15.2 - '@types/node': 24.13.6 + '@types/node': 26.6.6 express-graphql: 0.10.2(graphql@15.5.0) graphql: 15.5.0 @@ -4927,7 +4934,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/koa@2.15.2': dependencies: @@ -4938,7 +4945,7 @@ snapshots: '@types/http-errors': 2.0.5 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.9 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/koa__cors@2.2.3': dependencies: @@ -4956,7 +4963,7 @@ snapshots: '@types/memcached@2.2.10': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/mime-db@1.43.6': {} @@ -4964,7 +4971,7 @@ snapshots: '@types/mkdirp@0.5.2': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/multer@1.4.13': dependencies: @@ -4972,19 +4979,23 @@ snapshots: '@types/mysql@2.15.19': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/node@24.13.6': dependencies: undici-types: 7.18.2 + '@types/node@26.6.6': + dependencies: + undici-types: 8.9.0 + '@types/pg-pool@2.0.3': dependencies: '@types/pg': 8.6.1 '@types/pg@8.6.1': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 pg-protocol: 1.16.0 pg-types: 2.2.0 @@ -4995,28 +5006,28 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/send@1.2.1': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/shimmer@1.2.0': {} '@types/tedious@4.0.14': dependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 '@types/uuid@8.3.4': {} @@ -5080,14 +5091,14 @@ snapshots: '@typescript/typescript-win32-x64@7.0.2': optional: true - '@vitest/mocker@5.0.1(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(tsx@4.23.15))': + '@vitest/mocker@5.0.1(vite@8.3.0(@types/node@26.6.6)(esbuild@0.28.2)(tsx@4.23.15))': dependencies: '@jridgewell/trace-mapping': 0.3.31 '@vitest/spy': 5.0.1 estree-walker: 3.0.3 magic-string: 1.4.2 optionalDependencies: - vite: 8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(tsx@4.23.15) + vite: 8.3.0(@types/node@26.6.6)(esbuild@0.28.2)(tsx@4.23.15) '@vitest/spy@5.0.1': {} @@ -6618,7 +6629,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.2 '@types/long': 4.0.2 - '@types/node': 24.13.6 + '@types/node': 26.6.6 long: 4.0.0 protobufjs@7.6.6: @@ -6632,7 +6643,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.2 - '@types/node': 24.13.6 + '@types/node': 26.6.6 long: 5.3.2 proxy-from-env@1.1.0: {} @@ -7023,6 +7034,8 @@ snapshots: undici-types@7.18.2: {} + undici-types@8.9.0: {} + union-value@1.0.1: dependencies: arr-union: 3.1.0 @@ -7049,7 +7062,7 @@ snapshots: vary@1.1.2: {} - vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(tsx@4.23.15): + vite@8.3.0(@types/node@26.6.6)(esbuild@0.28.2)(tsx@4.23.15): dependencies: lightningcss: 1.33.0 picomatch: 4.0.7 @@ -7057,15 +7070,15 @@ snapshots: rolldown: 1.2.10 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 24.13.6 + '@types/node': 26.6.6 esbuild: 0.28.2 fsevents: 2.3.3 tsx: 4.23.15 - vitest@5.0.1(@opentelemetry/api@1.4.1)(@types/node@24.13.6)(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(tsx@4.23.15)): + vitest@5.0.1(@opentelemetry/api@1.4.1)(@types/node@26.6.6)(vite@8.3.0(@types/node@26.6.6)(esbuild@0.28.2)(tsx@4.23.15)): dependencies: '@types/chai': 5.2.3 - '@vitest/mocker': 5.0.1(vite@8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(tsx@4.23.15)) + '@vitest/mocker': 5.0.1(vite@8.3.0(@types/node@26.6.6)(esbuild@0.28.2)(tsx@4.23.15)) chai: 6.2.2 es-module-lexer: 2.3.2 expect-type: 1.4.0 @@ -7076,11 +7089,11 @@ snapshots: tinybench: 6.1.4 tinyexec: 1.3.0 tinyglobby: 0.2.17 - vite: 8.3.0(@types/node@24.13.6)(esbuild@0.28.2)(tsx@4.23.15) + vite: 8.3.0(@types/node@26.6.6)(esbuild@0.28.2)(tsx@4.23.15) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.4.1 - '@types/node': 24.13.6 + '@types/node': 26.6.6 transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9fb073c..3d85e8f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,6 +4,8 @@ allowBuilds: protobufjs: true overrides: graphql: "15.5.0" + # pnpm 12 fails to resolve this transitive npm: alias on re-resolve (404 on @types/ioredis4) + "@opentelemetry/instrumentation-ioredis>@types/ioredis4": "npm:@types/ioredis@4.28.10" peerDependencyRules: allowedVersions: # vitest only uses the otel api for opt-in tracing; the server's otel 1.9.x/0.35.x packages need api <1.5