scaffolder-backend: removed alpha options

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2023-08-15 16:14:20 +02:00
parent 88bc6e27a2
commit 349611126a
6 changed files with 142 additions and 101 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-backend': patch
---
Removed the options from the alpha `scaffolderPlugin` export. To extend the scaffolder plugin you instead now use the available extension points, `scaffolderActionsExtensionPoint`, `scaffolderTaskBrokerExtensionPoint`, and `scaffolderTemplatingExtensionPoint`.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder-node': patch
---
Added two new alpha extension points, `scaffolderTaskBrokerExtensionPoint` and `scaffolderTemplatingExtensionPoint`.
@@ -23,120 +23,104 @@ import { ScmIntegrations } from '@backstage/integration';
import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';
import {
scaffolderActionsExtensionPoint,
ScaffolderActionsExtensionPoint,
scaffolderTaskBrokerExtensionPoint,
scaffolderTemplatingExtensionPoint,
TaskBroker,
TemplateAction,
} from '@backstage/plugin-scaffolder-node';
import {
TemplateFilter,
TemplateGlobal,
TaskBroker,
} from '@backstage/plugin-scaffolder-backend';
} from '@backstage/plugin-scaffolder-node';
import { createBuiltinActions } from './scaffolder';
import { createRouter } from './service/router';
/**
* Catalog plugin options
* Scaffolder plugin
*
* @alpha
*/
export type ScaffolderPluginOptions = {
actions?: TemplateAction<any, any>[];
taskWorkers?: number;
taskBroker?: TaskBroker;
additionalTemplateFilters?: Record<string, TemplateFilter>;
additionalTemplateGlobals?: Record<string, TemplateGlobal>;
};
export const scaffolderPlugin = createBackendPlugin({
pluginId: 'scaffolder',
register(env) {
const addedActions = new Array<TemplateAction<any, any>>();
env.registerExtensionPoint(scaffolderActionsExtensionPoint, {
addActions(...newActions: TemplateAction<any>[]) {
addedActions.push(...newActions);
},
});
class ScaffolderActionsExtensionPointImpl
implements ScaffolderActionsExtensionPoint
{
#actions = new Array<TemplateAction<any, any>>();
let taskBroker: TaskBroker | undefined;
env.registerExtensionPoint(scaffolderTaskBrokerExtensionPoint, {
setTaskBroker(newTaskBroker) {
if (taskBroker) {
throw new Error('Task broker may only be set once');
}
taskBroker = newTaskBroker;
},
});
addActions(...actions: TemplateAction<any>[]): void {
this.#actions.push(...actions);
}
const additionalTemplateFilters: Record<string, TemplateFilter> = {};
const additionalTemplateGlobals: Record<string, TemplateGlobal> = {};
env.registerExtensionPoint(scaffolderTemplatingExtensionPoint, {
addTemplateFilters(newFilters) {
Object.assign(additionalTemplateFilters, newFilters);
},
addTemplateGlobals(newGlobals) {
Object.assign(additionalTemplateGlobals, newGlobals);
},
});
get actions() {
return this.#actions;
}
}
env.registerInit({
deps: {
logger: coreServices.logger,
config: coreServices.rootConfig,
reader: coreServices.urlReader,
permissions: coreServices.permissions,
database: coreServices.database,
httpRouter: coreServices.httpRouter,
catalogClient: catalogServiceRef,
},
async init({
logger,
config,
reader,
database,
httpRouter,
catalogClient,
permissions,
}) {
const log = loggerToWinstonLogger(logger);
/**
* Catalog plugin
*
* @alpha
*/
export const scaffolderPlugin = createBackendPlugin(
(options?: ScaffolderPluginOptions) => ({
pluginId: 'scaffolder',
register(env) {
const actionsExtensions = new ScaffolderActionsExtensionPointImpl();
env.registerExtensionPoint(
scaffolderActionsExtensionPoint,
actionsExtensions,
);
env.registerInit({
deps: {
logger: coreServices.logger,
config: coreServices.rootConfig,
reader: coreServices.urlReader,
permissions: coreServices.permissions,
database: coreServices.database,
httpRouter: coreServices.httpRouter,
catalogClient: catalogServiceRef,
},
async init({
logger,
config,
reader,
database,
httpRouter,
catalogClient,
permissions,
}) {
const {
additionalTemplateFilters,
taskBroker,
taskWorkers,
additionalTemplateGlobals,
} = options ?? {};
const log = loggerToWinstonLogger(logger);
const actions = options?.actions || [
...actionsExtensions.actions,
...createBuiltinActions({
integrations: ScmIntegrations.fromConfig(config),
catalogClient,
reader,
config,
additionalTemplateFilters,
additionalTemplateGlobals,
}),
];
const actionIds = actions.map(action => action.id).join(', ');
log.info(
`Starting scaffolder with the following actions enabled ${actionIds}`,
);
const router = await createRouter({
logger: log,
config,
database,
const actions = [
...addedActions,
...createBuiltinActions({
integrations: ScmIntegrations.fromConfig(config),
catalogClient,
reader,
actions,
taskBroker,
taskWorkers,
config,
additionalTemplateFilters,
additionalTemplateGlobals,
permissions,
});
httpRouter.use(router);
},
});
},
}),
);
}),
];
const actionIds = actions.map(action => action.id).join(', ');
log.info(
`Starting scaffolder with the following actions enabled ${actionIds}`,
);
const router = await createRouter({
logger: log,
config,
database,
catalogClient,
reader,
actions,
taskBroker,
additionalTemplateFilters,
additionalTemplateGlobals,
permissions,
});
httpRouter.use(router);
},
});
},
});
-1
View File
@@ -17,4 +17,3 @@
export * from './modules';
export * from './service';
export { scaffolderPlugin } from './ScaffolderPlugin';
export type { ScaffolderPluginOptions } from './ScaffolderPlugin';
+45 -1
View File
@@ -15,7 +15,12 @@
*/
import { createExtensionPoint } from '@backstage/backend-plugin-api';
import { TemplateAction } from './actions';
import {
TemplateAction,
TemplateFilter,
TemplateGlobal,
TaskBroker,
} from '@backstage/plugin-scaffolder-node';
/**
* Extension point for managing scaffolder actions.
@@ -35,3 +40,42 @@ export const scaffolderActionsExtensionPoint =
createExtensionPoint<ScaffolderActionsExtensionPoint>({
id: 'scaffolder.actions',
});
/**
* Extension point for replacing the scaffolder task broker.
*
* @alpha
*/
export interface ScaffolderTaskBrokerExtensionPoint {
setTaskBroker(taskBroker: TaskBroker): void;
}
/**
* Extension point for replacing the scaffolder task broker.
*
* @alpha
*/
export const scaffolderTaskBrokerExtensionPoint =
createExtensionPoint<ScaffolderTaskBrokerExtensionPoint>({
id: 'scaffolder.taskBroker',
});
/**
* Extension point for adding template filters and globals.
*
* @alpha
*/
export interface ScaffolderTemplatingExtensionPoint {
addTemplateFilters(filters: Record<string, TemplateFilter>): void;
addTemplateGlobals(filters: Record<string, TemplateGlobal>): void;
}
/**
* Extension point for adding template filters and globals.
*
* @alpha
*/
export const scaffolderTemplatingExtensionPoint =
createExtensionPoint<ScaffolderTemplatingExtensionPoint>({
id: 'scaffolder.templating',
});
+4
View File
@@ -26,4 +26,8 @@ export type { TemplateFilter, TemplateGlobal } from './types';
export {
scaffolderActionsExtensionPoint,
type ScaffolderActionsExtensionPoint,
scaffolderTaskBrokerExtensionPoint,
type ScaffolderTaskBrokerExtensionPoint,
scaffolderTemplatingExtensionPoint,
type ScaffolderTemplatingExtensionPoint,
} from './extensions';