Skip to content

chore(deps-dev): 開発専用パッケージを最新へ更新(phpcs 4 / TypeScript 7 ほか) #27

chore(deps-dev): 開発専用パッケージを最新へ更新(phpcs 4 / TypeScript 7 ほか)

chore(deps-dev): 開発専用パッケージを最新へ更新(phpcs 4 / TypeScript 7 ほか) #27

Workflow file for this run

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."