chore(deps): bump node from 22-bookworm-slim to 26-bookworm-slim (#67)

* chore(deps): bump node from 22-bookworm-slim to 26-bookworm-slim

Bumps node from 22-bookworm-slim to 26-bookworm-slim.

---
updated-dependencies:
- dependency-name: node
  dependency-version: 26-bookworm-slim
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix(ci): align Node 26 runtime policy

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Xi Xu <i@xi-xu.me>
This commit is contained in:
dependabot[bot]andxixu-me authored and GitHub committed 2026-05-30 09:41:50 +00:00
1 parent 75b7a65b7e
commit c4cf454668
7 files changed
+107 -91

No files matched your search

+1 -1
View File
@@ -34,7 +34,7 @@ jobs:
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: 22 node-version: 26
cache: npm cache: npm
- name: Install dependencies - name: Install dependencies
+1 -1
View File
@@ -27,7 +27,7 @@ jobs:
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: 22 node-version: 26
cache: npm cache: npm
- name: Install dependencies - name: Install dependencies
+1 -1
View File
@@ -1,5 +1,5 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM node:22-bookworm-slim FROM node:26-bookworm-slim
ENV PUPPETEER_SKIP_DOWNLOAD=true ENV PUPPETEER_SKIP_DOWNLOAD=true
+79 -85
View File
@@ -63,7 +63,7 @@
"typescript": "^5.9.3" "typescript": "^5.9.3"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=22.12.0"
} }
}, },
"node_modules/@aashutoshrathi/word-wrap": { "node_modules/@aashutoshrathi/word-wrap": {
@@ -1582,22 +1582,24 @@
} }
}, },
"node_modules/ansi-regex": { "node_modules/ansi-regex": {
"version": "5.0.1", "version": "6.2.2",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
"license": "MIT",
"engines": { "engines": {
"node": ">=8" "node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
} }
}, },
"node_modules/ansi-styles": { "node_modules/ansi-styles": {
"version": "4.3.0", "version": "6.2.3",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
"dependencies": { "license": "MIT",
"color-convert": "^2.0.1"
},
"engines": { "engines": {
"node": ">=8" "node": ">=12"
}, },
"funding": { "funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1" "url": "https://github.com/chalk/ansi-styles?sponsor=1"
@@ -2254,16 +2256,17 @@
} }
}, },
"node_modules/cliui": { "node_modules/cliui": {
"version": "8.0.1", "version": "9.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==",
"license": "ISC",
"dependencies": { "dependencies": {
"string-width": "^4.2.0", "string-width": "^7.2.0",
"strip-ansi": "^6.0.1", "strip-ansi": "^7.1.0",
"wrap-ansi": "^7.0.0" "wrap-ansi": "^9.0.0"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=20"
} }
}, },
"node_modules/clone-deep": { "node_modules/clone-deep": {
@@ -2301,22 +2304,6 @@
"type-is": "^1.6.16" "type-is": "^1.6.16"
} }
}, },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
"node_modules/colorette": { "node_modules/colorette": {
"version": "2.0.20", "version": "2.0.20",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
@@ -2825,9 +2812,10 @@
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "8.0.0", "version": "10.6.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
"license": "MIT"
}, },
"node_modules/encodeurl": { "node_modules/encodeurl": {
"version": "1.0.2", "version": "1.0.2",
@@ -3634,6 +3622,18 @@
"node": "6.* || 8.* || >= 10.*" "node": "6.* || 8.* || >= 10.*"
} }
}, },
"node_modules/get-east-asian-width": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz",
"integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==",
"license": "MIT",
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-intrinsic": { "node_modules/get-intrinsic": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@@ -3999,14 +3999,6 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"engines": {
"node": ">=8"
}
},
"node_modules/is-generator-function": { "node_modules/is-generator-function": {
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
@@ -6091,14 +6083,6 @@
"integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==",
"optional": true "optional": true
}, },
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve-from": { "node_modules/resolve-from": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -6623,27 +6607,35 @@
} }
}, },
"node_modules/string-width": { "node_modules/string-width": {
"version": "4.2.3", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"emoji-regex": "^8.0.0", "emoji-regex": "^10.3.0",
"is-fullwidth-code-point": "^3.0.0", "get-east-asian-width": "^1.0.0",
"strip-ansi": "^6.0.1" "strip-ansi": "^7.1.0"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/strip-ansi": { "node_modules/strip-ansi": {
"version": "6.0.1", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"license": "MIT",
"dependencies": { "dependencies": {
"ansi-regex": "^5.0.1" "ansi-regex": "^6.2.2"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
} }
}, },
"node_modules/stripe": { "node_modules/stripe": {
@@ -7026,16 +7018,17 @@
} }
}, },
"node_modules/wrap-ansi": { "node_modules/wrap-ansi": {
"version": "7.0.0", "version": "9.0.2",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==",
"license": "MIT",
"dependencies": { "dependencies": {
"ansi-styles": "^4.0.0", "ansi-styles": "^6.2.1",
"string-width": "^4.1.0", "string-width": "^7.0.0",
"strip-ansi": "^6.0.0" "strip-ansi": "^7.1.0"
}, },
"engines": { "engines": {
"node": ">=10" "node": ">=18"
}, },
"funding": { "funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1" "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
@@ -7120,28 +7113,29 @@
} }
}, },
"node_modules/yargs": { "node_modules/yargs": {
"version": "17.7.2", "version": "18.0.0",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==",
"license": "MIT",
"dependencies": { "dependencies": {
"cliui": "^8.0.1", "cliui": "^9.0.1",
"escalade": "^3.1.1", "escalade": "^3.1.1",
"get-caller-file": "^2.0.5", "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1", "string-width": "^7.2.0",
"string-width": "^4.2.3",
"y18n": "^5.0.5", "y18n": "^5.0.5",
"yargs-parser": "^21.1.1" "yargs-parser": "^22.0.0"
}, },
"engines": { "engines": {
"node": ">=12" "node": "^20.19.0 || ^22.12.0 || >=23"
} }
}, },
"node_modules/yargs-parser": { "node_modules/yargs-parser": {
"version": "21.1.1", "version": "22.0.0",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==",
"license": "ISC",
"engines": { "engines": {
"node": ">=12" "node": "^20.19.0 || ^22.12.0 || >=23"
} }
}, },
"node_modules/yauzl": { "node_modules/yauzl": {
+3 -2
View File
@@ -16,7 +16,7 @@
"dry-run": "NODE_ENV=dry-run node ./build/stand-alone/search.js" "dry-run": "NODE_ENV=dry-run node ./build/stand-alone/search.js"
}, },
"engines": { "engines": {
"node": ">=18" "node": ">=22.12.0"
}, },
"main": "build/index.js", "main": "build/index.js",
"dependencies": { "dependencies": {
@@ -92,7 +92,8 @@
}, },
"civkit": { "civkit": {
"minimatch": "^10.2.4" "minimatch": "^10.2.4"
} },
"yargs": "^18.0.0"
}, },
"private": true, "private": true,
"exports": { "exports": {
+13 -1
View File
@@ -105,6 +105,18 @@ test("CI workflow runs lint before tests and build", () => {
assert.match(workflow, /run: npm run build/); assert.match(workflow, /run: npm run build/);
}); });
test("npm-based workflows use the same Node runtime as the container image", () => {
const workflows = [
read(".github/workflows/ci.yml"),
read(".github/workflows/security-governance.yml"),
];
for (const workflow of workflows) {
assert.match(workflow, /node-version:\s*26/);
assert.doesNotMatch(workflow, /node-version:\s*22/);
}
});
test("CI validates Docker builds for pull requests without publishing images", () => { test("CI validates Docker builds for pull requests without publishing images", () => {
const workflow = read(".github/workflows/ci.yml"); const workflow = read(".github/workflows/ci.yml");
@@ -126,7 +138,7 @@ test("dependabot auto-merge workflow updates stale branches before enabling auto
test("Dockerfile is self-contained and no longer relies on curl-impersonate", () => { test("Dockerfile is self-contained and no longer relies on curl-impersonate", () => {
const dockerfile = read("Dockerfile"); const dockerfile = read("Dockerfile");
assert.match(dockerfile, /FROM node:22-bookworm-slim/); assert.match(dockerfile, /FROM node:26-bookworm-slim/);
assert.match(dockerfile, /PUPPETEER_SKIP_DOWNLOAD=true/); assert.match(dockerfile, /PUPPETEER_SKIP_DOWNLOAD=true/);
assert.match(dockerfile, /LOCAL_DB_ROOT=\/tmp\/xread\/db/); assert.match(dockerfile, /LOCAL_DB_ROOT=\/tmp\/xread\/db/);
assert.match(dockerfile, /STORAGE_ROOT=\/tmp\/xread\/storage/); assert.match(dockerfile, /STORAGE_ROOT=\/tmp\/xread\/storage/);
+9
View File
@@ -94,3 +94,12 @@ test("security-sensitive dependency floors stay above blocked axios and basic-ft
`Expected basic-ftp lock >= 5.2.2, received ${lockedBasicFtpVersion}`, `Expected basic-ftp lock >= 5.2.2, received ${lockedBasicFtpVersion}`,
); );
}); });
test("Node runtime policy supports the yargs override required by Puppeteer", () => {
const packageJson = JSON.parse(read("package.json"));
const packageLock = JSON.parse(read("package-lock.json"));
assert.equal(packageJson.engines.node, ">=22.12.0");
assert.equal(packageJson.overrides.yargs, "^18.0.0");
assert.equal(packageLock.packages["node_modules/yargs"].version, "18.0.0");
});