Worklog: gcp-infra (20/03/26)


Done

  • Updated Backstage to version 1.49.0
  • Updated Backstage to use Postgres instead of SQLite for local development. With this, no code changes are needed.
  • Added docker compose to spin up postgres.
  • Created the bare minimum scaffold template.
  • Tested the scaffold and integration with github E2E, it worked.
  • Added template versioning: backstage.io/template-version annotation on templates; scaffolder.backstage.io/template: <name>@<version> written into scaffolded catalog-info.yaml
  • Created sync-template: syncs common-assets and template skeleton to existing components via PR
  • Designed catalog entity model: Domain/System/Component hierarchy per client + internal + personal domains
  • Built new-client-project template: creates client infra repo (Terraform + WIF GitHub Actions) and opens catalog PR on gcp-infra
  • Extended config:get action with GCP infrastructure values (WIF provider, tf-admin-sa, state bucket, budget topic)
  • Deployed to Cloud Run + terraform apply

Next steps

  • Broken auth after migration to v1.49.0
  • Task 7.2 — Switch production catalog to GitHub provider (@backstage/plugin-catalog-backend-module-github) so new client YAML files merged to gcp-infra are auto-discovered without a Backstage redeploy. Register provider in index.ts, configure in app-config.production.yaml with 30min polling on backstage/catalog/clients/*.yaml
  • Task 7.1 — Configure TechDocs for production: switch to builder: external, provision GCS bucket for pre-built docs, configure publisher.type: googleGcs in app-config.production.yaml, add Cloud Build step to run techdocs-cli generate and publish to GCS on each deploy
  • sync-template Option 2 — Bulk sync via custom backend action + custom EntityVersionPicker field extension (see .FEATURES/backstage-idp-implementation.md → “Bulk sync-template”)
  • new-client-project: collect billing account in the template UI and bake it into the workflow (currently set manually as GCP_BILLING_ACCOUNT GitHub Secret post-creation)