diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index ea6bc9e0ea..e749549646 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -138,6 +138,8 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { logger: Logger; orgs: GithubMultiOrgConfig; githubCredentialsProvider?: GithubCredentialsProvider; + userTransformer?: UserTransformer; + teamTransformer?: TeamTransformer; }); // (undocumented) static fromConfig( @@ -145,6 +147,8 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { options: { logger: Logger; githubCredentialsProvider?: GithubCredentialsProvider; + userTransformer?: UserTransformer; + teamTransformer?: TeamTransformer; }, ): GithubMultiOrgReaderProcessor; // (undocumented) diff --git a/plugins/catalog-backend-module-github/src/lib/org.ts b/plugins/catalog-backend-module-github/src/lib/org.ts index 4642be0e8c..275c5f4aeb 100644 --- a/plugins/catalog-backend-module-github/src/lib/org.ts +++ b/plugins/catalog-backend-module-github/src/lib/org.ts @@ -14,7 +14,11 @@ * limitations under the License. */ -import { GroupEntity, UserEntity } from '@backstage/catalog-model'; +import { + DEFAULT_NAMESPACE, + GroupEntity, + UserEntity, +} from '@backstage/catalog-model'; export function buildOrgHierarchy(groups: GroupEntity[]) { const groupsByName = new Map(groups.map(g => [g.metadata.name, g])); @@ -56,9 +60,11 @@ export function assignGroupsToUsers( ) { const groupMemberUsers = new Map( groups.map(group => { - const groupKey = group.metadata.namespace - ? `${group.metadata.namespace}/${group.metadata.name}` - : group.metadata.name; + const groupKey = + group.metadata.namespace && + group.metadata.namespace !== DEFAULT_NAMESPACE + ? `${group.metadata.namespace}/${group.metadata.name}` + : group.metadata.name; return [groupKey, group.spec.members || []]; }), ); diff --git a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts index 59f9fdeeba..745f52d6c5 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts @@ -40,6 +40,8 @@ import { getOrganizationUsers, GithubMultiOrgConfig, readGithubMultiOrgConfig, + TeamTransformer, + UserTransformer, } from '../lib'; /** @@ -60,6 +62,8 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { options: { logger: Logger; githubCredentialsProvider?: GithubCredentialsProvider; + userTransformer?: UserTransformer; + teamTransformer?: TeamTransformer; }, ) { const c = config.getOptionalConfig('catalog.processors.githubMultiOrg'); @@ -72,12 +76,16 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { }); } - constructor(options: { - integrations: ScmIntegrationRegistry; - logger: Logger; - orgs: GithubMultiOrgConfig; - githubCredentialsProvider?: GithubCredentialsProvider; - }) { + constructor( + private options: { + integrations: ScmIntegrationRegistry; + logger: Logger; + orgs: GithubMultiOrgConfig; + githubCredentialsProvider?: GithubCredentialsProvider; + userTransformer?: UserTransformer; + teamTransformer?: TeamTransformer; + }, + ) { this.integrations = options.integrations; this.logger = options.logger; this.orgs = options.orgs; @@ -133,12 +141,15 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { client, orgConfig.name, tokenType, + this.options.userTransformer, ); const { groups } = await getOrganizationTeams( client, orgConfig.name, async (team, ctx): Promise => { - const result = await defaultOrganizationTeamTransformer(team, ctx); + const result = this.options.teamTransformer + ? await this.options.teamTransformer(team, ctx) + : await defaultOrganizationTeamTransformer(team, ctx); if (result) { result.metadata.namespace = orgConfig.groupNamespace;