歴史あるリポジトリとかで数千ファイルが既にあったりするケースのリポジトリに対して全体的にformatterをかけたりはしたくないけど直近で修正してるファイルはformatterをかけたいみたいなケースで使える小技。
GitHub scriptを自分たちで書いても良さそうだが既に良さげなActionが公開されているので使ってみる。
使ってみる
以下の例では修正されたファイルを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用のエンドポイントに渡したりと結構応用的に使えそうな小技の紹介でした。