GitHub ActionsでPHPUnitを実行する

GitHub ActionsでPHPStanを実行する

前記事に引き続きGitHub Actionsでなんかやろうシリーズ
今回はGitHubでdevelopmentへのプルリクエストをトリガーにPHPUnitが動作するように設定して実行

【重点】【注意】【お断り】【お断り】【注意】【重点】
これは『GitHub ActionsでPHPUnitが動けばよし』としている
なので『GitHub Actions上でPHPUnitが想定通りの動作をしてくれない』には別途対処が必要
【重点】【注意】【お断り】【お断り】【注意】【重点】

  1. リポジトリルートからディレクトリ掘ってphpunitの動作ファイル配置:.github/workflows/phpunit.yml
  2. Dockerでコンテナ立ち上げて入ってプロジェクトルートに移動。
  3. composerでphpunitを追加
    composer require --dev phpunit/phpunit ^10
    (本当は11にしたいが、今回はcomposer.jsonの他の内容と干渉して通せないのでやむなく10)
  4. さらに必要になるので
    composer require --dev nunomaduro/collision ^7.0
  5. 追加したので
    composer update
  6. これでunitテストに必要なphpファイルが作れるようになったのでコマンドで作成
  7. 必要なところは変えること
    php artisan make:test HealthCheckTest --unit
    php artisan make:test HealthCheckTest
  8. コマンドのレスポンスにどこに出たのかが書いてあるので自動作成されたファイルの内容を確認
    必要に応じて編集する。
  9. 編集したら実行
    php artisan test
    これで上手く行ったらローカルでの実行成功ってこと
  10. うまく行ったらGitHubにプッシュしてonになる条件を満たしてみる
  11. GitHubのActionsタブからメニューのPHPUnitを押して結果を見てみる
  12. 成功していたら万歳
  13. 失敗していたら原因探して対処
おつかれさまでした(゜々。)
.github/workflows/phpunit.yml
name: PHPUnit

on:
  pull_request:
    branches:
      - development
    types:
      - opened
      - synchronize
      - reopened

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      db:
        image: mysql/mysql-server:5.7
        env:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: database
          MYSQL_ROOT_HOST: '%'
        ports:
          - 127.0.0.1:3306:3306

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Set up PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.2'
          extensions: mbstring, pdo, mysqlnd, mcrypt, memcached, gd, apcu, xml, bcmath, zip, xdebug, opcache
          tools: composer

      - name: Composer install
        run: composer install --no-progress --prefer-dist --working-dir=src

      - name: Run PHPUnit
        working-directory: src
        run: php artisan test

developmentのプルリクエスト(作成・追加コミット・再開)を実行トリガー化
上部へスクロール