Merge pull request #23280 from secustor/feat/allo-to-provide-custom-techdocs-generator

feat(plugins/techdocs): add TechdocsGeneratorExtensionPoint
This commit is contained in:
John Philip
2024-03-05 14:47:18 -05:00
committed by GitHub
6 changed files with 59 additions and 2 deletions
+6
View File
@@ -0,0 +1,6 @@
---
'@backstage/plugin-techdocs-backend': minor
'@backstage/plugin-techdocs-node': minor
---
Create extension point `TechdocsGeneratorExtensionPoint` to allow adding a custom generator
+14
View File
@@ -30,6 +30,8 @@ import {
Generators,
Publisher,
techdocsBuildsExtensionPoint,
techdocsGeneratorExtensionPoint,
TechdocsGenerator,
} from '@backstage/plugin-techdocs-node';
import Docker from 'dockerode';
import { createRouter } from '@backstage/plugin-techdocs-backend';
@@ -51,6 +53,17 @@ export const techdocsPlugin = createBackendPlugin({
},
});
let customTechdocsGenerator: TechdocsGenerator | undefined;
env.registerExtensionPoint(techdocsGeneratorExtensionPoint, {
setTechdocsGenerator(generator: TechdocsGenerator) {
if (customTechdocsGenerator) {
throw new Error('TechdocsGenerator may only be set once');
}
customTechdocsGenerator = generator;
},
});
env.registerInit({
deps: {
config: coreServices.rootConfig,
@@ -76,6 +89,7 @@ export const techdocsPlugin = createBackendPlugin({
const generators = await Generators.fromConfig(config, {
logger: winstonLogger,
containerRunner,
customGenerator: customTechdocsGenerator,
});
// Publisher is used for
+10
View File
@@ -72,6 +72,7 @@ export class Generators implements GeneratorBuilder {
options: {
logger: Logger;
containerRunner: ContainerRunner;
customGenerator?: TechdocsGenerator;
},
): Promise<GeneratorBuilder>;
get(entity: Entity): GeneratorBase;
@@ -272,6 +273,15 @@ export class TechdocsGenerator implements GeneratorBase {
run(options: GeneratorRunOptions): Promise<void>;
}
// @public
export interface TechdocsGeneratorExtensionPoint {
// (undocumented)
setTechdocsGenerator(generator: TechdocsGenerator): void;
}
// @public
export const techdocsGeneratorExtensionPoint: ExtensionPoint<TechdocsGeneratorExtensionPoint>;
// @public
export type TechDocsMetadata = {
site_name: string;
+20
View File
@@ -15,6 +15,7 @@
*/
import { createExtensionPoint } from '@backstage/backend-plugin-api';
import { DocsBuildStrategy } from './techdocsTypes';
import { TechdocsGenerator } from './stages';
/**
* Extension point type for configuring Techdocs builds.
@@ -34,3 +35,22 @@ export const techdocsBuildsExtensionPoint =
createExtensionPoint<TechdocsBuildsExtensionPoint>({
id: 'techdocs.builds',
});
/**
* Extension point type for configuring a custom Techdocs generator
*
* @public
*/
export interface TechdocsGeneratorExtensionPoint {
setTechdocsGenerator(generator: TechdocsGenerator): void;
}
/**
* Extension point for configuring a custom Techdocs generator
*
* @public
*/
export const techdocsGeneratorExtensionPoint =
createExtensionPoint<TechdocsGeneratorExtensionPoint>({
id: 'techdocs.generator',
});
+2
View File
@@ -25,5 +25,7 @@ export * from './helpers';
export * from './techdocsTypes';
export {
techdocsBuildsExtensionPoint,
techdocsGeneratorExtensionPoint,
type TechdocsBuildsExtensionPoint,
type TechdocsGeneratorExtensionPoint,
} from './extensions';
@@ -40,11 +40,16 @@ export class Generators implements GeneratorBuilder {
*/
static async fromConfig(
config: Config,
options: { logger: Logger; containerRunner: ContainerRunner },
options: {
logger: Logger;
containerRunner: ContainerRunner;
customGenerator?: TechdocsGenerator;
},
): Promise<GeneratorBuilder> {
const generators = new Generators();
const techdocsGenerator = TechdocsGenerator.fromConfig(config, options);
const techdocsGenerator =
options.customGenerator ?? TechdocsGenerator.fromConfig(config, options);
generators.register('techdocs', techdocsGenerator);
return generators;