Worklog: gcp-infra (19/03/26)
Done
- Updated bootstrap script references throughout the repo (
seed/bootstrap.sh→scripts/seed-bootstrap.sh,scripts/control-plane-bootstrap.sh) - Added Workload Identity Federation (WIF) to the control plane Terraform (
terraform/modules/control-plane/wif.tf): pool, GitHub OIDC provider, and IAM binding for tf-admin-sa - Added
iamcredentials.googleapis.comandsts.googleapis.comto control plane API list - Added
workload_identity_providerandtf_admin_sa_emailoutputs to control plane module and environment - Diagnosed and fixed Backstage production database auth error (Supabase pooler requires
postgres.<projectref>username format; stale Cloud Run env vars from previous revision) - Designed client project architecture: each client gets its own GitHub repo scaffolded by Backstage (no per-client directories in
gcp-org) - Read and planned implementation of Backstage IDP spec (
System Specification: Backstage.md) - Fixed Backstage local dev environment:
- SQLite config: changed
connection: './local-dev.sqlite'→connection.directory: './local-dev-db'(new backend system requirement) - Commented out
plugin-search-backend-module-pginpackages/backend/src/index.ts(crashes backend without Postgres) - Fixed catalog path:
./catalog/user.yaml→../../catalog/user.yaml(relative topackages/backend/) - Configured Google OAuth for local dev (
auth.environment: development, separate OAuth client) - Confirmed full sign-in flow working end-to-end
- SQLite config: changed
- Created
.LEARNINGS/backstage-local-dev-setup.mdwith all local dev gotchas documented - Created
.FEATURES/backstage-idp-implementation.mdwith remaining IDP roadmap - Updated
backstage/README.mdwith full local dev guide
Next steps
[ ] Set up local Postgres (Docker) to match production — re-enable plugin-search-backend-module-pg and switch app-config.local.yaml database to Postgres. packages/backend/src/index.ts has a TODO marking the commented-out line.
- Task 2 — Update catalog ownership model (
group:internal, rename fromadmins) - Task 3 — Create MVP
common-assets/skeleton (.gitignoreonly for now) - Task 4 — Build bare-minimum scaffold template (prove pipeline end-to-end)
- Task 5 — End-to-end scaffold test (repo creation + catalog registration)
- Task 6 — Build new-client-project scaffold template (GCP platform bootstrap)
- Task 7 — Deploy to Cloud Run + update CLAUDE.md