GitHub Actionsで The `set-env` command is disabled. のエラーが出た時の対応

GitHub Actionsのworkflowでエラー発生

あるRailsプロジェクトのテストをGitHub Actionsで実行していますが、突然即終了になるようになってしまいました。

見てみると、Rubyのセットアップのところで以下のエラーが出ていました

1
Error: The `set-env` command is disabled. Please upgrade to using Environment Files or opt into unsecure command execution by setting the `ACTIONS_ALLOW_UNSECURE_COMMANDS` environment variable to `true`. For more information see: https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/

Rubyのセットアップ自体は

1
2
- name: Set up Ruby
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0

という感じのコードになっていました。

エラーの原因調査

特になにも変更していないのになと思ったのですが、まずはエラーにあるリンクのドキュメントを読んでみました。

2020年10月なので、結構前からのようですね。ざっくりいうとセキュリティの問題からset-envadd-pathというコマンドは使えなくなりましたということのようです。どうしても使いたい場合はACTIONS_ALLOW_UNSECURE_COMMANDSという環境変数をtrueに設定すればよいようですが、のぞましくはないんでしょうね。

しかし、見たところset-envadd-pathも使っていません。どこかで呼び出されているのでしょうか。

考えられるのはruby/setup-rubyというActionの中で利用しているということです。

githubをみてみましょう。
https://github.com/ruby/setup-ruby

このREADMEをみると、ruby/setup-ruby@v1となっています。こちらで現在設定しているのはruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0です。このcommit idのようなバージョンはGitHub Actionsのテンプレートで指定されていたバージョンです。

試しに今テンプレートを見てみました。

1
2
3
4
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
# change this to (see https://github.com/ruby/setup-ruby#versioning):
# uses: ruby/setup-ruby@v1
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e

というコードになっており、workflowを作成するタイミングでテンプレートが指定するコミットも変わるようです。コメントにあるように、@v1にしておくのが良さそうです。

というわけで、ruby/setup-ruby@v1に変更することでdeprecationエラーも表示されなくなりました。

まとめ

deprecationエラーの場合は、基本的にはバージョンアップで対応する。コミット指定だと対応が自動的に対応はできないので、バージョン指定が望ましい。自分がソフトウェアを公開する時にも参考になりますね。