bright-room GitHub組織のリポジトリを管理するためのTerraform設定です。
このリポジトリは、Terraformを使用してbright-room GitHub組織内のパブリックリポジトリのライフサイクルを管理します。リポジトリの作成、Issueラベルの設定、ブランチ保護ルールセット、チームアクセス権限、Organization Secretの割り当てを扱います。
組織レベルのリソース(メンバー、チーム、シークレット、メタリポジトリ)については、organization-structure-administrator を参照してください。
| リソース種別 | 説明 |
|---|---|
| リポジトリ | 設定、説明、トピック付きのパブリックリポジトリ |
| Issueラベル | 標準化されたラベルセット(Priority、Type、Close) |
| ブランチ保護 | 承認レビュー必須のデフォルトブランチルールセット |
| タグ保護 | タグの作成/更新/削除に対するカスタムルールセット |
| チームアクセス | リポジトリレベルのチーム権限(push、maintain、admin) |
| Organization Secret | リポジトリごとの組織レベルシークレットへのアクセス付与 |
organization-structure/
├── .github/workflows/
│ ├── on-pull-request.yml # PR時のフォーマットチェック、バリデーション、プラン
│ └── on-merge.yml # mainマージ時の自動適用
├── terraform/
│ ├── _terraform.tf # プロバイダーとバックエンドの設定
│ ├── _data.tf # データソース(チーム参照)
│ ├── _locals.tf # Organization Secretマップ
│ ├── repository_*.tf # 管理対象リポジトリごとに1ファイル
│ └── modules/
│ └── repository/ # 再利用可能なリポジトリモジュール
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ ├── data.tf
│ ├── locals.tf
│ └── terraform.tf
└── README.md
-
terraform/repository_<name>.tfファイルを新規作成します(リポジトリ名はハイフン、ファイル名はアンダースコアを使用):module "repository_example" { source = "./modules/repository" name = "example-repo" description = "リポジトリの説明" topics = ["topic1", "topic2"] organization_secret_names = [ # 必要に応じてOrganization Secret名を追加 # 例: "CHLOE_CHAN_APP_PRIVATE_KEY", "PGP_SIGNING_KEY" ] }
-
(任意)タグ保護や追加のブランチルールが必要な場合、カスタムルールセットを追加:
module "repository_example" { source = "./modules/repository" # ... 基本設定 ... custom_rulesets = [ { name = "tag-protection" target = "tag" tag_pattern = "*" creation = true update = true deletion = true bypass_actors = [] # 空で全員ブロック、または特定のアクターを追加 } ] }
-
プルリクエストを作成します。CIパイプラインが
terraform fmt、terraform validate、terraform planを自動実行します。 -
レビュー・承認後、
mainにマージします。Terraform applyが自動実行されます。
- Terraform v1.14.7以上
- tfstate backend として S3 互換 API 経由で利用する Cloudflare R2 バケット
github-organization-tfstates(br-cloudflare-terraformで管理) - chloe-chan-botのGitHub App認証情報(
CHLOE_CHAN_APP_IDvariable、CHLOE_CHAN_APP_PRIVATE_KEYsecret) - 上記バケットにスコープされた R2 の S3 互換認証情報(
GH_ORGANIZATION_TFSTATE_AWS_ACCESS_KEY_ID/GH_ORGANIZATION_TFSTATE_AWS_SECRET_ACCESS_KEY)
| トリガー | ワークフロー | ジョブ |
|---|---|---|
| プルリクエスト | on-pull-request.yml |
check-code-style(fmt)→ validate → plan(PRコメントにプランを投稿) |
| mainへのマージ | on-merge.yml |
apply(自動適用) |
両ワークフローはTerraform v1.14.7を使用し、CHLOE_CHAN_APP_PRIVATE_KEY、CHLOE_CHAN_APP_ID、GH_ORGANIZATION_TFSTATE_AWS_ACCESS_KEY_ID、GH_ORGANIZATION_TFSTATE_AWS_SECRET_ACCESS_KEY が必要です。