Skip to content

build: една версия на Node навсякъде (24) и Dependabot за npm - #340

Merged
todorkolev merged 1 commit into
mainfrom
build/node-24
Sep 2, 2026
Merged

build: една версия на Node навсякъде (24) и Dependabot за npm#340
todorkolev merged 1 commit into
mainfrom
build/node-24

Conversation

@todorkolev

Copy link
Copy Markdown
Collaborator

Трети и последен от серията за зависимостите (след #339 и catalog-а).

Проблемът

Node беше три различни неща наведнъж: engines казваше >=22, workflow-ите ползваха 22 (ci, deploy, scripts-test) и 24 (related-persons-data, вторият job на scripts-test), devcontainer-ът беше 22, а нямаше нито .node-version, нито .nvmrc. Локално и в CI кодът вървеше върху различни runtime-и — точно така локалният пайплайн се разминаваше със сървърния, без някой да е избирал това.

Изборът: 24

related-persons-data вече го изисква (node:sqlite DatabaseSync + native TS type-stripping без експериментален флаг) — единственият workflow, който наистина зависи от версията. Останалите просто не бяха обновени. wrangler няма таван (engines: >=22 и в 4.93.1, и в 4.128.0), тъй че deploy на 24 е безопасен.

  • .node-version + .nvmrc = 24; engines.node >=24
  • всички workflow-и на 24
  • devcontainer: typescript-node:24-bookworm, пиннат по digest от манифест-индекса на MCR (същият вид пин като досега — проверено, и двата са image.index)
  • коментарът в scripts-test, който обосноваваше 24 „спрямо 22 по-горе", вече казва истината

Dependabot за npm

Досегашният файл покриваше само GitHub Actions и твърдеше, че npm „се обработва отделно" — не се обработваше от нищо, затова за уязвимости научавахме чак когато Dependency audit стане червен на main (browserslist, 02.09). Блокът за actions е запазен дословно. Добавен е npm: седмично, minor+patch в един групиран PR, мажорите по един PR за видимост, а шест от тях (react-router 8, TypeScript 7, @ai-sdk 4, ai 7, workers-types 5) изрично отложени за след релийза. Подовете в overrides остават единственият източник на security пинове.

Проверка под Node v24.20.0 (локално)

lint, typecheck, целият turbo пакет (web 521, db 490 …), node --test scripts/*.test.mjs, cacbg/tr пакетът — всичко зелено.

За теб след мърджа: devcontainer-ът трябва да се пресъздаде (Rebuild Container), за да вземе образа с Node 24.

🤖 Generated with Claude Code

https://claude.ai/code/session_013pBk7JaPgpsgELYGZgnkwt

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

Test coverage

Workspace Lines Δ Branches Δ Functions Statements
apps/etl 75.43% +1.43pp 63.52% +5.32pp 70.00% 74.11%
apps/web 91.50% +0.50pp 83.11% +0.71pp 92.00% 90.34%
packages/config 92.85% +0.05pp 72.22% +0.02pp 92.85% 89.18%
packages/db 94.67% +0.17pp 79.32% +0.02pp 87.50% 91.75%
packages/ingest 90.42% +4.12pp 85.82% +5.42pp 82.05% 88.65%
packages/shared 95.50% +0.00pp 80.83% +0.03pp 92.30% 89.56%
packages/test-support 100.00% +0.00pp 100.00% +0.00pp 100.00% 100.00%
Total (informational) 92.01% 81.94% 88.37% 90.02%

✅ No workspace dropped below its baseline (tolerance 0.5pp).

📈 Coverage rose by more than 1pp — run node scripts/check-coverage.mjs --update locally and commit coverage-baseline.json to ratchet the threshold up.

Node беше три различни неща наведнъж: engines казваше >=22, workflow-ите
ползваха 22 (ci, deploy, scripts-test) и 24 (related-persons-data и
вторият job на scripts-test), devcontainer-ът беше 22, а нямаше нито
.node-version, нито .nvmrc. Резултатът е, че локално и в CI кодът върви
върху различни runtime-и - точно така локалният пайплайн се разминава със
сървърния, без някой да е избирал това.

Изборът е 24, защото related-persons-data вече го изисква (node:sqlite
DatabaseSync и native TS type-stripping без експериментален флаг) и това е
единственият workflow, който наистина зависи от версията. Останалите
просто не бяха обновени.

- .node-version и .nvmrc = 24; engines.node >=24
- всички workflow-и на 24 (ci, deploy, двата job-а на scripts-test)
- devcontainer образът на typescript-node:24-bookworm, пиннат по digest
  както досега (digest-ът е от манифест-индекса на MCR)
- коментарът в scripts-test, който обосноваваше 24 "спрямо 22 по-горе",
  вече казва истината: разликата между двата job-а е node_modules, не
  runtime-ът

Dependabot: досегашният файл покриваше само GitHub Actions и твърдеше, че
npm "се обработва отделно" - не се обработваше от нищо, затова за
уязвимости научавахме чак когато Dependency audit стане червен на main
(browserslist, 2026-09-02). Блокът за actions е запазен дословно; добавен
е npm: седмично, minor+patch в един групиран PR, мажорите по един PR за
видимост, а шест от тях (react-router 8, TypeScript 7, @ai-sdk 4, ai 7,
workers-types 5) изрично отложени за след релийза - миграции със собствен
риск. Подовете в overrides остават единственият източник на security
пинове; Dependabot мести lockfile-а, те са границата.

Проверено локално с Node v24.20.0: lint, typecheck, целият turbo пакет,
node --test scripts/*.test.mjs и cacbg/tr пакетът.

По ревюто: мажорите остават НЕгрупирани. Отворен minor/patch PR маркира
членовете си за "обработени" преди Dependabot да погледне негрупираните
обновления (dependabot-core#14202), тъй че мажор за същия пакет се
появява едва след като седмичният PR се мърджне или затвори; втора група
не поправя това - тя само събира мажорите и добавя обратното потискане.
Коментарите вече казват точно това, както и че override в
pnpm-workspace.yaml е замяна, не под, а игнорираните мажори са потиснати,
не "видими". jsdom 30 влиза в отложените: иска undici
^8.9, а override-ът в pnpm-workspace.yaml е замяна, не под, и би дал
неподдържан граф. Коментарът и командата за преразрешаване в Dockerfile,
както и CONTRIBUTING, вече не сочат Node 22.
@todorkolev
todorkolev merged commit 9aff61b into main Sep 2, 2026
6 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