gh-infra: GitHub リポジトリの設定を YAML で宣言し、plan → apply で反映する
gh の拡張機能。Terraform のように差分を見てから適用できるが、HCL もステートファイルも要らない。GitHub 上の現在の設定そのものを「正」として毎回比較する。
どんなときに使う?
- 多数のリポジトリで、説明・トピック・機能(Issues / Wiki / Discussions)・マージ方式・ブランチ保護などをそろえたいとき
- リポジトリ設定の変更を PR でレビューしたいとき
- Terraform の GitHub プロバイダはステート管理が重いと感じるとき
やり方
- インストール
gh extension install babarot/gh-infra - 既存リポジトリの設定を YAML に書き出す
gh infra import babarot/my-project > repos/my-project.yaml - YAML を編集する
yaml
apiVersion: gh-infra/v1 kind: Repository metadata: name: my-project owner: babarot spec: description: "My awesome project" visibility: public topics: [go, cli] features: wiki: false discussions: true - 差分を見て反映する
gh infra plan repos/ # 変更点を表示 gh infra apply repos/ # 確認プロンプトのあと適用validateで YAML の構文とスキーマも確認できる。
複数リポジトリに同じ設定をそろえるなら kind: RepositorySet を使い、1 ファイルで多数のリポジトリを管理できる。
運用パターン
- 中央管理: 設定専用リポジトリに YAML を集め、
RepositorySetで組織全体をそろえる - 各リポジトリで自己管理:
.github/infra.yamlを置き、main へのマージ時に GitHub Actions でgh infra apply .github/infra.yaml --auto-approveを流す
注意点
- ステートがないぶん、YAML に書いていない設定は管理対象外。削除の扱いは事前に
planで確認する applyに使うトークンには、対象リポジトリの管理権限が必要。Actions のGITHUB_TOKENで足りない設定もありうる