feat: pull catalog data and teams from GitHub#13
Merged
Conversation
Wire Backstage to source catalog data directly from GitHub so the portal reflects the org without hand-maintained entity lists. Key changes: - Add the GitHub discovery provider so any repo shipping a catalog-info.yaml is picked up automatically, and the GitHub org provider so org members and teams import as User/Group entities (ownership refs resolve to real teams) - Register both catalog backend modules; they stay dormant until provider config is supplied, so local dev and e2e are unaffected - Document the GitHub App integration alongside the local PAT, using the GITHUB_APP_* credentials the external-secrets component already projects Provider and App config are commented in the base app-config and enabled per-environment from the deploy overlay, matching the datumGateway auth pattern. Claude-Session: https://claude.ai/code/session_01NMSkwUcaTmZr7S5XmV2aFG
ecv
approved these changes
Jul 1, 2026
ecv
approved these changes
Jul 1, 2026
scotwells
marked this pull request as ready for review
July 1, 2026 18:48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Today the catalog is populated from hand-assembled entity lists. That doesn't scale and drifts from reality the moment a team ships something. This connects Backstage to GitHub so the portal reflects the org automatically: services describe themselves in-repo, and ownership comes from real GitHub teams.
This is the "how service descriptors are discovered" and "org/team → owner mapping" work from the catalog bootstrap effort.
What this enables
catalog-info.yamlis picked up and kept in sync, no central list to maintain. This is what makes the "each service owns its own descriptor" model viable.User/Groupentities, soowner:on a component resolves to an actual team with members instead of a placeholder group.How it's wired
catalog.providers.*and stay dormant until that config is supplied, so local dev and e2e are unchanged.app-configand are enabled per-environment from the deploy overlay — the same pattern as thedatumGatewayauth provider.external-secretscomponent (backstage-github-app→GITHUB_APP_*).Validation
backstage-cli config:check— passesyarn tsc— passesyarn workspace backend lint— passesEnablement (follow-up)
Turning discovery on in an environment is a config flip in the deploy overlay (uncomment the
catalog.providersandintegrations.github.appsblocks). That is intentionally a separate step so this change can land without altering any running environment; enable it once the GitHub App is installed on the org.Notes
Discovery only pulls repos that contain a
catalog-info.yaml; the generated/derived slice (deployed state, cross-system edges) continues to come from the infra-side catalog bundle. The two sources merge by entity ref.Part of the catalog bootstrap: datum-cloud/infra#2967
Builds on #1 (scaffold), #10 (deployable bundle base), #11 (gateway sign-in)