https://www.memory-lovers.blog/entry/2022/11/13/120000

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

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

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

# ./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を参照

# 実行できる一覧の表示
$ 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

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

# シークレットの指定: デフォルトは".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"