0
1

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 1 year has passed since last update.

Laravel + Docker + PHPUnit + GitHubActions テストカバレッジをPRに出力する

Last updated at Posted at 2022-04-12

概要

先日、phperkaigi2022に参加してテスト結果の見える化とテスト文化を根付かせるための活動がよかったので、実際に導入してみた

なお、ワークフローについてもっと良い方法をご存知の方は、マサカリいただけると助かります

やり方

ワークフローを定義します

カバレッジを全て表示すると見づらいので必要な箇所だけを切り取りしてPRコメントに出力するようにします

スクリーンショット 2022-04-13 1.05.05.png

ブラウザ上でカバレッジを見たい場合

出力形式はいくつかあるので公式を参考に設定ください

HTML形式で出力したい場合は以下のコマンドをLaravelコンテナ内で実行してください

phpdbg -qrr ./vendor/bin/phpunit --coverage-html  ./coverage

解説

MySQLコンテナ起動後、実行するまでに時間を要しますがテストが先に開始されるとConnection Refusedで接続ができません。

今回は3分弱時間を置いてからテストプロセスに進めるように設定しました

docker-compose exec -T laravel bash -c "sleep 200"

ワークフローの実行契機を設定します

今回はmainブランチにプルリクエストを発行すると実行されるトリガーを設定します

on:
  # PR契機
  pull_request:
    branches: [ main ]
.github/workflows/test.yml
name: PhpUnitCoverage

on:
  # PR契機
  pull_request:
    branches: [ main ]

jobs:
  build:
    # 実行環境
    runs-on: ubuntu-latest
    steps:
      # $GITHUB_WORKSPACE配下のリポジトリをチェックアウトしてアクセス可能にする
      - uses: actions/checkout@v2

      - name: dokcer-compose Laravel Init
        run: |
          docker-compose up -d
          docker-compose exec -T laravel bash -c "composer install"
          docker-compose exec -T laravel bash -c "cp .env.example .env"
          docker-compose exec -T laravel bash -c "php artisan key:generate"
          docker-compose exec -T laravel bash -c "php artisan config:cache"
          docker-compose exec -T laravel bash -c "sleep 200"

      - name: Exec Phpunit
        run: |
          docker-compose exec -T laravel bash -c "phpdbg -qrr ./vendor/bin/phpunit --coverage-text --colors=never > storage/logs/coverage.log"
          docker-compose exec -T laravel bash -c "cat storage/logs/coverage.log"

      - name: Cat Test Result
        run: |
          cat ./src/laravel/storage/logs/coverage.log
        if: ${{ failure() }}

      - name: Sed Coverage Report
        run: |
          sed -E "s/"$'\E'"\[([0-9]{1,2}(;[0-9]{1,2})*)?m//g" | \
          grep "Code Coverage Report:" -A6 ./src/laravel/storage/logs/coverage.log | sed -e "s/^ *//" | sed -e "s/ *$//" | sed -e "/^ *$/d" > ./src/laravel/storage/logs/coverage-summary.log

      - name: Read coverage summary
        id: coverage-summary
        uses: juliangruber/read-file-action@v1
        with:
          path: ./src/laravel/storage/logs/coverage-summary.log

      - name: Comment Coverage Summary
        uses: marocchino/sticky-pull-request-comment@v2
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          header: coverage-summary
          message: |
            ## Coverage Summary
            ${{ steps.coverage-summary.outputs.content }}
0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?