🙌

GitHub Actions で pytest が pass した PR のみ main ブランチに Merge させるための最低限のこと

2022/10/17に公開

やりたいこと

  • pytest が通ったコードのみ、PR から main ブランチに merge させるようにしたい
  • これをやるための最低限のサンプル
  • Python 3.9 を想定している

今回のサンプルコードのリポジトリ

https://github.com/shase/github-actions-sample

解説

ディレクトリ構成はこんな感じ

$ 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 mergingRequire branches to be up to date before merging にチェックを入れる
  • これでいったん Create

適当なPRを作って確認する

期待する挙動になりました。わーい。

Discussion