GitHub Actionsの「set-output is deprecated」警告を修正する方法(save-state対応も)
Github Actions で作ったワークフローを実行していて、いつの間にか出力されるようになった警告。
Warning: The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
処理は正常に完了していても、実行ログを確認したときに警告が出ていると気持ち悪いですよね。
そこで、今回は Github Actions で非推奨になった save-state と set-output を推奨されている形式に書き換えていきます。
非推奨になった内容
冒頭でも書いた通り、save-state と set-output のコマンドが非推奨になりました。
GitHub のサイトでは以下の専用ページが用意されています。
当初は「2023 年 5 月 31 日までは警告のみ、6 月 1 日以降はエラーになる」と予定がアナウンスされていました。
(2023年5月25日 追記)
「GitHub Actions: Deprecating save-state and set-output commands」の中で、この話題について取り消されている感じなので、今後の情報を追っておきたいですね。やっぱ、サードパーティー製の actions のこともあるので、影響範囲が大きすぎますもんね。
(その後の決着 / 2023年7月24日)
GitHub は公式の続報で、これらのコマンドの削除を延期すると正式に発表しました。利用が依然として多いことが理由です。現在も save-state / set-output を使ったワークフローはこれまで通り動作しますが、アノテーションに非推奨の警告は表示され続けます。GitHub は引き続き環境ファイル($GITHUB_OUTPUT / $GITHUB_STATE)への移行を推奨しているので、新規作成や改修のタイミングで直しておくのが安心ですね。
多くのリポジトリやワークフローを抱えているプロジェクトでは、メンバーで分担しながら対応したいですよね。
修正方法
GitHub のページのサンプルにある通り、$GITHUB_STATE や $GITHUB_OUTPUT の環境ファイル(environment files)に標準出力させます。
save-state は $GITHUB_STATE に。
echo "::save-state name={name}::{value}"
↓echo "{name}={value}" >> $GITHUB_STATE
set-output は $GITHUB_OUTPUT に。
echo "::set-output name={name}::{value}"
↓echo "{name}={value}" >> $GITHUB_OUTPUT
注意:値が複数行になる場合
単純な置き換えで済むのは、値が 1 行に収まる場合だけです。
コマンドの実行結果や JSON など、改行を含む値をそのまま >> $GITHUB_OUTPUT に流すと、2 行目以降が別の項目として解釈されて壊れます。
複数行の値には、デリミタを使う書き方が用意されています。
{name}<<{delimiter}
{value}
{delimiter}実際のステップに当てはめると、こんな形ですね。
- name: 複数行の値を出力する
id: step_one
run: |
{
echo 'JSON_RESPONSE<<EOF'
curl https://example.com
echo EOF
} >> "$GITHUB_OUTPUT"確認方法
書き換えたらワークフローを実行して、警告が消えているか確認してみましょう。
単純に、以下の文字列を削除して、{name}::{value} となっていた箇所をイコール(=)で繋ぎ、環境ファイルにリダイレクトするだけですね。
::save-state name=::set-output name=
手作業だと単調な作業でミスりそうなので、量が多い場合は正規表現などで一括置換が無難でしょう。
差分は Pull Request で要チェックということで。
同じく GitHub Actions のログに出る警告を消したい方は、actions/setup-goで「Restore cache failed」の警告が出る時の対処法 もあわせてどうぞ。
参考(出典)
- GitHub Actions: Deprecating save-state and set-output commands(2022-10-11、GitHub Changelog)
- GitHub Actions – Update on save-state and set-output commands(2023-07-24、GitHub Changelog)
- Workflow commands for GitHub Actions(GitHub Docs)
