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
下記が追加で編集したもの。
もともとはSQLiteでテストが行われる設定になっていたが、ちゃんとMySQLで実行したいのでその設定。まずはservicesにMySQLのサービスを追加。optionsはよくわからないがコンテナが落ちてしまうらしいので追加している。そのうち不要になるのでは。
接続の設定は .env.example
をコピーして使う。そのため、その設定に合わせてこのサービスのenvを設定する。具体的な設定はDockerHubのmysqlイメージのところに書いてある。
ポートは ${{ job.services.mysql.ports['3306'] }}
という感じでサービスのポートを参照できる。ホストはローカル。ただしlocalhostでなく127.0.0.1としないとつながらないっぽい。
phpunit.xmlにSQLiteを使う設定が書かれているので、そちらを削除する。
vendorフォルダをキャッシュする。Cache vendorとInstall Dependenciesのところ。これでキャッシュされて次回から0秒になっているので多分大丈夫っぽい。
ちなみに下記がキャッシュ前。
雛形もあるし非常に簡単だった。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント