はじめに
本記事では、GitHub Actionsを利用して、Pythonのテスト実行とカバレッジ計測をするGitHub Actionsを作成したいと思います。
GitHub Actionsとは、GitHubが提供するCI/CDのサービスです。
今までCircleCIを利用していましたが、いつの間にかGitHub Actionsが利用できるようになっており、試しに使ってみたら便利だったので記事にしました。
CircleCIと比べてGitHub Actionsが良いな思ったのは以下の3点です。(GitHub ActionsとCircleCIを両方ガッツリ使っているわけでは無いので、間違った内容を言っていたらすいません。)
- CircleCIでCIを実行するためには、CircleCI上で初期設定を行わなければならず、GitHubとは異なるサイトで設定を行うのが煩雑
- GitHubにpackage(pythonの登録は現時点ではできないですが、将来的に来そう)やrelease(tag)を登録しようとしたときにGitHub上でCI/CDを走らせた方が一元管理できて良さそう
- CircleCIと比べて、GitHub ActionsはCIのjobと設定ファイルが1対1で対応させることができ、jobの管理が容易である。
GitHub Actions
やりたいこと
- 複数のPythonのversionにてtestを走らせて、特定のversionのカバレッジのみcodecovにcommitする
設定ファイルの置き場所
リポジトリの直下に.github/workflows/
というフォルダを作成して、その中にjobとなるymlファイルを置いていきます。
このときに、複数個のファイルを置くとそれぞれがjobとなります。
設定ファイルの内容
今回作成するCIは、以下の場合のみに実行されるように制限されています。
- masterにpushされた時
- developへpull_requestがあった時
また、テストカバレッジは、Python3.8
でのテスト結果のみcodecovへ載せるようにしています。
※設定の内容のほとんどは、参考サイトさんのを利用しています。
# ここに設定した名前がActions上に表示される
name: pytest
on:
push:
branches:
- master
pull_request:
branches:
- develop
jobs:
pytest:
name: Run tests with pytest
# 実行環境として `ubuntu-latest` という名前のものを選ぶ
runs-on: ubuntu-latest
# 複数の Python のバージョンでテストするために `strategy.matrix` を設定する
strategy:
matrix:
python-version: [3.7, 3.8]
steps:
# リポジトリをチェックアウトする
# See: https://github.com/actions/checkout
- name: Checkout
uses: actions/checkout@v2
# Python のランタイムをセットアップする
# バージョンは `strategy.matrix` に並べたものを指定する
# See: https://github.com/actions/setup-python
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: ${{ matrix.python-version }}
# Poetry そのものをインストールする
- name: Install Poetry
run: |
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
# Poetry へのパスを通す
- name: Add path for Poetry
run: echo "$HOME/.poetry/bin" >> $GITHUB_PATH
# インストールした Poetry を使って必要な Python パッケージをインストールする
- name: Install Dependencies
run: poetry install --no-interaction
# pytest を実行する
- name: Run Tests
run: poetry run pytest test --cov=./slack_api_decorator --cov-report=xml
- name: Upload coverage to Codecov
# 上記のstepsが全て完了した場合にcodecovへupload
# 今回はpublic repositoryのためKEYは不要だが、privateなら必要なので注意
if: ${{ matrix.python-version==3.8 }}
uses: codecov/codecov-action@v1
with:
file: ./coverage.xml
name: codecov-umbrella
fail_ci_if_error: true
GitHub Actionsのbadge
テストをしたら、badgeをREADMEとかに貼りたいですよね。
GitHub Actionsならそれぞれのjobごとにbadgeを以下のボタンから取得することができます。
ただ、この記事でも言われれているように、リンク先が画像になっているので、リンクなどを正しく設定してあげると良いと思います。
以下の手順で修正できます。
1: 生成されたbadge
![pytest](https://github.com/gsy0911/slack-api-decorator/workflows/pytest/badge.svg)
2: 生成されたbadgeを[]で囲み、後ろに()をつける
[![pytest](https://github.com/gsy0911/slack-api-decorator/workflows/pytest/badge.svg)]()
3: 後ろの()に該当するCIのリンクを貼る
[![github-pytest](https://github.com/gsy0911/slack-api-decorator/workflows/pytest/badge.svg)](https://github.com/gsy0911/slack-api-decorator/actions?query=workflow%3Apytest)
おわりに
一旦、よく利用するpytestのGitHub Actionsを利用して見ました。
今度は、AWSへCDKを利用して自動デプロイするようになどして見たいです。
参考
以下のサイトさんを参考に本設定ファイルを作成しました。