できない.dev

GitHub Actions の `set-output` deprecation 警告が消えない

`::set-output name=foo::bar` 形式は 2023 年以降非推奨で、GITHUB_OUTPUT 環境ファイルへの書き込みに置き換えが必要。
自前ステップだけでなく、古いバージョンの actions/checkout / actions/cache などサードパーティ actions に残っていることも多い。

#github-actions#workflow#deprecated#output

公開:

要約

Warning: The set-output command is deprecated が出続ける場合は、(1) 自前 shell ステップ、(2) 古い action のバージョン、(3) composite action / reusable workflow、のいずれかに ::set-output 形式が残っている。公式 workflow commands のとおり $GITHUB_OUTPUT への append に置き換える。

よくある原因

  1. 自前ステップの旧書式: echo "::set-output name=foo::$VAL" を残している
  2. action のバージョン古い: actions/cache@v2 など内部に旧コマンドを含むものを使っている
  3. composite action 内: 自社製 action の action.yml の steps に残っている
  4. ::save-state も同時 deprecation: ポスト処理用の状態保存も同じく要置換

解決策

1. 自前ステップを書き換える

- id: vars
  run: |
    echo "version=$(cat VERSION)" >> "$GITHUB_OUTPUT"
- run: echo "got ${{ steps.vars.outputs.version }}"

複数行を渡すときは heredoc 形式を使う。

- id: notes
  run: |
    {
      echo "notes<<EOF"
      cat CHANGELOG.md
      echo "EOF"
    } >> "$GITHUB_OUTPUT"

2. action のバージョンを上げる

2022-10-11 のチェンジログ 以降にリリースされたメジャーでは内部で $GITHUB_OUTPUT に切り替わっている。

- uses: actions/checkout@v4
- uses: actions/cache@v4
- uses: actions/upload-artifact@v4

3. composite action 内も置換

自社製 composite action の action.yml 内の steps にも同じ書き換えを適用する。metadata syntax ドキュメントruns.steps を参照。

4. save-state も合わせて置換

post 処理用の ::save-state$GITHUB_STATE へ append に置き換える。

- run: echo "pid=$$" >> "$GITHUB_STATE"

この記事は役立ちましたか?