【GitHub Actions】Linterと単体テストのチェックをサクっと自動化したい

2024-03-15

ストーリー

元々デプロイのワークフローの中でテストも同時に走らせていたが、
PRのマージ前にテストの確認を忘れてしまった場合、デプロイがキャンセルされる。
その場合は追加でhotfixを入れてデプロイされるようにする対応をしていた。

↑どう考えても非効率。
このくらいのチェックは自動化してしまいたいので、マージ前にテストだけ走るようにしてしまいたい。

ついでにLinterのチェックも一緒にしちゃえ!

今回の環境

  • フレームワーク: Nuxt3
  • 単体テスト: Vitest
  • Linter: ESLint

ワークフローの中身

name: Linter & Unit Test Check

on:
  pull_request:
    # PRがOpenになった時、PRにコミットが追加された時
    types: [opened, reopened, ready_for_review, synchronize]

jobs:
  CI:
    name: CI
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [20.x]

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}

      # 依存関係をインストール
      - name: npm install(ci)
        run: npm ci

      # envファイルの作成
      - name: make env
        run: |
          touch ./.env
          echo "GITHUB_ACTIONS=true" >> ./.env

      # .nuxt/生成 & 型チェック
      - name: Run nuxi typecheck
        run: npx nuxi typecheck

      - name: Run ESLint
        run: npx eslint --ext .js,.vue,.ts --ignore-path .gitignore --max-warnings=0 .

      - name: Run test(Vitest)
        id: e2e_test
        run: npm run test

型チェックはnuxi typecheckコマンド。
このコマンドを実行することで、.nuxt/フォルダとその配下のファイルも自動生成される。

ESLint のチェックは--max-warnings=0オプションを追加することで、Warnings があった場合もエラー扱いでコマンドが終了される。
ちなみにreviewdogというサードパーティのアクションを使用することで、より高度なチェックを実施できる。
(勝手にサードパーティ製のアクション入れたくなかったので今回はスルー)

GITHUB_ACTIONSという環境変数を定義していれば、自動的にエラー発生ケースにアノテーションが付与される

https://vitest.dev/guide/reporters#github-actions-reporter

スポンサーリンク