Skip to content

ci: Node 22.23.4 と lockfile 固定の Wrangler に全配備経路をそろえる - #320

Merged
azumag merged 2 commits into
mainfrom
security/node-22.23.4-wrangler-lock
Oct 22, 2026
Merged

azumag merged 2 commits into
mainfrom
security/node-22.23.4-wrangler-lock

Conversation

@azumag

@azumag azumag commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

目的

Node.js 2026年10月セキュリティ更新と eMudhra/emSign 中間CA 問題への対応として、bluemoon の全配備経路を修正版 Node へそろえ、CI 中に追加インストールされていた Wrangler を lockfile で追跡できる構成にする。

対象 base: main 1743011be975b64b1f349e5a2c99e2ac30a4e58e

変更点

  • .node-version = 22.23.4 を正本にし、以下4経路の setup-node を node-version-file: .node-version に統一
    • main.yml cloudflare-deploy(サイト配備)
    • main.yml deploy-cms-auth(これまで setup-node なし=runner 既定 Node)
    • pr-preview.yml
    • cms-publish.yml
  • wrangler を root devDependencies に 4.151.3 で exact 固定し、3か所の wranglerVersion: '4.119.0' を削除
    • wrangler-action v3 は wranglerVersion 未指定時、導入済み Wrangler を使う(v3 dist/index.mjs の installWrangler で確認)
  • deploy-cms-auth に npm ci を追加し、repo root から deploy --config workers/sveltia-cms-auth/wrangler.toml で配備
  • README に「Node は .node-version、Wrangler は package.json/lock が正本」と手元配備手順を追記

根拠

  • Node 22.23.4 は tls: reject chains containing blocked public keys nodejs/node#66871(遮断対象の公開鍵を含む鎖を拒否)と #66877(NSS 3.131.1)を含む(公式 CHANGELOG_V22 の 22.23.4 節で確認)
  • 実測(ローカル、https.get 既定設定): dv-g3b-emudhra.we-have-a-problem.com を v22.23.2 / v24.18.0 / v24.19.0 は 受理(200)、v22.23.4 / v24.22.1 は CERT_REVOKED で拒否
  • 変更前の実行ログ(run 39371139958)
    • サイト配備: node: v22.23.3(runner cache)
    • deploy-cms-auth: /usr/local/bin/npx(runner 既定 Node)で npm i wrangler@4.119.0 → 4 high severity vulnerabilities
  • Wrangler 単体監査(隔離ディレクトリ、npm audit): 4.119.0 = high 4(miniflare→undici 7.x 15件の GHSA、sharp <0.35.5)、4.151.3 = 0

検証(Node v22.23.4 / npm 10.9.9)

  • npm ci / npm run check: 0 errors, 0 warnings, 23 hints(main と同数)
  • npm run build: 11 pages
  • main の dist と本ブランチの dist: diff -rq 差分なし(40 files)。lockfile で esbuild が 0.28.1→0.28.2 に共有更新されるが成果物は同一
  • CMS 認証 Worker: wrangler deploy --dry-run --outdir の bundle が旧構成(4.119.0・workingDirectory)と新構成(4.151.3・--config)で同一(sha1 9c9a06c1…)
  • git diff --check: OK

未確認・注意

  • PR preview・CI の実行版は、この PR の Actions ログで確認する(下にコメントで追記)
  • cms-publish.yml は cms-drafts 上のファイルが使われる。main マージ後に main.yml の同期ステップで cms-drafts が早送りされるが、同期 push は GITHUB_TOKEN 経由のため cms-publish は発火しない。実コンテンツ公開を検証代わりにしないため、CMS 経路は「同期後のファイル内容」で確認する
  • lockfile は main を書いている npm 11 系(11.19.1)で作り直した(fe24e7e)。main との差分は wrangler 4.151.3 と依存 29 entry の追加、esbuild 0.28.1→0.28.2(wrangler が exact 指定)のみで、既存 entry の libc・dev 分類は変えない。CI の npm 10.9.9 で npm ci 420 packages・check・build・dist 同一を確認
  • chore(deps): http-cache-semantics 4.3.0 と fast-uri 3.1.9 に更新する #321 と package-lock.json が衝突するため、先にどちらかを merge したら他方を rebase して lockfile を作り直し、CI を再実行する
  • http-cache-semantics / fast-uri は別 PR、Vite は既存 chore(deps): bump vite from 8.2.0 to 8.3.4 #319 で扱う

🤖 Generated with Claude Code

- .node-version (22.23.4) を正本にし、サイト配備・PR preview・CMS公開・
  CMS認証Worker配備の全ジョブで setup-node の node-version-file から読む。
  22.23.4 は eMudhra/emSign 中間CA の公開鍵を遮断する nodejs/node#66871 と
  NSS 3.131.1 への CA 更新 nodejs/node#66877 を含む。
- deploy-cms-auth に setup-node と npm ci を追加する。これまでは runner 既定の
  Node で動き、wrangler-action が lockfile 外の wrangler@4.119.0 を追加
  インストールしていた (high 4件: miniflare 経由の undici / sharp)。
- wrangler を devDependencies に 4.151.3 で固定し、3か所の wranglerVersion を
  削除する。wrangler-action v3 は wranglerVersion 未指定時に導入済みの
  Wrangler を使う。
- CMS認証Workerは repo root から --config で配備する。dry-run バンドルは
  旧構成と同一 (sha1 9c9a06c1)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

🔍 Cloudflare Workers preview: https://bluemoon-pr-320.tsubasa-azumagakito.workers.dev
Worker: bluemoon-pr-320

(このコメントは新しいpushのたびに更新されます)

@azumag

azumag commented Oct 21, 2026

Copy link
Copy Markdown
Owner Author

実行ログと preview 確認(HEAD f7aad4f)

Actions 実行版(run 39617769450)

  • setup-node: Resolved .node-version as 22.23.4 → node: v22.23.4 / npm: 10.9.9
  • Wrangler: /opt/hostedtoolcache/node/22.23.4/x64/bin/npx --no-install wrangler --version が成功し、追加インストールなしで ⛅️ wrangler 4.151.3 で bluemoon-pr-320 を配備
  • Actions 自身のランタイム: runner 2.338.0。actions/checkout@v4 等は node20 宣言だが forced to run on Node.js 24。runner 2.338.0 同梱 node24 は 24.21.0(actions/runner src/Misc/externals.sh)で、#66871 を含まない。GitHub 管理物のため本リポジトリでは変更できない(Wrangler・npm・astro は setup-node の 22.23.4 で動く)

preview https://bluemoon-pr-320.tsubasa-azumagakito.workers.dev

  • ローカルビルドの dist 39 files(_redirects 除く)を全取得し sha256 比較: 差分 0
  • HTML 内の内部リンク 36 件: すべて 200
  • _redirects 5 ルール: すべて期待どおり 301 / Location 一致
  • 未知パス: 404(dist に 404.html はなく、本番と同じ挙動)
  • ブラウザ(Chrome): トップ表示、/events/2024/ の画像 15 枚すべて読み込み成功。390px 幅で 11 ページの画像破損 0
  • 390px 幅で /events/2024/・/events/2025/(hero 画像)と /events/vol1/(出演者見出し)が横に 122 / 122 / 210px はみ出す。本番 www.bluemoon.works でも同じ値で、dist も main と同一のため本 PR とは無関係の既存事象

未実施

  • cms-publish.yml の実行(実コンテンツ公開を伴うため実施しない)
  • 本番配備・CMS 認証 Worker の本番配備(main マージ後に別途記録)

npm 10.9.9 で作った lockfile は既存 24 entry の libc を落とし、sharp 系に
dev フラグも付けていた。main の lockfile を書いている npm 11 系 (11.19.1)
で wrangler@4.151.3 の追加だけをやり直し、既存 entry の分類を変えない。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WthszjoYsBn39cjTaRXQ5M
@azumag
azumag merged commit fb05c02 into main Oct 22, 2026
3 checks passed
@azumag
azumag deleted the security/node-22.23.4-wrangler-lock branch October 22, 2026 01:22
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