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

circleci cliによるconfig validateを意識せずとも忘れないようにしたいため、pre-commit hookに取り入れてみました。
2020.01.10

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

はじめに

CircleCIのconfigファイルを編集した場合に、確実に行いたいのがcircleci config validateコマンド。実際には編集した後の安堵感からすっかり忘れがちです。

commitする前迄に行えれば問題ないとすると、pre-commit hookに混ぜてしまえば悩みも無くて一番良さそうです。手軽く手堅く設定するため、Python製のpre-commitを用いて試してみました。

Python製のツールpre-commitでGitのpre-commit hookを楽々管理!!

CircleCI CLI用の設定

.pre-commit-config.yamlへ以下の設定を追記するだけで完了です。

-   repo: local
    hooks:
    -   id: circleci_config_validate
        name: circleci_config_validate
        entry: circleci config validate
        language: python_venv
        types: [file]

失敗をキャッチできるか確認するため、circleciの設定ファイルに手を加えた状態でコミットしてみます。

% git add .circleci/config.yml
% git commit
[WARNING] Unstaged files detected.
[INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Initializing environment for local.
[INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
[INFO] Installing environment for local.
[INFO] Once installed this environment will be reused.
[INFO] This may take a few minutes...
Trim Trailing Whitespace.................................................Passed
Fix End of Files.........................................................Passed
Check Yaml...............................................................Passed
Check for added large files..............................................Passed
circleci_config_validate.................................................Failed
- hook id: circleci_config_validate
- exit code: 255

Error: Config does not conform to schema: {:workflows {:cicd_pipeline {:jobs [{:test {:python-version disallowed-key}}

意図通りの結果になりました。

あとがき

コミット時に少し時間がかかりますが、fix typoのコミットが大量に積まれるよりはよいかなと思います。

今回はvalidateのみ行っていますが、必要に応じてcircleci update checkも含める等、より手軽く手堅くする方法を加えてみるのも良いかもしれません。