Skip to content

Commit

Permalink
plugin(jenkins-backend): Add extension point
Browse files Browse the repository at this point in the history
Add an extension point to the `jenkins-backend` plugin so a custom
JenkinsInforProvider can be used.

Fixes backstage#2926

Signed-off-by: Luiz Carvalho <lucarval@redhat.com>
  • Loading branch information
lcarva committed Feb 26, 2025
1 parent d2b9418 commit 331ece1
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 9 deletions.
5 changes: 5 additions & 0 deletions workspaces/jenkins/.changeset/tasty-wasps-behave.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@backstage-community/plugin-jenkins-backend': patch
---

Add ExtensionPoint to allow usage of a custom JenkinsInfoProvider
35 changes: 35 additions & 0 deletions workspaces/jenkins/plugins/jenkins-backend/src/extensions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/*
* Copyright 2025 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import { createExtensionPoint } from '@backstage/backend-plugin-api';
import { JenkinsInfoProvider } from './service';

/**
* @public
*/
export interface JenkinsInfoProviderExtensionPoint {
setInfoProvider(infoProvider: JenkinsInfoProvider): void;
}

/**
* Extension point that allows a different JenkinsInfoProvider to be used.
*
* @public
*/
export const jenkinsInfoProviderExtensionPoint =
createExtensionPoint<JenkinsInfoProviderExtensionPoint>({
id: 'jenkins.info-provider',
});
36 changes: 27 additions & 9 deletions workspaces/jenkins/plugins/jenkins-backend/src/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,13 @@ import {
coreServices,
createBackendPlugin,
} from '@backstage/backend-plugin-api';
import { DefaultJenkinsInfoProvider } from './service/jenkinsInfoProvider';
import {
DefaultJenkinsInfoProvider,
JenkinsInfoProvider,
} from './service/jenkinsInfoProvider';
import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';
import { JenkinsBuilder } from './service/JenkinsBuilder';
import { jenkinsInfoProviderExtensionPoint } from './extensions';

/**
* Jenkins backend plugin
Expand All @@ -30,6 +34,17 @@ import { JenkinsBuilder } from './service/JenkinsBuilder';
export const jenkinsPlugin = createBackendPlugin({
pluginId: 'jenkins',
register(env) {
let jenkinsInfoProvider: JenkinsInfoProvider | undefined;

env.registerExtensionPoint(jenkinsInfoProviderExtensionPoint, {
setInfoProvider(customInfoProvider: JenkinsInfoProvider) {
if (jenkinsInfoProvider) {
throw new Error('The JenkinsInfoProvider has been already set');
}
jenkinsInfoProvider = customInfoProvider;
},
});

env.registerInit({
deps: {
logger: coreServices.logger,
Expand All @@ -51,14 +66,17 @@ export const jenkinsPlugin = createBackendPlugin({
auth,
httpAuth,
}) {
const jenkinsInfoProvider = DefaultJenkinsInfoProvider.fromConfig({
auth,
httpAuth,
config,
catalog: catalogClient,
discovery,
logger,
});
jenkinsInfoProvider =
jenkinsInfoProvider ??
DefaultJenkinsInfoProvider.fromConfig({
auth,
httpAuth,
config,
catalog: catalogClient,
discovery,
logger,
});

const builder = JenkinsBuilder.createBuilder({
/**
* Logger for logging purposes
Expand Down

0 comments on commit 331ece1

Please sign in to comment.