🙌
GitHub Actions で pytest が pass した PR のみ main ブランチに Merge させるための最低限のこと
やりたいこと
- pytest が通ったコードのみ、PR から main ブランチに merge させるようにしたい
- これをやるための最低限のサンプル
- Python 3.9 を想定している
今回のサンプルコードのリポジトリ
解説
ディレクトリ構成はこんな感じ
$ tree
.
├── .github
│ └── workflows
│ ├── hello.yml
│ └── python_ci.yml
└── python
├── app
│ ├── __init__.py
│ └── hello.py
├── requirements.txt
└── test
├── __init__.py
└── test_hello.py
初期セットアップ、事前準備
$ cd python
$ python3 -m venv .venv
$ pip install -r requirements.txt
pytest は venvから以下のような感じで実行できる状態にしておく
$ cd python
$ .venv/bin/pytest test/test_hello.py
=================================================================================== test session starts ===================================================================================
platform darwin -- Python 3.9.13, pytest-7.1.3, pluggy-1.0.0
rootdir: /path/to/github-actions-sample/python
collected 1 item
test/test_hello.py . [100%]
==================================================================================== 1 passed in 0.03s ====================================================================================
CI 用 Workflow yaml の作成
pytest を実行する処理を書く
name: Python CI
on:
push:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: setup venv & pip install
run: cd python && python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
- name: run pytest
run: cd python && .venv/bin/pytest test
これら一式を一旦 main に push
$ tree
.
├── .github
│ └── workflows
│ ├── hello.yml
│ └── python_ci.yml
└── python
├── app
│ ├── __init__.py
│ └── hello.py
├── requirements.txt
└── test
├── __init__.py
└── test_hello.py
Protected Branch の設定
- リポジトリの Settings -> Branch Protection Rules で Add Rule する
- Branch Name Pattern に main
- Require status checks to pass before merging と Require branches to be up to date before merging にチェックを入れる
- これでいったん Create
適当なPRを作って確認する
期待する挙動になりました。わーい。
Discussion