今日は自分で作成したymlファイルをメモとして残しておく。
また必要になったときに速攻で復習できるように。
name: Run Laravel Tests # ワークフロー名。GitHub上で表示される
on:
pull_request: # PR作成・更新時にトリガー
branches: [ develop ] # developブランチへのPRが対象
jobs:
tests: # ジョブ名
runs-on: ubuntu-latest # Ubuntu環境で実行
# -------------------------------
# Laravelの環境変数を定義
# -------------------------------
env:
DB_CONNECTION: pgsql
DB_HOST: 127.0.0.1
DB_PORT: 5432
DB_DATABASE: test_database
DB_USERNAME: test_user
DB_PASSWORD: test_password
# -------------------------------
# PostgreSQLコンテナを起動
# -------------------------------
services:
postgres:
image: postgres:15
env:
POSTGRES_PASSWORD: test_password
POSTGRES_USER: test_user
POSTGRES_DB: test_database
options: >-
--health-cmd pg_isready # DB起動確認コマンド
--health-interval 10s # 10秒ごとにチェック
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432 # ポートをマッピング
# 左はホスト側、右はコンテナ。
# Laravelの5432ポートとPostgreSQLコンテナのポートを繋ぐことを意味する。
steps:
# ① リポジトリをチェックアウト
- uses: actions/checkout@v4
# 現在のブランチやPRの内容を仮想環境にクローンする。
# actions/checkout@v4はGitHubが公開しているリポジトリクローン用のアクション
# ② PHPセットアップ
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.2'
extensions: mbstring, xml, ctype, iconv, intl, pdo_pgsql, curl, gd
# PHPの拡張機能。必要なものを自動でインストールしてくれる。
coverage: none
# shivammathr/setup-php@v2 shivammathurさんのsetup-phpリポジトリ
# ③ Composerのキャッシュ設定
- name: Cache Composer packages
uses: actions/cache@v4
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
# vendorディレクトリにキャッシュを残しておく。
# キーは 実行環境 + -php- + composer.lockファイルの内容をハッシュ化した値
# 「OSとcomposer.lockの中身」が同じなら同じキャッシュを使う
# ④ 依存パッケージをインストール
- name: Install dependencies
run: composer install --prefer-dist --no-progress
# composer.lock に書かれたバージョンで依存関係をインストール
# --prefer-dist 圧縮済みのパッケージ(ZIPなど)を優先してダウンロード
# --no-progress 進行状況バー(パーセント表示)を非表示
# ⑤ テスト用.envをコピー
- name: Copy .env.testing
run: |
cp .env.testing .env
echo "APP_KEY=$(grep '^APP_KEY=' .env | cut -d= -f2-)" >> $GITHUB_ENV
# grep '^APP_KEY=' .env .env ファイルの中から「APP_KEY=」で始まる行を検索
# cut -d= -f2- cutは取り出す。-dは=を区切りにという意味。-f2-分割した2列目から最後まで
# echo "APP_KEY=..." >> $GITHUB_ENV そのキーを $GITHUB_ENV に追記。
# $GITHUB_ENV は「GitHub Actions全体で使える環境変数ファイル」
# この設定を行わないと、APP_KEYが見つからないとエラーが出る。
# ⑥ Actions用に.envを上書き
- name: Override database configuration for GitHub Actions
run: |
sed -i 's/DB_HOST=db/DB_HOST=127.0.0.1/g' .env
sed -i 's/DB_PASSWORD=.*/DB_PASSWORD=test_password/g' .env
sed -i 's/^APP_ENV=.*/APP_ENV=testing/' .env
sed -i 's/^SESSION_DRIVER=.*/SESSION_DRIVER=array/' .env
# これは.env.testingの環境が今回作成した環境のものと異なっている場合に上書きして上のコンテナに併せている。
# ⑦ Laravelの設定キャッシュをクリア
- name: Clear Laravel configuration cache
run: php artisan config:clear
# ⑧ Node.jsセットアップ(ビルド用)
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
# ⑨ npmのキャッシュ設定
- name: Cache node modules
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
# ⑩ npmパッケージインストール
- name: Install NPM packages
run: npm ci
# ⑪ アセットをビルド(ViteやMixなど)
- name: Build assets
run: npm run build
# ⑫ マイグレーション実行
- name: Run database migrations
run: php artisan migrate --env=testing --force
# ⑬ テスト実行!
- name: Execute tests
run: php artisan test
テストでAPP_KEYが見つからないときはとにかく下記を試してほしい。
未来の私へ
echo "APP_KEY=$(grep '^APP_KEY=' .env | cut -d= -f2-)" >> $GITHUB_ENV