pre-commitをGitHub Actionsで動かす時に、差分のみに適用する
以下のActionを使って、GitHubActionsでpre-commitを動かす場合、
既定では全ファイルに対して適用されます。
pre-commit/action | GitHub
https://github.com/pre-commit/action
このエントリでは、
該当のPullRequestで変更したファイルのみに適用したい場合の設定方法を示します。
# ユースケースとしては、
# リンター類を導入して無かったリポジトリに対して、
# 新規・変更部分から段階的に適用していきたい場合など。
具体的には次のような、GiHubActionsのワークフローで設定出来ます。
.github/workflows/ci.yaml
name: ci
on:
- pull_request
jobs:
unit_test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: fetch base branch
run: git fetch origin ${{ github.event.pull_request.base.ref }}
- uses: pre-commit/action@v3.0.1
with:
extra_args: --from-ref origin/${{ github.event.pull_request.base.ref }} --to-ref HEAD
以降、説明です。
1. pre-commitで変更ブランチ間のみに適用する
pre-commitを変更ブランチ間のみに適用する場合は、
–from-ref, –to-refオプションを使います。
例えば、masterブランチとヘッド間のcommitに適用するなら次のようになります。
pre-commit run --from-ref master --to-ref HEAD
2. GitHubActionsでPullRequestのベースブランチを確認する
GiHubActionでは、環境変数DEPLOYMENT_ENV
のファイルに、
そのActionsを実行した際の各種パラメータが入っているので、
そこからPullRequestのベースブランチを知ることができます。
具体的には、次のように参照できるので、
これをpre-commitの--from-ref
に渡します。
${{ github.event.pull_request.base.ref }}
DEPLOYMENT_ENVから取得できるパラメータは、
GitHubActionsのワークフローに次のようなstepを追加して、動かせばわかります。
- run: cat $GITHUB_EVENT_PATH
3. checkoutアクションの挙動
checkoutアクションは、既定ではgitのヒストリをチェックアウトしません(depth=1)。
actions/checkout | GitHub
https://github.com/actions/checkout
そこで、以下のstepを追加して、
PullRequestのベースブランチとヘッド間の差分を取得します。
- name: fetch base branch
run: git fetch origin ${{ github.event.pull_request.base.ref }}
以上。