🧪

ローカルで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
GitHubで編集を提案

Discussion