GitHubを見ているとREADMEにコードのカバレッジが書かれたバッジが貼ってあるのをよく見ますが、アレを実際に自分が作っているPHPのライブラリのレポジトリに貼ってみたのでその方法を紹介します。
今回はCoverallsというテストのカバレッジの結果を収集してくれるサービスを利用してバッジを作りました。
また、手作業でカバレッジのレポートを上げるのは効率が悪いので、GitHub Actionsを用いてコードが変更されると自動で上げるようにしました。
用意するもの
- GitHub Actionsの設定
- テストを実行してカバレッジレポートを送信するのに必要です
- Coverallsのアカウント
- あらかじめGitHubと連携しておいてください
- テストされるコードとテストコード
Coverallsと対象のレポジトリを接続する
Add Reposから対象のレポジトリを接続しておきましょう。トグルをONにしておけば完了です。
PHPUnitの設定を変更する
今回はPHPのプロジェクトを対象に設定するので、PHPUnitの設定にカバレッジ周りの設定を入れていきます。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
<!-- 以下のcoverageを追加する -->
<coverage>
<include>
<directory suffix=".php">src/</directory>
</include>
<report>
<clover outputFile="build/logs/clover.xml"/>
</report>
</coverage>
</phpunit>
何も設定してなければカバレッジレポートは吐き出してくれないので出力するように設定しておきます。
今回は src/
以下にカバレッジの計測の対象になるコードが入っている想定で、build/logs/clover.xml
にclover形式のカバレッジレポートを出力するようにしました。
GitHub Actionsの設定を仕込んでおく
name: coverage
on:
push:
branches:
# 今回はカバレッジレポートの送信の対象はmainブランチだけにしてあります(適宜変更してください)
- main
jobs:
phpunit:
name: PHPUnit (PHP ${{ matrix.php-versions }} on ${{ matrix.operating-system }})
runs-on: ${{ matrix.operating-system }}
strategy:
fail-fast: false
matrix:
operating-system: [ ubuntu-latest ]
php-versions: [ '8.1' ]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, dom, fileinfo, simplexml
coverage: xdebug
- name: Get composer cache directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache composer dependencies
uses: actions/cache@v2
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Install Composer dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: Test with PHPUnit
run: vendor/bin/phpunit --testdox --colors=always
- name: Upload coverage results to Coveralls
env:
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
composer global require php-coveralls/php-coveralls
php-coveralls --coverage_clover=build/logs/clover.xml -v
main
ブランチに更新があったらカバレッジを計測してCoverallsに結果を送信するようにしました。
ポイントは COVERALLS_REPO_TOKEN
ですが、何も設定しなくても secrets.GITHUB_TOKEN
から安全に取得できるのでそれを利用しました。(ベタ書きするのは絶対にやめましょう)
secrets.GITHUB_TOKEN
については、以下の記事が参考になるので、そちらを参照してください。
Automatic token authentication - GitHub Docs
[GitHub]secrets.GITHUB_TOKENで実行できる権限について簡単ながらマッピングしてみた | DevelopersIO
完成したバッジを貼り付ける
カバレッジレポートが上がると、Coverallsのレポジトリのページからバッジのコードが取れるようになっているので、そこからコピーしてREADMEに貼り付ければ完了です。