GitHubActionsでPHP7.4環境のPHPUnitを実行する

こんにちは、こんばんは、おはようございます。kubotakです。
最近はImpalaとKuduしか触っていなかったんですが、GitHubActionsが使えるようになっていた(2019/10/04現在はまだベータ)のでPHP7.4を対象にしたLaravelアプリケーションのユニットテストをGitHubActionsでCIしたいと思います。

GitHubActionsとは

GitHubリポジトリでのイベントを検知してワークフローを実行できる仕組み、いわゆるCIツール・サービスです。

GitHubActionsの使い方としては以下のブログが参考になりました。

GitHub Actionsの使い方

まずはリポジトリのタブにActionsがあることが大前提です。

github tab

出てない場合はベータの申し込みが必要です。

そして、GitHub Actionsのワークフロー定義は

.github/workflow/{name}.yml

このようにリポジトリ直下にディレクトリを掘ってワークフロー毎にYAMLファイルを用意することで実行してくれます。
基本的な使い方は先ほど紹介したブログをご参照いただければと思います。

今回はPHP7.4環境で実行したいわけですが、現在デフォルトで対応してるのは7.3までのようです(そもそもPHP7.4がまだベータなので)
ですので、以下のPHP環境を利用します。

それでは使ってみましょう

name: PHP Unit
on: [ push, pull_request ]

jobs:
  build:
    name: Testing
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@master
      - name: Installing PHP
        uses: shivammathur/setup-php@master
        with:
          php-version: 7.4
          extension-csv: mbstring, xdebug
      - name: Executio PHP Unit
        run: composer install && composer run test

しかしこれでは動きませんでした!

ext-domがない

composer install時にいくつかのライブラリで

requires ext-dom * -> the requested PHP extension dom is missing from your system.

というエラーが発生しました。
ext-domということはPHPのxmlエクステンションを入れれば良いはず。

with:
   php-version: 7.4
  extension-csv: mbstring, xdebug, xml

ここにxmlも追加してみました、が

Extension xml was already enabled

すでに入ってると言われてしまいました。
仕方ないのでaptで入れて対処

- name: Add Plugin
  run: sudo apt install -y php7.4-xml

これで無事先ほどのエラーは回避されました。

追記: 2019/10/16


Twitterでご指摘いただきました。

extension-csv: mbstring, xdebug, dom

extension-csvにdomを追加することでext-domが追加されるようです。

Memcachedクラスがない

これはPHP7.4とは関係なく、Laravelの.env.exampleでCACHE_DRIVERをmemcachedとしていたことに起因していました。
テストなのでfileに変更しことなきを得ました。

CACHE_DRIVER=file

YAMLファイルサンプル

name: PHP Unit
on: [ push, pull_request ]

jobs:
  build:
    name: Testing
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@master
      - name: Installing PHP
        uses: shivammathur/setup-php@master
        with:
          php-version: 7.4
          extension-csv: mbstring, xdebug
      - name: Add Plugin
        run: sudo apt install -y php7.4-xml
      - name: Check PHP Version
        run: php -v
      - name: Check Composer Version
        run: composer -V
      - name: Check PHP Extensions
        run: php -m
      - name: Execution PHP Unit
        run: cp .env.test .env && composer install && php artisan key:generate && composer run test

YAMLファイルはこんな感じになりました。
無事PHP7.4環境でPHPUnitが実行できました。
GitHub Actions

PHP7.4は2019年11月28日リリース予定です。
先立って利用したい方は今回の使い方でGItHubActionsでPHPUnitを実行できます。
みなさんでPHP7.4に備えましょう!

アイスタイルのヘアカラー担当 元デザイナーの中途4年目です PHP, JavaScript, Golang, Scala, etc