Skip to content

実装: GitHub Actions の Node.js 20 deprecation を first-party action の Node 24 同梱版更新で解消する #731

@squne121

Description

@squne121

Machine-Readable Contract

contract_schema_version: v1
issue_kind: implementation
parent_issue: "none"
goal_ref: "CI で発生する GitHub Actions の Node.js 20 ランタイム deprecation warning を解消する"
change_kind: workflow

Parent Issue

なし(単独改善 / PR #730 レビュー由来の follow-up)

Parent Goal Ref

  • Goal: CI 実行時に発生する GitHub Actions の Node.js 20 ランタイム deprecation warning を、first-party action を Node 24 同梱版(full SHA pin)へ更新して解消する
  • Desired Destination: なし(単独 Issue)

Current Validated Scope

  • .github/workflows/check-japanese.ymlactions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2(4 箇所)と actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0(4 箇所)を Node 24 同梱版(v6 系・40 桁 full SHA pin)へ更新する
  • .github/workflows/deploy-pages.ymlactions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7(2 箇所)を Node 24 同梱版(v8 系・40 桁 full SHA pin)へ更新する
  • 既存の SHA pin 方針(uses: <action>@<40桁 full SHA> # <version> 形式)を維持する
  • 更新先は upstream tag の peeled commit SHA と一致し、action metadata が runs.using: node24 であること(PR-side 補助検証で担保)

Remaining Parent Gaps

  • third-party action(peaceiris/actions-gh-pages@…# v4)の Node ランタイム更新は upstream の Node 24 対応リリース有無に依存するため本 Issue のスコープ外(必要なら別 Issue)
  • .github/workflows/ci.yml / session-manifest.yml は既に Node 24 同梱版(v6 系)を使用しており対象外
  • deploy-pages.ymlactions/checkout@df4cb1c… # v6(3 箇所)は既に Node 24 同梱版のため対象外

Outcome

.github/workflows/check-japanese.yml.github/workflows/deploy-pages.yml の first-party action(actions/checkout / actions/setup-python / actions/github-script)が Node 24 同梱版の 40 桁 full SHA pin へ更新されたコミットが作成され、旧 Node 20 同梱版の SHA・バージョン注釈が 0 件になり、CI 実行時にこれらの action 由来の Node.js 20 deprecation warning が出なくなる状態。コメント注釈だけを書き換えて実体 SHA が旧版のまま、という抜け道が AC で塞がれている。

In Scope

  • check-japanese.yml: actions/checkout(v4.2.2 → Node 24 同梱の v6 系)、actions/setup-python(v5.3.0 → Node 24 同梱の v6 系)の 40 桁 full SHA pin 更新
  • deploy-pages.yml: actions/github-script(v7 → Node 24 同梱の v8 系)の 40 桁 full SHA pin 更新
  • 更新は full SHA pin(@<40桁 SHA> # <version> 形式)で行い、既存の pin スタイルを踏襲する
  • 旧 action SHA(後述の 3 つ)が対象 2 ファイルから完全に消えること

Out of Scope

  • third-party action(peaceiris/actions-gh-pages 等)の更新
  • 既に Node 24 同梱版(v6 系)を使う ci.yml / session-manifest.yml / deploy-pages.ymlactions/checkout の変更
  • actions/github-scriptv9 系への更新(v9 は require('@actions/github') 周辺等の breaking change を含み、本 Issue の「最小 Node 24 化」スコープを超えるため除外。v9 化が必要なら別 Issue で breaking change 対応込みのスコープとして起票する)
  • action の機能・引数・workflow ロジックの変更(バージョン更新に伴う最小限の互換調整を除く)
  • actions/checkout@v6 の credential 保存先変更(.git/config$RUNNER_TEMP)に伴う persist-credentials 等の挙動調整(必要なら別 Issue)

Acceptance Criteria

  • AC1: .github/workflows/check-japanese.yml に Node 20 同梱の actions/checkout v4 系(# v4 注釈)が 1 箇所も残っていない(negated 検証)。
  • AC2: .github/workflows/check-japanese.yml に Node 20 同梱の actions/setup-python v5 系(# v5 注釈)が 1 箇所も残っていない(negated 検証)。
  • AC3: .github/workflows/deploy-pages.yml に Node 20 同梱の actions/github-script v7 系(# v7 注釈)が 1 箇所も残っていない(negated 検証)。
  • AC4: 対象 2 ファイルに旧 action の commit SHA が 1 つも残っていない(negated 検証)。対象: actions/checkout11bd71901bbe5b1630ceea73d27597364c9af683 / actions/setup-python0b93645e9fea7318ecaed2b359559ac225c90a2b / actions/github-scriptf28e40c7f34bde8b3046d885e986cb6290c5673b
  • AC5: .github/workflows/check-japanese.ymlactions/checkout が 40 桁 full SHA pin + # v6 注釈で 4 箇所存在する。
  • AC6: .github/workflows/check-japanese.ymlactions/setup-python が 40 桁 full SHA pin + # v6 注釈で 4 箇所存在する。
  • AC7: .github/workflows/deploy-pages.ymlactions/github-script が 40 桁 full SHA pin + # v8 注釈で 2 箇所存在する。

Verification Commands

# AC1
$ ! rg -q 'actions/checkout@.*# v4' .github/workflows/check-japanese.yml
# AC2
$ ! rg -q 'actions/setup-python@.*# v5' .github/workflows/check-japanese.yml
# AC3
$ ! rg -q 'actions/github-script@.*# v7' .github/workflows/deploy-pages.yml
# AC4
$ ! rg -q '11bd71901bbe5b1630ceea73d27597364c9af683|0b93645e9fea7318ecaed2b359559ac225c90a2b|f28e40c7f34bde8b3046d885e986cb6290c5673b' .github/workflows/check-japanese.yml .github/workflows/deploy-pages.yml
# AC5
$ test "$(rg -c 'actions/checkout@[0-9a-f]{40} # v6' .github/workflows/check-japanese.yml)" -eq 4
# AC6
$ test "$(rg -c 'actions/setup-python@[0-9a-f]{40} # v6' .github/workflows/check-japanese.yml)" -eq 4
# AC7
$ test "$(rg -c 'actions/github-script@[0-9a-f]{40} # v8' .github/workflows/deploy-pages.yml)" -eq 2

各 AC1〜AC4 は negated 検証(旧版・旧 SHA がヒットしない=0 件で PASS)。コマンド先頭の ! を含めて 1 つの VC とすること。AC5〜AC7 は更新後の full SHA pin が規定件数(checkout 4 / setup-python 4 / github-script 2)存在することを確認する。

Runtime Verification Applicability

  • decision: not_applicable
  • reason: 本 Issue の Acceptance Criteria(AC1〜AC7)はすべて対象 workflow ファイルへの静的な文字列検証(rg / test による旧版・旧 SHA 不在および更新後 full SHA pin 件数の確認)で完結し、プロセス起動・通信・I/O を伴わない。Node 24 移行に伴う「runner 上での Node.js 20 deprecation warning 消失」の runtime 確認は、.github/CLAUDE.md により人間承認が必須となる PR の workflow run log で行う PR-side gate であり、本 Issue 内の runtime AC としては定義しない(PR-side 補助検証は Notes for Reviewer 参照)。

Allowed Paths

  • .github/workflows/check-japanese.yml
  • .github/workflows/deploy-pages.yml

Stop Conditions

  • Allowed Paths 外の変更が必要と判明した場合
  • In Scope の固定契約(キー集合・スキーマ・型定義)の変更が必要になった場合
  • 新規 Issue の起票が必要と判断した場合(スコープ分割が発生する場合)
  • 後続 Phase / 別スコープへの波及が判明した場合
  • nested SubAgent delegation が必要になった場合
  • 外部サービス利用・権限昇格・既存テスト大規模改変が必要になった場合
  • バージョン更新後も action の breaking change で workflow が fail する場合(別 Issue 化を検討)
  • upstream tag の peeled SHA と pin した SHA が一致しない、または action metadata が runs.using: node24 でない場合(誤 SHA の可能性。実装を止めて再確認)

Precondition

Required Skills

  • GitHub Actions workflow / action versioning
  • SHA pinning(@<40桁 commit SHA> # <version> 形式)
  • upstream tag → peeled commit SHA の確認(git ls-remote --tags

Scope Delta(任意)

N/A

Notes for Reviewer

  • 各 AC1〜AC4 は negated 検証(未更新の旧バージョン注釈・旧 SHA がヒットしないこと=0 件で PASS)。コマンド先頭の ! を含めて 1 つの VC とすること。exit 1 を機械的に FAIL と読まない。
  • 更新先バージョン(major 系列の固定):
    • actions/checkout: Node 24 同梱の v6 系(例: v6.0.x。checkout v6 は credential 保存先が変わるが、本 2 ファイルは push を伴わない read-only 用途のため影響は限定的)
    • actions/setup-python: Node 24 同梱の v6 系(metadata は node24
    • actions/github-script: Node 24 同梱の v8 系(v8.0.0 は runs.using: node24)。v9 系は breaking change を含むため本 Issue では採用しない
    • 具体的な最新パッチ SHA は実装時に確認し、必ず upstream tag の peeled commit SHA を pin する。
  • AC は決定論的な repo-local 検証(旧版・旧 SHA 不在 + full SHA pin 形式 + 件数)に限定している。以下の non-hermetic(network / CI 依存)検証は PR-side の必須確認項目とする:
    • upstream tag 一致: pin した 40 桁 SHA が upstream tag の peeled commit SHA と一致すること。
      # <repo> <tag> <pinned_sha> の順で確認
      while read -r repo tag pinned; do
        actual="$(git ls-remote --tags "https://github.com/${repo}.git" \
          "refs/tags/${tag}" "refs/tags/${tag}^{}" | tail -n1 | awk '{print $1}')"
        test "$actual" = "$pinned"
      done <<'EOF'
      actions/checkout <TAG> <FULL_SHA>
      actions/setup-python <TAG> <FULL_SHA>
      actions/github-script <TAG> <FULL_SHA>
      EOF
    • action metadata が node24: pin した SHA の action.yml / action.yamlruns.using: node24 であること。
    • CI log の warning 消失: 本 Issue の PR の workflow run log に Node.js 20 deprecation warning が残っていないこと。
      gh run view <run-id> --log \
        | rg -n 'Node\.js 20 actions are deprecated|ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION|node20' \
        && exit 1 || true
  • Node 24 移行の最終確認(deprecation warning 消失)は PR-side CI の実行ログで行う。.github/workflows/* 変更は .github/CLAUDE.md により PR で人間承認必須。
  • 由来: PR fix(#728): quote HEAD^{commit} in deploy-pages.yml to resolve ShellCheck SC1083 #730 レビューコメント fix(#728): quote HEAD^{commit} in deploy-pages.yml to resolve ShellCheck SC1083 #730 (comment) の非ブロッカー指摘 2(Node.js 20 Actions deprecation、GitHub は 2026-06-16 から Node 24 デフォルト・Node 20 は 2026 年秋削除予定)、および Issue 実装: GitHub Actions の Node.js 20 deprecation を first-party action の Node 24 同梱版更新で解消する #731 レビュー https://github.com/squne121/loop-protocol/issues/731#issuecomment-4640958190(AC 強化要求: コメント grep ではなく full SHA / upstream tag 一致 / node24 metadata / CI warning 消失まで検証する契約へ)。

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions