Skip to content

Latest commit

 

History

History
106 lines (81 loc) · 4.77 KB

File metadata and controls

106 lines (81 loc) · 4.77 KB

organization-structure

English version

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

リポジトリの追加手順

  1. 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"
      ]
    }
  2. (任意)タグ保護や追加のブランチルールが必要な場合、カスタムルールセットを追加:

    module "repository_example" {
      source = "./modules/repository"
    
      # ... 基本設定 ...
    
      custom_rulesets = [
        {
          name          = "tag-protection"
          target        = "tag"
          tag_pattern   = "*"
          creation      = true
          update        = true
          deletion      = true
          bypass_actors = []  # 空で全員ブロック、または特定のアクターを追加
        }
      ]
    }
  3. プルリクエストを作成します。CIパイプラインが terraform fmtterraform validateterraform plan を自動実行します。

  4. レビュー・承認後、main にマージします。Terraform applyが自動実行されます。

前提条件

  • Terraform v1.14.7以上
  • tfstate backend として S3 互換 API 経由で利用する Cloudflare R2 バケット github-organization-tfstatesbr-cloudflare-terraform で管理)
  • chloe-chan-botのGitHub App認証情報(CHLOE_CHAN_APP_ID variable、CHLOE_CHAN_APP_PRIVATE_KEY secret)
  • 上記バケットにスコープされた R2 の S3 互換認証情報(GH_ORGANIZATION_TFSTATE_AWS_ACCESS_KEY_ID / GH_ORGANIZATION_TFSTATE_AWS_SECRET_ACCESS_KEY

CI/CDパイプライン

トリガー ワークフロー ジョブ
プルリクエスト on-pull-request.yml check-code-style(fmt)→ validateplan(PRコメントにプランを投稿)
mainへのマージ on-merge.yml apply(自動適用)

両ワークフローはTerraform v1.14.7を使用し、CHLOE_CHAN_APP_PRIVATE_KEYCHLOE_CHAN_APP_IDGH_ORGANIZATION_TFSTATE_AWS_ACCESS_KEY_IDGH_ORGANIZATION_TFSTATE_AWS_SECRET_ACCESS_KEY が必要です。