GitHub Actions Workflow をローカルで実行できる act を試してみた

最近 GitHub Actions をよく書いているが、ローカルでテストできないので、都度都度 Push しては動作確認していた。

よくよく調べてみると、act というツールが Workflow ファイルをローカル実行してくれるようなので、使ってみた。

イメージ的には、以前試した「Wercker」という CI ツールをローカル実行する「Wercker CLI」的な立ち位置かなー。

目次

前提条件

act は Docker を利用して動くので、ローカルに Docker がインストールされていることが前提。

act コマンドを実行するカレントディレクトリの、.github/workflows/ 配下の Workflow ファイルをローカル実行できるようになる。

Windows 版は actions/setup-node が上手く動かず断念…

自分はまず Windows10 Pro と Docker Desktop の環境で試してみた。Windows 版の act は Chocolatey でインストールできた。

> choco install act-cli

Node.js スクリプトを動かすだけの簡単なサンプル Workflow を作っておき、act コマンドを実行したところ、エラーが発生。

どうも Windows 形式のパスと Linux 形式のパスが混じってしまっていてバグっぽいので、諦めることにした。

WSL2 に act をインストールする

Chocolatey でインストールした act はアンインストールして、別の方法を試すことにした。

Docker Desktop For Windows v2.2.2 以降は、WSL2 との統合が可能になる。つまり WSL2 の中で Docker が利用できるのだ。

ということで、WSL2 Ubuntu 18.04 側に、Linux 向けの act をインストールする。

$ curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash

サンプル Workflow も WSL2 側に持ち込み act コマンドを実行したところ、キチンと動いた。

環境変数を渡す

GitHub Actions は、デフォルトで GITHUB_TOKEN という環境変数が用意されており、トークンが自動生成されている。コレを使って Workflow の中でコミットしたり GPR へ Push したりできる。

しかし act では GITHUB_TOKEN 環境変数が用意されていないので、実行時に次のように環境変数を指定して渡してやる。

$ act -s GITHUB_TOKEN='【別途手作業で生成したトークン文字列】'

複数の環境変数を渡したい場合は -s 【キー】='【値】' のセットを羅列すれば良い。

その他オプション

実行できる Workflow の一覧を表示する。

Dry-Run モード。Workflow ファイルの構文チェックなんかに良いかも。

詳細ログを出力する。

Watch モード。Workflow ファイルがあるプロジェクト内のファイルが更新されたら再実行する。

以上

GitHub Actions がローカル実行できるということで、Workflow の実装時のテストに役立つだろう。

Docker を使うのでローカル環境を汚さないし、Workflow の作り方によっては Watch モードを組み合わせたりしてローカルのタスクランナーとしても使えるかもしれない。とりあえず入れておくのをオススメ。