くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

GitHub Actionsをローカルで実行する(nektos/act)

GitHub Actionsを試すときに、いちいちコミットしないといけないのがめんどくさいので、
ローカルで確認できればな〜と思い、色々調べたときの備忘録。

Dockerを立ち上げてローカルで実行できるのがあった...(*´ω`*)

nektos/act: Run your GitHub Actions locally 🚀

使ったサンプルはこれ(*´ω`*)

# ./github/workflows/build.yml
# ./github/workflows/test.yml
name: Act Sample
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo "MY_ENV_VAR = ${{ env.MY_ENV_VAR }}"
          echo "MY_2ND_ENV_VAR = ${{ env.MY_2ND_ENV_VAR }}"
          echo "NPM_TOKEN = ${{ secrets.NPM_TOKEN }}"
          echo "GITHUB_TOKEN = ${{ secrets.GITHUB_TOKEN }}"

インストール

# インストール
$ brew install act

HomeBrew以外はREADMEを参照

nektos/act: Run your GitHub Actions locally 🚀

実行できる一覧の表示

# 実行できる一覧の表示
$ act -l
Stage  Job ID  Job name  Workflow name             Workflow file  Events 
0      build   build     Act Sample                build.yml      release
0      build   build     TEST                      test.yml       release

# 実行できる一覧の表示: イベント指定
$ act workflow_dispatch -l
Stage  Job ID  Job name  Workflow name             Workflow file  Events 

# 実行できる一覧の表示: ジョブ指定
$ act -j build -l
Stage  Job ID  Job name  Workflow name             Workflow file  Events 
0      build   build     Act Sample                build.yml      release
0      build   build     TEST                      test.yml       release

# 実行できる一覧の表示: 特定のファイル指定
act -W .github/workflows/build.yml -l
Stage  Job ID  Job name  Workflow name             Workflow file  Events 
0      build   build     Act Sample                build.yml      release

複数の.ymlがあったり、同じジョブ名だとすべて実行対象になるので注意

実行

# 実行: デフォルトはpushイベント
act

# 特定のイベントで実行
act pull_request

# 特定のジョブを実行
act -j test

# 特定のファイル指定: デフォルトは全ファイル
act -W .github/workflows/build.yml -l

# dry-runモードで実行
act -n

初回実行時

初めて実行すると、以下のようなプロンプトが表示され、
実行時に利用するDockerのイメージサイズを選択が必要。

$ act
? Please choose the default image you want to use with act:

  - Large size image: +20GB Docker image, includes almost all tools used on GitHub Actions (IMPORTANT: currently only ubuntu-18.04 platform is available)
  - Medium size image: ~500MB, includes only necessary tools to bootstrap actions and aims to be compatible with all actions
  - Micro size image: <200MB, contains only NodeJS required to bootstrap actions, doesn't work with all actions

選択すると、~/.actrcに設定が保存される。

$ cat ~/.actrc 
-P ubuntu-latest=node:16-buster-slim
-P ubuntu-22.04=node:16-bullseye-slim
-P ubuntu-20.04=node:16-buster-slim
-P ubuntu-18.04=node:16-buster-slim

各設定に関しては以下に書いてあるので、適宜変更できる。
Runners
Configuration

環境変数/シークレットの指定

# シークレットの指定: デフォルトは".secrets"
act --secret-file .act.secrets

# 環境変数の指定: デフォルトは".env"
act --env-file .act.env

ローカルで実行する場合、GITHUB_TOKENがないので、
Personal Access Token(PAT)を作成して設定する必要がある。

ファイル形式はどちらも同じ

MY_ENV_VAR=MY_ENV_VAR_VALUE
MY_2ND_ENV_VAR="my 2nd env var value"

~/.actrcをこんな感じにしておくと便利そう。

-P ubuntu-latest=node:16-buster-slim
-P ubuntu-22.04=node:16-bullseye-slim
-P ubuntu-20.04=node:16-buster-slim
-P ubuntu-18.04=node:16-buster-slim
--env-file .act.env
--secret-file .act.secrets

注意点

  • actで実行できる環境はubuntuのみ
  • 実際の環境とは異なるので、差分もある
    • 全機能を試せるわけではない

とのことだけど、それでもかなりの数のコミットを減らせるはず。。(*´ω`*)
ありがたい...(*´ω`*)

参考にしたサイト様