Open6
GitHubのCODEOWNERSを宣言的に管理する方法を考える
前提:
- GitHubのTeamは多くの場合組織に紐づいている
- 組織は往々にして再編成される = Teamの名称も立ち位置も変わる
- プロダクトは分割と結合する = プロダクトのオーナーを持つチームも変わる
GitHubのAdminRoleやMaintainerRoleはAPIからアクセスが可能であり、IaCを経由することで
組織のIdPなどからRoleの割り当てやTeamの構成につなげることが可能
属人化を避ける意味で、CODEOWNERSはバイネームで記述することは推奨されていないはず
GitHubTeamで記述されるのを良しとしている
だけど、Teamは構成が変わる。でもCODEOWNERSはリポジトリのファイルとして構成されるので各リポジトリに対してすべて書き換えが発生する
つまり
組織は往々にして再編成される = Teamの名称も立ち位置も変わる (宣言的に変更できる)
プロダクトは分割と結合する = プロダクトのオーナーを持つチームも変わる(宣言的に変更できない)
そこで、宣言的な記述からファイルを生成し、GitHubの特定のリポジトリのパスへPushする仕組みがあれば、疑似的にIaCにおけるAPIのようなインターフェースとして利用できるのでは
TerraformのExternal Data Sourceを利用すれば疑似的なCODEOWNERSファイルの生成器をつくれそう
TerraformのProvisionerを利用して gh apiを呼び出してファイルのpushができれば達成できそう