feat(ai): AIプロバイダ統一インターフェース化(OpenAIを実装層へ移設) #45
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: [push, pull_request] | |
| # 同梱の docker-compose.yml で a-blog cms + MySQL を起動し、コンテナ(appleple/acms オールインワン | |
| # イメージ)内でチェックを回す。イメージタグは {acms}-php{php} 形式で両バージョンを表すため、phpunit | |
| # ジョブは ACMS_IMAGE_TAG(docker-compose.yml が参照)を matrix で掃引する。 | |
| # | |
| # ブランチ保護では、個々の matrix セルではなく集約ジョブ "ci" を必須チェックにすること。これにより | |
| # a-blog cms のバージョンを増やしてもルールセットを編集せずに済む。 | |
| jobs: | |
| # バージョンレンジ検査。phpcs(PHPCompatibility testVersion 8.1-8.5)と phpstan(phpVersion | |
| # 8.1-8.5)はランタイム PHP に依らずレンジ全体を解析するため 1 回でよい。DB は不要。 | |
| quality: | |
| name: Lint & Static analysis | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Start a-blog cms + MySQL | |
| run: docker compose up -d --wait | |
| - name: Install dependencies | |
| run: docker compose exec -T acms bash -lc "cd /workspace && composer install --no-interaction --no-progress" | |
| - name: Coding standards (PHP_CodeSniffer) | |
| run: docker compose exec -T acms bash -lc "cd /workspace && composer lint" | |
| - name: Static analysis (PHPStan) | |
| run: docker compose exec -T acms bash -lc "cd /workspace && composer analyse" | |
| - name: Show a-blog cms logs on failure | |
| if: failure() | |
| run: docker compose logs acms | |
| # 対応する PHP(と a-blog cms)バージョンごとに PHPUnit を実行する。 | |
| phpunit: | |
| name: PHPUnit | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| # 新しい a-blog cms バージョンはここに追加する(例: '3.3')。特定の {acms}-php{php} イメージが | |
| # 未公開なら `exclude:` でその組み合わせを外す。ablogcms/testing-framework は a-blog cms のマイナー | |
| # に追随するため、各セルで {acms}.* に固定する。 | |
| acms: ['3.2'] | |
| php: ['8.1', '8.2', '8.3', '8.4', '8.5'] | |
| env: | |
| ACMS_IMAGE_TAG: ${{ matrix.acms }}-php${{ matrix.php }} | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Start a-blog cms ${{ matrix.acms }} on PHP ${{ matrix.php }} | |
| run: docker compose up -d --wait | |
| # テスト基盤を検証対象の a-blog cms バージョンに合わせて導入する。composer.lock をコミットして | |
| # いるため `composer install` だとロック済みバージョンが入り、matrix の制約が無視される。そこで | |
| # `composer require` で制約を適用する。matrix.acms はワークフロー定義の信頼値。シングルクォートで | |
| # シェルの ".*" グロブを防ぐ。 | |
| - name: Install dependencies (testing-framework matched to a-blog cms ${{ matrix.acms }}) | |
| run: docker compose exec -T acms bash -lc "cd /workspace && composer require --dev --no-interaction --no-progress 'ablogcms/testing-framework:${{ matrix.acms }}.*'" | |
| - name: Create the test database schema | |
| # acms-create-database は単体 CLI で phpunit.xml の <env ACMS_ROOT> を読まない。オールインワン | |
| # イメージの本体コアは /var/www/html にあるため明示的に渡す。 | |
| run: docker compose exec -T acms bash -lc "cd /workspace && ACMS_ROOT=/var/www/html vendor/bin/acms-create-database" | |
| - name: Run PHPUnit | |
| run: docker compose exec -T acms bash -lc "cd /workspace && vendor/bin/phpunit" | |
| - name: Show a-blog cms logs on failure | |
| if: failure() | |
| run: docker compose logs acms | |
| # JS 側: 型チェック + Vite ビルド + Vitest。管理画面 UI は React/TypeScript のため CI で検証する。 | |
| js: | |
| name: TypeScript build & test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Set up pnpm | |
| uses: pnpm/action-setup@v6 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version-file: '.node-version' | |
| cache: pnpm | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Build (tsc + vite) | |
| run: pnpm run build | |
| - name: Test (vitest) | |
| run: pnpm run test | |
| # 必須ステータスチェックはこの 1 つだけにする。quality / phpunit(全 matrix セル)/ js がすべて成功した | |
| # ときだけ緑になる。ブランチ保護はこの "ci" ジョブを必須にすること。 | |
| ci: | |
| name: CI | |
| runs-on: ubuntu-latest | |
| needs: [quality, phpunit, js] | |
| if: always() | |
| steps: | |
| - name: Verify required jobs succeeded | |
| run: | | |
| echo "quality=${{ needs.quality.result }} phpunit=${{ needs.phpunit.result }} js=${{ needs.js.result }}" | |
| if [ "${{ needs.quality.result }}" != "success" ] || [ "${{ needs.phpunit.result }}" != "success" ] || [ "${{ needs.js.result }}" != "success" ]; then | |
| echo "::error::A required job failed." | |
| exit 1 | |
| fi | |
| echo "All required jobs passed." |