diff --git a/.changeset/three-moons-hear.md b/.changeset/three-moons-hear.md new file mode 100644 index 0000000000..70c5c822f1 --- /dev/null +++ b/.changeset/three-moons-hear.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab-org': patch +--- + +feat: Add gitlabOrgEntityProviderTransformsExtensionPoint for overriding user and group transformers diff --git a/plugins/catalog-backend-module-gitlab-org/report.api.md b/plugins/catalog-backend-module-gitlab-org/report.api.md index b3af579255..def497973e 100644 --- a/plugins/catalog-backend-module-gitlab-org/report.api.md +++ b/plugins/catalog-backend-module-gitlab-org/report.api.md @@ -4,8 +4,20 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; +import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { GroupTransformer } from '@backstage/plugin-catalog-backend-module-gitlab'; +import { UserTransformer } from '@backstage/plugin-catalog-backend-module-gitlab'; // @public const catalogModuleGitlabOrgDiscoveryEntityProvider: BackendFeature; export default catalogModuleGitlabOrgDiscoveryEntityProvider; + +// @public +export interface GitlabOrgEntityProviderTransformsExtensionPoint { + setGroupTransformer(transformer: GroupTransformer): void; + setUserTransformer(transformer: UserTransformer): void; +} + +// @public +export const gitlabOrgEntityProviderTransformsExtensionPoint: ExtensionPoint; ``` diff --git a/plugins/catalog-backend-module-gitlab-org/src/catalogModuleGitlabOrgDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab-org/src/catalogModuleGitlabOrgDiscoveryEntityProvider.ts index 85c1b65028..e175ce50fb 100644 --- a/plugins/catalog-backend-module-gitlab-org/src/catalogModuleGitlabOrgDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab-org/src/catalogModuleGitlabOrgDiscoveryEntityProvider.ts @@ -17,11 +17,45 @@ import { coreServices, createBackendModule, + createExtensionPoint, } from '@backstage/backend-plugin-api'; -import { GitlabOrgDiscoveryEntityProvider } from '@backstage/plugin-catalog-backend-module-gitlab'; +import { + GitlabOrgDiscoveryEntityProvider, + UserTransformer, + GroupTransformer, +} from '@backstage/plugin-catalog-backend-module-gitlab'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { eventsServiceRef } from '@backstage/plugin-events-node'; +/** + * Interface for {@link gitlabOrgEntityProviderTransformsExtensionPoint}. + * + * @public + */ +export interface GitlabOrgEntityProviderTransformsExtensionPoint { + /** + * Set a custom transformer for transforming from GitLab users to catalog + * entities. + */ + setUserTransformer(transformer: UserTransformer): void; + + /** + * Set a custom transformer for transforming from GitLab groups to catalog + * entities. + */ + setGroupTransformer(transformer: GroupTransformer): void; +} + +/** + * Extension point for runtime configuration of GitlabOrgDiscoveryEntityProvider. + * + * @public + */ +export const gitlabOrgEntityProviderTransformsExtensionPoint = + createExtensionPoint({ + id: 'catalog.gitlabOrgEntityProvider', + }); + /** * Registers the GitlabOrgDiscoveryEntityProvider with the catalog processing extension point. * @@ -32,6 +66,27 @@ export const catalogModuleGitlabOrgDiscoveryEntityProvider = pluginId: 'catalog', moduleId: 'gitlabOrgDiscoveryEntityProvider', register(env) { + let userTransformer: UserTransformer | undefined; + let groupTransformer: GroupTransformer | undefined; + + env.registerExtensionPoint( + gitlabOrgEntityProviderTransformsExtensionPoint, + { + setUserTransformer(transformer) { + if (userTransformer) { + throw new Error('User transformer may only be set once'); + } + userTransformer = transformer; + }, + setGroupTransformer(transformer) { + if (groupTransformer) { + throw new Error('Group transformer may only be set once'); + } + groupTransformer = transformer; + }, + }, + ); + env.registerInit({ deps: { config: coreServices.rootConfig, @@ -46,6 +101,8 @@ export const catalogModuleGitlabOrgDiscoveryEntityProvider = logger, events, scheduler, + userTransformer, + groupEntitiesTransformer: groupTransformer, }); catalog.addEntityProvider(gitlabOrgDiscoveryEntityProvider); }, diff --git a/plugins/catalog-backend-module-gitlab-org/src/index.ts b/plugins/catalog-backend-module-gitlab-org/src/index.ts index bbd5f1f4c3..36247b7e15 100644 --- a/plugins/catalog-backend-module-gitlab-org/src/index.ts +++ b/plugins/catalog-backend-module-gitlab-org/src/index.ts @@ -19,4 +19,8 @@ * * @packageDocumentation */ -export { catalogModuleGitlabOrgDiscoveryEntityProvider as default } from './catalogModuleGitlabOrgDiscoveryEntityProvider'; +export { + catalogModuleGitlabOrgDiscoveryEntityProvider as default, + gitlabOrgEntityProviderTransformsExtensionPoint, + type GitlabOrgEntityProviderTransformsExtensionPoint, +} from './catalogModuleGitlabOrgDiscoveryEntityProvider';