GitHub Actionsでpre-commitを使う際に特定のhooksをスキップさせる

2023/12/21に公開

lintやtypo検知などをpre-commitで行っており、かつGitHub Actionsでもpre-commit/actionを使ってチェックしていたところ、素直に使うだけだと全てのhooksが走ってしまい、ローカルでのみ実行したいhookがあったり、jobを分割したりするのに困った。

pre-commit.ciというのを使うと.pre-commit-config.yamlにスキップの設定などを書けて嬉しいらしいが、「特定のhooksをスキップさせる」ためだけに使うには高機能すぎるし、GitHub Appのインストールが必要なのも悩ましい。

だが、#configuration-skipの項目をよく見ると「this is equivalent to running SKIP=pylint pre-commit ...」という記述がある。
そういえばそんな環境変数あったな... と思って以下のようにした。

- name: pre-commit
  uses: pre-commit/action@v3.0.0
  env:
    SKIP: foo

これでfooというIDのhookはスキップされるようになる。複数ある場合はfoo,bar のように繋げれば良い。

とりあえずはこれで解決だが、hookのIDが.pre-commit-config.yamlを超えてWorkflowのyamlにも飛んで行くのが気持ち悪かったり、ログにデカデカとSkippedと表示されたり、若干モヤモヤする。本当なら自分でactionを書いた方がいいのかもしれない。

Discussion