Skip to content

Make the bundle base the full deployable shape for the catalog#10

Merged
scotwells merged 2 commits into
mainfrom
refactor/compose-components-in-base
Jun 30, 2026
Merged

Make the bundle base the full deployable shape for the catalog#10
scotwells merged 2 commits into
mainfrom
refactor/compose-components-in-base

Conversation

@scotwells

@scotwells scotwells commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Makes the published Backstage bundle a complete, self-contained description of how to run the service catalog, so it can be deployed consistently across environments. The bundle owns how Backstage runs (its app, database, routing, and config wiring); each environment supplies only its own values (hostname, sizing, secrets). This is a foundational step toward standing up the Datum service catalog — see datum-cloud/infra#2967.

Why this matters

For the catalog to be deployed and operated reliably, "how to run Backstage" should live in one place — with the app — not be reassembled differently by every environment. Today that deployment shape was only assembled in the throwaway e2e test path. This change promotes it to the bundle's base so:

  • Staging and production deploy the same way — they consume one base and overlay only what genuinely differs, which keeps environments from drifting apart.
  • The app team owns the deployment shape — database, routing, and runtime wiring evolve with the app, not in a separate repo.
  • The end-to-end test exercises what we actually ship — the same base that production consumes.

What changed

  • The database, routing, and app-config building blocks are now composed into the bundle's config/base, so the published ./base is the full deployable unit (Backstage + its CNPG database, the gateway route with no hostname, and the runtime/config wiring).
  • The e2e test path now inherits that shape from base instead of assembling its own, and the e2e environment installs the Gateway API CRDs it needs to apply the route.
  • The reusable building blocks themselves are unchanged — only where they're composed moved.

Validation

End-to-end test (real kind deployment, the gating check) is green: the catalog boots against its database and serves the health and catalog APIs from the same base production will use.


Tracking: datum-cloud/infra#2967

Move component composition from the e2e overlay into config/base so the
base kustomization is the full deployable shape. Downstream deployers
consume ./base and patch only env-specific values.

Key changes:
- config/base now lists the database-cnpg, networking, and app-config
  components, so it renders the CNPG Cluster, HTTPRoute, and the
  Deployment wiring (POSTGRES_* env, wait-for-postgres initContainer,
  app-config volume mount and args)
- e2e overlay drops its redundant components list and inherits them from
  base; it still pins backstage:e2e and generates backstage-app-config

Claude-Session: https://claude.ai/code/session_01NMSkwUcaTmZr7S5XmV2aFG
The e2e overlay now inherits the backstage HTTPRoute from config/base, so
the kind cluster needs the Gateway API CRDs before the overlay is applied.
Without them the server-side apply fails with no matches for kind
HTTPRoute.

Claude-Session: https://claude.ai/code/session_01NMSkwUcaTmZr7S5XmV2aFG
@scotwells scotwells changed the title refactor: compose components in config/base Make the bundle base the full deployable shape for the catalog Jun 30, 2026
@scotwells scotwells requested review from ecv and savme June 30, 2026 21:20
@scotwells scotwells merged commit e0211de into main Jun 30, 2026
2 of 3 checks passed
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.

2 participants