ハウテレビジョンブログ

『外資就活ドットコム』『Liiga』『Mond』を開発している株式会社ハウテレビジョンのブログです。

actでGithub Actionsをローカルで実行する

この記事は HowTelevision Advent Calendar 2024 16日目の記事です。

はじめに

Github Actionsをcommit/pushせずにdockerを使って実行するツール act の使い方をご紹介します。

https://nektosact.com/introduction.html

インストール

Homebrewを使ってインストールします

$ brew install act --HEAD

実行可能なworkflowやjobを一覧する

-lオプションで実行可能なworkflowやjobを一覧できます

$ act -l

Apple Silicon搭載のMacでは以下のようなメッセージが出るので、メッセージのとおりにオプションを追加します

WARN ⚠ You are using Apple M-series chip and you have not specified container architecture, you might encounter issues while running act. If so, try running it with '--container-architecture linux/amd64'. ⚠ 

$ act -l --container-architecture linux/amd64

イベントを指定して実行する

イベントを指定して実行すると、そのイベントをトリガーに設定されているwokflowがすべて実行されます。

イベントを指定しなかった場合、 push を指定したとして扱われます。

$ act pull_request

workflowを指定して実行する

-Wオプションでworkflowファイルを指定して実行できます。

ファイルを指定しなかった場合は .github/workflow 配下のすべてのファイルが実行されます

$ act -W '.github/workflows/checks.yml'

同時にイベントの指定も可能です

$ act pull_request -W '.github/workflows/checks.yml'

イベントを指定しない場合は push イベントとして実行されます

jobを指定して実行する

-jオプションでjobを指定して実行できます。

workflow指定の場合と同じようにイベント指定が可能で、イベントを指定しない場合は push イベントとして実行されます

$ act -j 'test'

tips

actions/upload-artifact@v2でエラーになる

[Test storybook/storybook-build]   ❗  ::error::Unable to get the ACTIONS_RUNTIME_TOKEN env variable
[Test storybook/storybook-build]   ❌  Failure - Main Upload storybook artifact
[Test storybook/storybook-build] exitcode '1': failure
[Test storybook/storybook-build] 🏁  Job failed
Error: Job 'storybook-build' failed

上記のようなエラーは --artifact-server-path オプションで保存先を指定するとエラーを回避できます

act -W './.github/workflows/test-storybook.yml' --artifact-server-path ./storybook-static

command not found

aws-cliのようなGithub Actionsに含まれるCLIがactの環境には含まれていない事が多いです。

https://github.com/nektos/act/issues/107

専用のDockerイメージを作成するか、必要なものをインストールするstepを追加する必要があります

参考

https://nektosact.com/introduction.html

https://qiita.com/yamatai12/items/a74b68bbe60e1ed8bc2d

https://qiita.com/nagayaoh/items/d5cff83929452b790164

おわりに

commit/pushしてしまった方がはやい場面もあるかもしれませんが、個人的にはまだGithub Actionsに慣れていないのでcommit/pushせずに色々試せるのは楽でした。

Github Actions初心者の方の心理的なハードルを下げるツールとしてもよいのではないかと思います。