25
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitHub Actionsを利用してpytestする

Last updated at Posted at 2020-08-28

はじめに

本記事では、GitHub Actionsを利用して、Pythonのテスト実行とカバレッジ計測をするGitHub Actionsを作成したいと思います。

GitHub Actionsとは、GitHubが提供するCI/CDのサービスです。

今までCircleCIを利用していましたが、いつの間にかGitHub Actionsが利用できるようになっており、試しに使ってみたら便利だったので記事にしました。

CircleCIと比べてGitHub Actionsが良いな思ったのは以下の3点です。(GitHub ActionsとCircleCIを両方ガッツリ使っているわけでは無いので、間違った内容を言っていたらすいません。)

  1. CircleCIでCIを実行するためには、CircleCI上で初期設定を行わなければならず、GitHubとは異なるサイトで設定を行うのが煩雑
  2. GitHubにpackage(pythonの登録は現時点ではできないですが、将来的に来そう)やrelease(tag)を登録しようとしたときにGitHub上でCI/CDを走らせた方が一元管理できて良さそう
  3. CircleCIと比べて、GitHub ActionsはCIのjobと設定ファイルが1対1で対応させることができ、jobの管理が容易である。

GitHub Actions

やりたいこと

  • 複数のPythonのversionにてtestを走らせて、特定のversionのカバレッジのみcodecovにcommitする

設定ファイルの置き場所

リポジトリの直下に.github/workflows/というフォルダを作成して、その中にjobとなるymlファイルを置いていきます。

スクリーンショット 2020-08-28 9.43.41.png

このときに、複数個のファイルを置くとそれぞれがjobとなります。

スクリーンショット 2020-08-28 9.45.03.png

設定ファイルの内容

今回作成する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を以下のボタンから取得することができます。

スクリーンショット 2020-08-28 9.56.11.png

ただ、この記事でも言われれているように、リンク先が画像になっているので、リンクなどを正しく設定してあげると良いと思います。

以下の手順で修正できます。

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を利用して自動デプロイするようになどして見たいです。

参考

以下のサイトさんを参考に本設定ファイルを作成しました。

25
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?