ローカルでGitHub Actionsをテスト!actの使い方
はじめに
GitHub Actionsを使ったCI/CDは非常に便利ですが、ワークフローのデバッグにはとても苦労します。
ちょっとした修正を試したいだけなのに、毎回コミットしてプッシュするのは手間がかかります。
そんな悩みを解決してくれるのが、今回紹介するactです。actを使えば、GitHub Actionsのワークフローをローカル環境で実行し、素早くテストできます。
actとは?
actは、GitHub ActionsのランナーをローカルのDockerコンテナ上で再現してくれるツールです。これにより、実際のGitHub Actions環境とほぼ同じ条件でワークフローをテストできます。
actの利点
高速なデバッグ
リモートリポジトリにプッシュすることなく、手元で即座にワークフローを試せるため、開発サイクルが格段にスピードアップします。
コスト削減
GitHubが提供するランナーの実行時間を消費しないため、特にプライベートリポジトリでの開発においてコスト削減に繋がります。
オフライン開発
インターネットに接続できない環境でも、ワークフローの開発やテストが可能です。
使い方
初回実行時の設定
初めてactコマンドを実行すると、デフォルトで使用するコンテナイメージのサイズを尋ねられます。
$ act
INFO[0000] Using docker host 'unix:///var/run/docker.sock', and daemon socket 'unix:///var/run/docker.sock'
? Please choose the default image you want to use with act:
- Large size image: ca. 17GB download + 53.1GB storage, you will need 75GB of free disk space, snapshots of GitHub Hosted Runners without snap and pulled docker images
- Medium size image: ~500MB, includes only necessary tools to bootstrap actions and aims to be compatible with most actions
- Micro size image: <200MB, contains only NodeJS required to bootstrap actions, doesn't work with all actions
Default image and other options can be changed manually in /home/yamadatt/.config/act/actrc (please refer to https://nektosact.com/usage/index.html?highlight=configur#configuration-file for additional information about file structure) [Use arrows to move, type to filter, ? for more help]
Large
> Medium
Micro
- Large: GitHubホストランナーとほぼ同じ環境。互換性は最も高いですが、ディスク容量を大量に消費します。
- Medium: 多くの一般的なアクションに対応できる、バランスの取れたイメージ。
- Micro: NodeJS製のアクションに特化した最小イメージ。
特に理由がなければMediumを選択しておけば良いでしょう。この設定は後から~/.config/act/actrcファイルで変更できます。
基本的な実行
リポジトリのルートディレクトリで引数なしでactを実行すると、デフォルトのイベントであるpushイベントをトリガーします。
act
これにより、.github/workflows/配下にあるワークフローが実行されます。
特定のジョブを実行する
ワークフロー内に複数のジョブが定義されている場合、-j(--job)オプションで実行したいジョブを特定できます。
act -j build
特定のイベントをトリガーする
push以外のイベント(例: pull_request)をトリガーしたい場合は、イベント名を引数として渡します。
act pull_request
特定のワークフローファイルを指定する
複数のワークフローファイルがあり、そのうちの一つだけを実行したい場合は、-W(--workflows)オプションでパスを指定します。
act push -W .github/workflows/ci.yml
Discussion