2020-02-26に更新

GitHub ActionsでMySQLを使ったLaravelのテストを実行する

GitHub ActionsでMySQLを使ったLaravelのテストを実行してみたら出来たのでメモ。

アクションを作成する時にLaravelの雛形が選べるようなので、とりあえずそちらを使って作成する。雛形を下記のように置き換えた。

name: Laravel

on: [push]

jobs:
  laravel-tests:
    runs-on: ubuntu-latest

    services:
      mysql:
        image: mysql:5.7
        ports:
          - 3306
        options: --health-cmd "mysqladmin ping -h localhost" --health-interval 20s --health-timeout 10s --health-retries 10
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
          MYSQL_DATABASE: laravel

    steps:
      - uses: actions/checkout@v2
      - name: Copy .env
        run: php -r "file_exists('.env') || file_put_contents('.env', str_replace('DB_PORT=3306', 'DB_PORT=${{ job.services.mysql.ports['3306'] }}', file_get_contents('.env.example')));"
      - name: Cache vendor
        id: cache-vendor
        uses: actions/cache@v1
        with:
          path: vendor
          key: ${{ runner.os }}-vendor-${{ hashFiles('**/composer.lock') }}
      - name: Install Dependencies
        if: steps.cache-vendor.outputs.cache-hit != 'true'
        run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist
      - name: Generate key
        run: php artisan key:generate
      - name: Directory Permissions
        run: chmod -R 777 storage bootstrap/cache
      - name: Execute tests (Unit and Feature tests) via PHPUnit
        run: vendor/bin/phpunit

やったこと

下記が追加で編集したもの。

MySQLの設定

もともとはSQLiteでテストが行われる設定になっていたが、ちゃんとMySQLで実行したいのでその設定。まずはservicesにMySQLのサービスを追加。optionsはよくわからないがコンテナが落ちてしまうらしいので追加している。そのうち不要になるのでは。

接続の設定は .env.example をコピーして使う。そのため、その設定に合わせてこのサービスのenvを設定する。具体的な設定はDockerHubのmysqlイメージのところに書いてある。

ポートは ${{ job.services.mysql.ports['3306'] }} という感じでサービスのポートを参照できる。ホストはローカル。ただしlocalhostでなく127.0.0.1としないとつながらないっぽい。

phpunit.xmlの編集

phpunit.xmlにSQLiteを使う設定が書かれているので、そちらを削除する。

キャッシュの設定

vendorフォルダをキャッシュする。Cache vendorとInstall Dependenciesのところ。これでキャッシュされて次回から0秒になっているので多分大丈夫っぽい。

image.png

ちなみに下記がキャッシュ前。

image.png

まとめ

雛形もあるし非常に簡単だった。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント