From c1eb809f8b60f82bcca2ed81279e16bfd5f7b4b8 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Wed, 14 Aug 2024 18:23:30 +0200 Subject: [PATCH] fix(events,github): reliably extract org name Use `$.organization.login` instead of `$.repository.organization`. The latter is set at `push` events, but not at events of i.e. type `repository`. The replacement is available at both of them. Fixes: #25951 Signed-off-by: Patrick Jungermann --- .changeset/warm-moles-appear.md | 7 +++++++ .../src/providers/GithubEntityProvider.test.ts | 11 ++++++++--- .../src/providers/GithubEntityProvider.ts | 8 ++++---- 3 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 .changeset/warm-moles-appear.md diff --git a/.changeset/warm-moles-appear.md b/.changeset/warm-moles-appear.md new file mode 100644 index 0000000000..66ad1b9cf9 --- /dev/null +++ b/.changeset/warm-moles-appear.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Fix GitHub `repository` event support. + +`$.repository.organization` is only provided for `push` events. Switched to `$.organization.login` instead. diff --git a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts index 002b2bbfd1..6382391610 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts @@ -702,6 +702,9 @@ describe('GithubEntityProvider', () => { const event = { ref: options?.ref ?? 'refs/heads/main', repository: repo as PushEvent['repository'], + organization: { + login: organization, + }, created: true, deleted: false, forced: false, @@ -963,7 +966,6 @@ describe('GithubEntityProvider', () => { url: 'https://github.com/test-org/test-repo', default_branch: 'main', master_branch: 'main', - organization: 'test-org', topics: [], archived: action === 'archived', private: action !== 'publicized', @@ -972,6 +974,9 @@ describe('GithubEntityProvider', () => { const event = { action, repository: repo as RepositoryEvent['repository'], + organization: { + login: 'test-org', + }, } as RepositoryEvent; if (action === 'renamed') { @@ -1285,7 +1290,7 @@ describe('GithubEntityProvider', () => { const event = createRepoEvent( 'renamed', ) as EventParams; - const urlOldRepo = `https://github.com/${event.eventPayload.repository.organization}/${event.eventPayload.changes.repository.name.from}/blob/main/catalog-info.yaml`; + const urlOldRepo = `https://github.com/${event.eventPayload.organization?.login}/${event.eventPayload.changes.repository.name.from}/blob/main/catalog-info.yaml`; const expectedEntitiesRemoved = createExpectedEntitiesForUrl(urlOldRepo); @@ -1314,7 +1319,7 @@ describe('GithubEntityProvider', () => { const event = createRepoEvent( 'renamed', ) as EventParams; - const urlOldRepo = `https://github.com/${event.eventPayload.repository.organization}/${event.eventPayload.changes.repository.name.from}/blob/main/catalog-info.yaml`; + const urlOldRepo = `https://github.com/${event.eventPayload.organization?.login}/${event.eventPayload.changes.repository.name.from}/blob/main/catalog-info.yaml`; const expectedEntitiesRemoved = createExpectedEntitiesForUrl(urlOldRepo); const expectedEntitiesAdded = createExpectedEntitiesForEvent(event); diff --git a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts index d5dd88448a..9e3e19d83f 100644 --- a/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts @@ -323,9 +323,9 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { } private async onPush(event: PushEvent) { - if (this.config.organization !== event.repository.organization) { + if (this.config.organization !== event.organization?.login) { this.logger.debug( - `skipping push event from organization ${event.repository.organization}`, + `skipping push event from organization ${event.organization?.login}`, ); return; } @@ -408,9 +408,9 @@ export class GithubEntityProvider implements EntityProvider, EventSubscriber { } private async onRepoChange(event: RepositoryEvent) { - if (this.config.organization !== event.repository.organization) { + if (this.config.organization !== event.organization?.login) { this.logger.debug( - `skipping repository event from organization ${event.repository.organization}`, + `skipping repository event from organization ${event.organization?.login}`, ); return; }