✅
actでGitHub Actionsのworkflowをローカルで動作確認する
はじめに
actはGitHub Actionsのworkflowをローカルで動作させることができるツールです。
push、pull_requestなどの起動条件をコマンドで指定できるため、簡単に動作確認ができます。
今回はpytestを実行する簡易workflowを作ってactで実行してみます!
準備
- 事前にDockerのインストールが必要です。
- actは各種パッケージマネージャからインストールすることができます。
今回はHomebrewを利用してインストールします。
brew install act
テストコード
今回は下記のサンプルを利用します。
pushされたときにsample_code1(足し算)、pull_requestされたときにsample_code2(引き算)のテストが実行されることを確認します。
ディレクトリ構成
ActSample/
├── .github/
│ └── workflows/
│ ├── test1.yml
│ └── test2.yml
├── sample_code1/
│ ├── sample1.py
│ └── test_sample1.py
└── sample_code2/
├── sample1.py
└── test_sample2.py
workflows
test1.yml
name: test1
on:
push:
jobs:
pytest:
runs-on: ubuntu-latest
steps:
# リポジトリをチェックアウト
- name: Checkout repository
uses: actions/checkout@v4
# Pythonのバージョンを設定
- name: Set up Python version
uses: actions/setup-python@v4
with:
python-version: '3.12'
# 仮想環境を設定し、pytestをインストール
- name: Set up virtual environment
working-directory: ./sample_code1
run: |
python -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install pytest==8.3.3
# Pytestを実行
- name: Run Pytest
working-directory: ./sample_code1
run: |
source venv/bin/activate
pytest test_sample1.py
test2.yml
name: test2
on:
pull_request:
jobs:
pytest:
runs-on: ubuntu-latest
steps:
# リポジトリをチェックアウト
- name: Checkout repository
uses: actions/checkout@v4
# Pythonのバージョンを設定
- name: Set up Python version
uses: actions/setup-python@v4
with:
python-version: '3.12'
# 仮想環境を設定し、pytestをインストール
- name: Set up virtual environment
working-directory: ./sample_code2
run: |
python -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
pip install pytest==8.3.3
# Pytestを実行
- name: Run Pytest
working-directory: ./sample_code2
run: |
source venv/bin/activate
pytest test_sample2.py
sample_code1
sample1.py
def addition(a, b):
return a + b
test_sample1.py
import pytest
from sample1 import addition
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
(-1, -2, -3),
(1, -1, 0)
])
def test_sample1(a, b, expected):
assert addition(a, b) == expected
sample_code2
sample2.py
def subtraction(a, b):
return a - b
test_sample2.py
import pytest
from sample2 import subtraction
@pytest.mark.parametrize("a, b, expected", [
(2, 1, 1),
(0, 0, 0),
(1, -1, 2),
(-1, -1, 0),
(1, 1, 0)
])
def test_sample2(a, b, expected):
assert subtraction(a, b) == expected
実行
actを実行してみます。
act
初回はランナーのサイズを聞かれるため、Mediumを選択します。
ランナーの詳細は下記を確認ください。
pushされた時のworkflowを実行してみます。
AppleシリコンのMacでない場合は、--container-architecture linux/amd64オプションは不要です。
act push --container-architecture linux/amd64
push時のworkflowに設定したsample_code1のテストが実行されています!
同じく、pull_requestのworkflowを確認してみます。
act pull_request --container-architecture linux/amd64
pull_requestのworkflowに設定したsample_code2のテストが実行されました!
各コマンドの詳細は下記を参照ください。
終わりに
今回はGihHub Actionsのworkflowをローカルで実行できるactを使ってみました。
workflowを追加や修正した際、コマンドだけで手軽に動作確認できるのが非常に便利でした!
GItuHub Actionsと全く同じ動作をするわけではないので、その点に注意は必要そうです。
Discussion