[Catalog GitLab Org] Add extension point to override user and group transformers (#30892)

* feat: Add gitlabOrgEntityProviderTransformsExtensionPoint for overriding user and group transformers

Signed-off-by: Jack Palmer <jackpalmer@spotify.com>

* chore: Add changeset

Signed-off-by: Jack Palmer <jackpalmer@spotify.com>

* chore: Address pr comments

Signed-off-by: Jack Palmer <jackpalmer@spotify.com>

---------

Signed-off-by: Jack Palmer <jackpalmer@spotify.com>
This commit is contained in:
Jack Palmer
2025-08-14 16:09:58 +01:00
committed by GitHub
parent bb5f5145e6
commit d8cb60ee0a
4 changed files with 80 additions and 2 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend-module-gitlab-org': patch
---
feat: Add gitlabOrgEntityProviderTransformsExtensionPoint for overriding user and group transformers
@@ -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<GitlabOrgEntityProviderTransformsExtensionPoint>;
```
@@ -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<GitlabOrgEntityProviderTransformsExtensionPoint>({
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);
},
@@ -19,4 +19,8 @@
*
* @packageDocumentation
*/
export { catalogModuleGitlabOrgDiscoveryEntityProvider as default } from './catalogModuleGitlabOrgDiscoveryEntityProvider';
export {
catalogModuleGitlabOrgDiscoveryEntityProvider as default,
gitlabOrgEntityProviderTransformsExtensionPoint,
type GitlabOrgEntityProviderTransformsExtensionPoint,
} from './catalogModuleGitlabOrgDiscoveryEntityProvider';