From 5b74ce4c1fef7c805faf4e631ea7637fae653e62 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 25 Sep 2023 10:04:43 +0200 Subject: [PATCH 1/3] docs: fix UserEntity references Signed-off-by: Vincenzo Scamporlino --- docs/integrations/github/org.md | 55 +++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md index 39b60c76c5..8d640e714e 100644 --- a/docs/integrations/github/org.md +++ b/docs/integrations/github/org.md @@ -130,13 +130,14 @@ export default async function createPlugin( builder.addProcessor(new ScaffolderEntitiesProcessor()); /* highlight-add-start */ const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, { - id: 'production', - orgUrl: 'https://github.com/backstage', - logger: env.logger, - schedule: env.scheduler.createScheduledTaskRunner({ - frequency: { minutes: 60 }, - timeout: { minutes: 15 }, - }), + id: 'production', + orgUrl: 'https://github.com/backstage', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 60 }, + timeout: { minutes: 15 }, + }), + }); env.eventBroker.subscribe(githubOrgProvider); builder.addEntityProvider(githubOrgProvider); /* highlight-add-end */ @@ -254,23 +255,37 @@ configured such an email in their own account. The API will only return these values when using GitHub App authentication and with the correct app permission allowing access to emails. -You can decorate the `defaultUserTransformer` to replace the org email in the +You can decorate the default `userTransformer` to replace the org email in the returned identity. -```typescript -async (user, ctx): Promise => { - const entity = await defaultUserTransformer(user, ctx); - - if (entity && user.organizationVerifiedDomainEmails?.length) { - entity.spec.profile!.email = user.organizationVerifiedDomainEmails[0]; - } - - return entity; -}, +```ts title="packages/backend/src/plugins/catalog.ts" +const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, { + id: 'production', + orgUrl: 'https://github.com/backstage', + logger: env.logger, + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 60 }, + timeout: { minutes: 15 }, + }), + /* highlight-add-start */ + userTransformer: async (user, ctx) => { + const entity = await defaultUserTransformer(user, ctx); + if ( + entity && + isUserEntity(entity) && + entity.spec.profile && + user.organizationVerifiedDomainEmails?.length + ) { + entity.spec.profile!.email = user.organizationVerifiedDomainEmails[0]; + } + return entity; + }, + /* highlight-add-end */ +}); ``` -Once you have imported the emails you can resolve users in your sign-in in -resolver using the catalog entity search via email +Once you have imported the emails you can resolve users in your [sign-in +resolver](../../auth/github/provider.md) using the catalog entity search via email ```typescript title="packages/backend/src/plugins/auth.ts" ctx.signInWithCatalogUser({ From 7ec10602ff6a35c1e7d2c302f2cc87897a2a5dc9 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 2 Oct 2023 16:58:17 +0200 Subject: [PATCH 2/3] catalog-backend-module-github: fix defaultUserTransformer typings Signed-off-by: Vincenzo Scamporlino --- docs/integrations/github/org.md | 7 +------ plugins/catalog-backend-module-github/api-report.md | 6 +++++- .../src/lib/defaultTransformers.ts | 5 +++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/integrations/github/org.md b/docs/integrations/github/org.md index 8d640e714e..1404b20559 100644 --- a/docs/integrations/github/org.md +++ b/docs/integrations/github/org.md @@ -270,12 +270,7 @@ const githubOrgProvider = GithubOrgEntityProvider.fromConfig(env.config, { /* highlight-add-start */ userTransformer: async (user, ctx) => { const entity = await defaultUserTransformer(user, ctx); - if ( - entity && - isUserEntity(entity) && - entity.spec.profile && - user.organizationVerifiedDomainEmails?.length - ) { + if (entity && user.organizationVerifiedDomainEmails?.length) { entity.spec.profile!.email = user.organizationVerifiedDomainEmails[0]; } return entity; diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 12ab6d35e7..4c44f95b61 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -24,12 +24,16 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmLocationAnalyzer } from '@backstage/plugin-catalog-backend'; import { TaskRunner } from '@backstage/backend-tasks'; import { TokenManager } from '@backstage/backend-common'; +import { UserEntity } from '@backstage/catalog-model'; // @public export const defaultOrganizationTeamTransformer: TeamTransformer; // @public -export const defaultUserTransformer: UserTransformer; +export const defaultUserTransformer: ( + item: GithubUser, + _ctx: TransformerContext, +) => Promise; // @public export class GithubDiscoveryProcessor implements CatalogProcessor { diff --git a/plugins/catalog-backend-module-github/src/lib/defaultTransformers.ts b/plugins/catalog-backend-module-github/src/lib/defaultTransformers.ts index 71613d88d2..6befd32056 100644 --- a/plugins/catalog-backend-module-github/src/lib/defaultTransformers.ts +++ b/plugins/catalog-backend-module-github/src/lib/defaultTransformers.ts @@ -58,9 +58,10 @@ export type TeamTransformer = ( * * @public */ -export const defaultUserTransformer: UserTransformer = async ( +export const defaultUserTransformer = async ( item: GithubUser, -) => { + _ctx: TransformerContext, +): Promise => { const entity: UserEntity = { apiVersion: 'backstage.io/v1alpha1', kind: 'User', From b4b1cbf9fae39f335f7fd2cc18c1fe82fae5f81e Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Mon, 2 Oct 2023 18:28:27 +0200 Subject: [PATCH 3/3] changeset Signed-off-by: Vincenzo Scamporlino --- .changeset/polite-trainers-grin.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/polite-trainers-grin.md diff --git a/.changeset/polite-trainers-grin.md b/.changeset/polite-trainers-grin.md new file mode 100644 index 0000000000..878596702d --- /dev/null +++ b/.changeset/polite-trainers-grin.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Make `defaultUserTransformer` resolve to `UserEntity` instead of `Entity`