地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【GitHub Actions】GitHub Actionsで修正のあったファイルを取得しformatterを実行する

歴史あるリポジトリとかで数千ファイルが既にあったりするケースのリポジトリに対して全体的にformatterをかけたりはしたくないけど直近で修正してるファイルはformatterをかけたいみたいなケースで使える小技。

GitHub scriptを自分たちで書いても良さそうだが既に良さげなActionが公開されているので使ってみる。

jitterbit/get-changed-files

使ってみる

以下の例では修正されたファイルをjsonに入れている。ドキュメントを読んでるとスペース区切りとcsvでも取得できる模様。

      - name: get-changed-files
        id: files
        uses: jitterbit/get-changed-files@v1
        with:
          format: 'json'

あとはjqなりなんだりでシェルスクリプトを書いて修正ファイル分ループさせつつformatterを実行すれば用件は達成できる。

      - name: Run Formatter
        run: |
          pip install --upgrade black
          readarray -t files <<<"$(jq -r '.[]' <<<'${{ steps.files.outputs.added_modified }}')"
          for file in ${files[@]}; do
            if [[ ${file##*.} == "py" ]]; then
              black ${file}
            fi
          done

まとめ

今回はformatterを使った例を書いてみましたが修正ファイルが取れるのでそこから任意のラベルをPRなりに貼ったり他CI用のエンドポイントに渡したりと結構応用的に使えそうな小技の紹介でした。