🀄

コードを自動修正して、pushしてくれるGitHub Actions

2024/03/23に公開

問題

複数人で開発していると、ある人がコミットしたコードにおいて、整形されていなかったり、文法不備が発生する事象が起きる。

解決策

文法チェック(Lint)して、フォーマッターかけて、プッシュしてくれるCIを作った。
特定人のローカル環境でLintCheckやFormatterにヌケモレがあっても大丈夫。
ミソは、botのgitアカウントを設定して、もし変更すべきコードがない場合はgit pushしない所。
botによって、変更されたコードをpullし忘れて作業するとコンフリクト起きる可能性がある。
なので、各個人のエディタがVSCode統一できるなら.vscodeに設定入れておくでもよいかも。

huskyという選択肢もあるが、初回セットアップ作業が発生し、コミットの都度、実行されるのが若干時間を要してダルい勢がいたりする。

name: Lint,Format,Test

on:
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.ref }}
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: npm
      - uses: actions/cache@v4
        id: node_modules_cache_id
        env:
          cache-name: cache-node-modules
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
      - run: echo '${{ toJSON(steps.node_modules_cache_id.outputs) }}'
      - if: ${{ steps.node_modules_cache_id.outputs.cache-hit != 'true' }}
        run: npm ci
      - run: npm ls --depth=0
      - name: lint-fix
        run: npm run lintfix
      - name: Push changes if existing modified files
        id: push-changes
        run: |
          git config --global user.email "bot@example.com"
          git config --global user.name "bot"
          git remote set-url origin https://x-access-token:${{secrets.GITHUB_TOKEN}}@github.com/${{github.repository}}
          git diff --quiet --exit-code || git commit -am "Automated changes"
          if [ $? -eq 0 ]; then
            echo "No changes to commit"
          else
            git push
          fi
      - name: Test
        run: npm test

        

Discussion