0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsでLaravelのテストを自動化するYAML例とAPP_KEYが見つからない君へ

Posted at

今日は自分で作成した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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?