GitHub Actionsでカバレッジを表示するハンズオン

環境構築

connpass-clientをforkします

https://github.com/fin-py/connpass-client にアクセスし、 Fork をクリックします

Create fork をクリックします

forkしたリポジトリから Settings -> Actions -> Workflow permissions から Read and write permissions を選択して Save します

forkしたリポジトリをclone し、カレントディレクトリを移動します

git clone git@github.com:<your github account>/connpass-client.git
cd connpass-client

仮想環境にインストール

Attention

Poetryを使う場合は Poetryを使って仮想環境にインストール に進んでください。

仮想環境を作成します。実行環境の合わせて pythonpython3 などに置き換えてください。

python -m venv .venv

Note

Windwsの場合は py コマンドから仮想環境を作成します。

py -m venv .venv

仮想環境を有効化します。

source .venv/bin/activate

Note

WindwsでPowerShellを使う場合、スクリプトの実行許可を与えていない場合は次のコマンドを1回だけ実行します。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

仮想環境を有効化します。

.venv\Scripts\activate

パッケージをインストールします。

python -m pip install pip -U
pip install . pytest coverage pytest-cov "genbadge[coverage]"

Poetryを使って仮想環境にインストール

Caution

仮想環境にインストール の手順を実施している場合は以降の手順は不要です。

virtualenvs.in-project の設定を確認します。

poetry config --list

virtualenvs.in-project = true になっていなければ、仮想環境をカレントディレクトリに生成する設定にします(オプション)。

poetry config --local virtualenvs.in-project true

Note

virtualenvs.in-project の設定をグローバルにするには --local を省略します。

poetry config virtualenvs.in-project true

Poetryの環境にインストールします。

poetry install

Poetryの環境を有効化します。

poetry shell

はじめてのGitHub Actions

GitHub Actions のクイックスタート の手順に従って、GitHub Actionsを実行してみます

.github/workflows ディレクトリを作成します

mkdir -p .github/workflows

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

 1name: GitHub Actions Demo
 2run-name: ${{ github.actor }} is testing out GitHub Actions 🚀
 3on: [push]
 4jobs:
 5  Explore-GitHub-Actions:
 6    runs-on: ubuntu-latest
 7    steps:
 8      - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
 9      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
10      - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
11      - name: Check out repository code
12        uses: actions/checkout@v3
13      - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
14      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
15      - name: List files in the repository
16        run: |
17          ls ${{ github.workspace }}
18      - run: echo "🍏 This job's status is ${{ job.status }}."

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

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

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

ワークルフローをクリック

ジョブ( Explore-GitHub-Actions )をクリック

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 が作成されていることを確認します

GitHub Pagesの設定

リポジトリの Settins -> Pages から Branchcoverage/(root) に変更して、 Save します

Actionspages build and deployment が実行されたことを確認します

deploy に表示されているリンク( https://<your github account>/connpass-client/ )を開き、カバレッジがHTMLで表示されることを確認します

READMEに追加

README.md 2行目以降に次の行を追加します


[![Coverage Status](https://raw.githubusercontent.com/<your github account>/connpass-client/coverage/coverage-badge.svg)](https://<your github account>.github.io/connpass-client/)

コミット、プッシュしてREADMEにバッジが表示されていることを確認します

Indices and tables