GitHub Actionsによるカバレッジの実行

ここでは次の内容をGitHub Actionsを利用して実行します

  1. カバレッジのレポートを生成(HTML、XML)

  2. XMLファイルをもとに、カバレッジのバッジを生成

  3. レポート(HTML)とバッジを coverage ブランチにコミット・プッシュ

YAMLファイルの作成

.github/workflows/coverage.yml ファイルを作成し、下記の内容を記述します

 1name: coverage
 2on:
 3  push:
 4    branches: [ main ]
 5env:
 6  BRANCH_NAME: coverage
 7jobs:
 8  generate-coverage:
 9    runs-on: ubuntu-latest
10    steps:
11      - name: checkout
12        uses: actions/checkout@v3
13      - name: pip install
14        uses: actions/setup-python@v3
15        with:
16          python-version: '3.10'
17      - run: |
18          python -m pip install --upgrade pip
19          python -m pip install pytest coverage pytest-cov "genbadge[coverage]"
20      - name: genarate coverage and badge
21        run: |
22          pytest --cov=connpass_client tests
23          coverage html
24          mv htmlcov/* .
25          coverage xml
26          genbadge coverage -i - < coverage.xml
27      - name: commit and push
28        run: |
29          git config --local user.email "actions@github.com"
30          git config --local user.name "GitHub Actions"
31          git fetch origin $BRANCH_NAME && git push --delete origin $BRANCH_NAME
32          git checkout --orphan $BRANCH_NAME
33          git rm -rf .
34          git add .
35          git commit -m "generate coverage"
36          git push origin $BRANCH_NAME
2on:
3  push:
4    branches: [ main ]

main ブランチにプッシュされた場合に、ワークフローにトリガーされます

6env:
7  BRANCH_NAME: coverage

環境変数 BRANCH_NAMEcoverage を設定しています

12        uses: actions/checkout@v3

このステップで actions/checkout@v3 を実行します

リポジトリをランナーにチェックアウトするアクションであり、コードに対してスクリプトまたはほかのアクション (ビルド、ツールやテスト、ツールなど) を実行できます

14        uses: actions/setup-python@v3
15        with:
16          python-version: '3.10'

このステップで actions/setup-python@v3 を実行します

このアクションは、GitHub Actionsのユーザーに対して、次の機能を提供します

  • PythonまたはPyPyのバージョンをインストールし、(デフォルトで)PATHに追加

  • オプションでpip、pipenv、poetryの依存関係をキャッシュ

  • エラー出力のためのプロブレムマッチャーを登録

23          coverage html
24          mv htmlcov/* .
25          coverage xml

Coverage.py を利用してカバレッジのレポートを生成しています

coverage html コマンドでカバレッジのレポートをHTML形式に出力します

coverage xml コマンドでカバレッジデータを Cobertura と互換性のあるXML形式に出力します

26          genbadge coverage -i - < coverage.xml

genbadge を利用してバッジを生成します

31          git fetch origin $BRANCH_NAME && git push --delete origin $BRANCH_NAME

$BRANCH_NAME ブランチを確認し、ブランチが存在している場合は削除します

32          git checkout --orphan $BRANCH_NAME

空の $BRANCH_NAME ブランチを生成します

ワークフローの実行

コミット、プッシュします

git add .
git commit -m "Add Github Actions coverage"
git push orgin main

ブラウザからforkしたリポジトリにアクセスし、 Actions からワークフローの結果を確認します

リポジトリの Code に移動し、 coverage ブランチがあることを確認します

coverage ブランチに coverage-badge.svg が作成されていることを確認します