Skip to content

Org チームの Terraform 管理とプロフィールメンバー一覧の自動同期を導入 - #4

Open
Shion1305 wants to merge 1 commit into
mainfrom
shion/terraform-team-management
Open

Shion1305 wants to merge 1 commit into
mainfrom
shion/terraform-team-management

Conversation

@Shion1305

Copy link
Copy Markdown
Member

概要

Org のチーム管理とプロフィールページの自動更新基盤を導入します。

  • terraform/: GitHub の team とメンバーシップをコード管理(既存 team は imports.tf で import)
  • scripts/ + .github/workflows/: team メンバーを取得し、Org プロフィールのメンバー一覧を自動再生成
  • profile/README.md: メンバー一覧を自動生成ブロック化(Core Members / OB・OG 含む全メンバーの2段構成)

レビューと修正

マルチエージェントレビュー(29エージェント)を実施し、指摘された以下の問題を修正済みです。

問題 修正
fetched_at が毎回更新され、メンバー変更がなくても6時間ごとに無意味な同期PRが作られ続ける fetched_at を廃止。メンバー変更時のみ差分が発生
tfcmt のコメント投稿と gh workflow run に App token を使用しており、repo 権限がなく 403 で失敗する Actions 標準の GITHUB_TOKEN を使用(workflow_dispatchGITHUB_TOKEN 起動でも run が作られる)
次年度 team をメンバー未定のまま先行作成すると sync が毎回失敗する 「メンバーが1人以上いる最新年度」を採用するよう変更
committed YAML のキー順・インデントがスクリプト出力と不一致で、初回実行時にノイズ差分が出る スクリプトの出力と byte 一致するよう data/core_members.yaml を再生成
gh api 失敗時に stderr が握りつぶされ、原因(403/404/rate limit)が CI ログに出ない stderr を capture せず CI ログへ流すよう変更
re.sub の置換文字列にメンバー名を直接埋め込んでおり、\1 等を含む入力で誤動作 lambda 置換に変更
.gitignoreterraform/*.tfplan が CI の生成物 terraform/tfplan にマッチしない パターン修正(plan ファイルには sensitive な token が含まれ得る)

また、live の team と locals.tf を突き合わせ、active-member-2026 に実在する MTowalocals.tf に漏れていたのを修正しました(このまま apply すると team から削除されるところでした)。

検証済み

  • uv run scripts/render_members.py --check
  • terraform fmt -check / terraform validate ✅(lock ファイルは linux_amd64 ハッシュ込みでコミット)
  • actionlint
  • import ID と live の team ID の一致を確認 ✅(2022/2023/2024 のメンバーは locals と完全一致)
  • 置換エスケープ・年度選択ロジックの単体テスト ✅

⚠️ マージ前に確認してください

  1. Sakiho-Ishii は現在 org メンバーではありません(招待も未送信)。locals.tf の 2025 に含まれているため、apply 時に org への招待が送信されます。意図していない場合は locals.tf から削除してください(招待が承認されるまで plan に差分が出続けます)。
  2. apply で team がリネームされます: active-member-YYYYcore-members-YYYYmembers2022/2023core-members-2022/2023。旧 slug を参照している設定(他リポジトリの CODEOWNERS・branch protection 等)があれば壊れます。
  3. all-members team には現在 Shion1305 のみが所属しており、apply で15名が追加されます(意図どおりのはず)。
  4. リポジトリ secrets が未設定に見えますTF_GH_APP_ID / TF_GH_APP_PRIVATE_KEY / SYNC_GH_APP_ID / SYNC_GH_APP_PRIVATE_KEY)。org レベルで設定済みか確認してください。未設定だと tf-plan がこの PR 上で失敗します。
  5. 初回 apply は import + リネーム + メンバー変更を含む大きな差分になるため、tf-plan のコメントを必ず確認してください。

今後の改善候補(このPRでは未実施)

  • github_team / github_team_members / import ブロックの年度ごとのコピペを for_each + map で一本化(Terraform 1.7+ で import の for_each が利用可能。新年度追加が1行で済むようになる)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant