pre-commitの外部リポジトリhookを使って設定を簡略化しつつ色々な事前チェックを済ませてみる

pre-commitの外部リポジトリhookサポートを使って、既存設定を外部リポジトリ呼び出しにしてみました。
2020.01.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

先日、pre-commitにてcircleciの手設定validateを行ってみましたが、pre-commitのhookサポート済みリポジトリにcircleci-config-validateを含んだリポジトリが存在していることを知りました。

pre-commitを利用してCircleCIのConfig Validateを楽に済ませてみる

外部リポジトリからの読み込みにて細かい設定を省いてしまうことでメンテナンスコストを減らせるのですが、上記エントリー記述時にはそこまで踏み込んでいない状態でした。既存の手作業で行っていた設定についても外部リポジトリの読み込みにて対処可能なものがあり、今回それらを纏めて設定しなおしてみました。

hookサポートのリポジトリ

数と種類は相当に存在し、大体探すことで見つかるのではないかなというところです。

pre-commit

今回はこの中から、circleci-config-validateflake8cfn-python-lintの設定を取り込んでみました。

外部hookの指定

基本はidのみを指定します。他にもfileslanguageなどありますが、リポジトリ側で各ライブラリの推奨初期値が設定されており、必要に応じてkeyを指定して上書きする形になっています。

circleci-config-validate

ファイルパス等が独自になっていなければ、idを追記するだけで完了します。リポジトリのリリースバージョンだけ確認しておきましょう。今回は0.0.16を使っています。

-   repo: https://github.com/syntaqx/git-hooks
    rev: v0.0.16
    hooks:
    -   id: circleci-config-validate

syntaqx/git-hooks: A collection of git hooks for use with pre-commit

flake8

設定に初期から入っているhttps://github.com/pre-commit/pre-commit-hooksに追記します。特記すべき事柄はありませんが、チェックしたいパスを限定したい場合はfilesにて指定します。

-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v2.4.0
    hooks:
    -   id: trailing-whitespace
    -   id: end-of-file-fixer
    -   id: check-added-large-files
    -   id: flake8
        files: '(src|tests)/*'

cfn-python-lint

CFnのファイルパス指定が必要です。YAMLにてテンプレートを記述している場合は、CFnの独自タグによるエラーを抑えるためcheck-yamlのオプションに--unsafeを指定しましょう。

repos:
-   repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v2.4.0
    -   id: check-yaml
        args: ['--unsafe']
-   repo: https://github.com/aws-cloudformation/cfn-python-lint
    rev: v0.26.3
    hooks:
    -   id: cfn-python-lint
        files: 'path/to/cfn/dir/.*\.(json|yml|yaml)$'

aws-cloudformation/cfn-python-lint: CloudFormation Linter

あとがき

外部リポジトリを利用したhookは、大体のケースにおいて必要最低限の設定が担保されるというメリットがあり、総じて設定の手間が省けます。ただ、設定されていない項目を確認するためにも、一度はリポジトリ内での設定値に目を通しておきましょう。