Memento memo.

Today I Learned.

GHRC: GitHub Repositoryの設定を宣言的に管理するツールを作った

f:id:shotat_jp:20190917215922p:plain

ghrc っていうCLIツールをGoで書いた。

github.com

機能としてはRepositoryのLabel, Protected branch, Merge options, etc. の設定をYAMLで宣言的に管理できる。

既存の設定を ghrc import して .ghrc.yaml というファイルに書き込み、YAMLをシュッと書き換えて ghrc apply する、みたいな使い方ができる。 Terraformっぽくplanコマンドも実装したので ghrc plan でdry-runも可能。

似たツールとしてはTerraformのGitHub Providerや github-labeler が近い。 しかし、Terraformだとややセットアップが面倒なのと、github-labeler は想定しているユースケースが違った。

ghrcではmerge時のオプション( mergeボタンの Squash and merge とか選ぶやつ)や、Protected branchを管理できるようにした。

チーム開発時にcommitが汚い開発者(自分はこのタイプ)が適当にmaster mergeすると、masterブランチが大変なことになってしまう(許さない)。 そういった事態を避けるため、あるいは特殊なCI/CD上の都合で Squash and merge を強制したい場合があり、これらをコード(といってもYAML)として管理したいと思った。

Repositoryの設定についてチームのルールとして合意を取るだけではなく、各リポジトリで管理し、Pull Request & CI/CDベースで変更できるようにすると開発ルールが良い感じに統一できて嬉しい。

また、Protected Branchについては設定を忘れていてmasterに誤爆pushするケースが極稀にあるので一緒に設定できるようにした。 こちらもコードレビューのルール等をコードで管理できるようになるので良いんじゃないかと思った。

というわけで気が向いたら使って下さい。