CIをスキップするコミットメッセージをよく間違えるのでcommitフックでチェックする
CIサービスを使っていて「このコミットはドキュメント変えただけだからCI走らせなくていいや」みたいない場合、コミットメッセージに[ci skip]
と含めてあげると、CI実行をスキップしてくれます。
ただ、このマジックワードをうろ覚えなので、いつもskip-ci
とか微妙にミスった内容でコミットしてしまうことがありました。
なので、gitのコミットフックでチェックしてみます。
以下の内容で .git/hooks/commit-msg
というファイルを用意してあげればフックが動きます。ファイルに実行権限を付け忘れないように注意。
#!/usr/bin/env node // Check typo for "[ci skip]". // FYI: https://srz-zumix.blogspot.com/2018/03/ci-ci-20183.html const fs = require("fs"); const msg = fs.readFileSync(process.argv[2], { encoding: "utf8" }); const regexp = /\[?(skip[\s-]ci|ci[\s-]skip)\]?/gmi; const expected = ["[ci skip]", "[skip ci]"]; const matched = msg.match(regexp); if (matched && matched.length > 0 && !expected.includes(matched[0])) { console.error("Not commited!"); console.error(`Use "[ci skip]" instead of "${matched[0]}", because it's wrong or not generaly.`); process.exit(1); }
正規表現でそれっぽい文字列を引っ掛けて、各CIサービスで対応しているマジックワード([ci skip]
または [skip ci]
)ではなかったらエラー扱いでコミットさせません。
慣れているJavaScriptで書くためにNode.jsで実行するスクリプトにしましたが、普通のshやRubyとかPearlとか好きな言語で書いてもいいと思います。
参考
- CIサービスの自動ビルドをスキップする方法まとめ - Qiita https://qiita.com/vmmhypervisor/items/f10c77a375c2a663b300
- ブログズミ: [CI] 各種 CI サービスのビルドスキップコメントまとめ (2018/3) https://srz-zumix.blogspot.com/2018/03/ci-ci-20183.html