feat(techdocs): add extension for setting build strategy
Signed-off-by: Phil Kuang <pkuang@factset.com>
This commit is contained in:
@@ -25,8 +25,6 @@ export type {
|
||||
RouterOptions,
|
||||
RecommendedDeploymentOptions,
|
||||
OutOfTheBoxDeploymentOptions,
|
||||
DocsBuildStrategy,
|
||||
ShouldBuildParameters,
|
||||
} from './service';
|
||||
|
||||
export {
|
||||
@@ -41,6 +39,10 @@ export type {
|
||||
/**
|
||||
* @deprecated Use directly from @backstage/plugin-techdocs-node
|
||||
*/
|
||||
export type { TechDocsDocument } from '@backstage/plugin-techdocs-node';
|
||||
export type {
|
||||
DocsBuildStrategy,
|
||||
ShouldBuildParameters,
|
||||
TechDocsDocument,
|
||||
} from '@backstage/plugin-techdocs-node';
|
||||
|
||||
export * from '@backstage/plugin-techdocs-node';
|
||||
|
||||
@@ -25,9 +25,11 @@ import {
|
||||
} from '@backstage/backend-plugin-api';
|
||||
|
||||
import {
|
||||
DocsBuildStrategy,
|
||||
Preparers,
|
||||
Generators,
|
||||
Publisher,
|
||||
techdocsBuildStrategyExtensionPoint,
|
||||
} from '@backstage/plugin-techdocs-node';
|
||||
import Docker from 'dockerode';
|
||||
import { createRouter } from '@backstage/plugin-techdocs-backend';
|
||||
@@ -39,6 +41,16 @@ import { createRouter } from '@backstage/plugin-techdocs-backend';
|
||||
export const techdocsPlugin = createBackendPlugin({
|
||||
pluginId: 'techdocs',
|
||||
register(env) {
|
||||
let docsBuildStrategy: DocsBuildStrategy | undefined;
|
||||
env.registerExtensionPoint(techdocsBuildStrategyExtensionPoint, {
|
||||
setBuildStrategy(buildStrategy: DocsBuildStrategy) {
|
||||
if (docsBuildStrategy) {
|
||||
throw new Error('DocsBuildStrategy may only be set once');
|
||||
}
|
||||
docsBuildStrategy = buildStrategy;
|
||||
},
|
||||
});
|
||||
|
||||
env.registerInit({
|
||||
deps: {
|
||||
config: coreServices.rootConfig,
|
||||
@@ -82,6 +94,7 @@ export const techdocsPlugin = createBackendPlugin({
|
||||
await createRouter({
|
||||
logger: winstonLogger,
|
||||
cache: cacheManager,
|
||||
docsBuildStrategy,
|
||||
preparers,
|
||||
generators,
|
||||
publisher,
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { DefaultDocsBuildStrategy } from './DocsBuildStrategy';
|
||||
import { DefaultDocsBuildStrategy } from './DefaultDocsBuildStrategy';
|
||||
import { ConfigReader } from '@backstage/config';
|
||||
|
||||
const MockedConfigReader = ConfigReader as jest.MockedClass<
|
||||
+5
-20
@@ -13,28 +13,13 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import { Entity } from '@backstage/catalog-model';
|
||||
import { Config } from '@backstage/config';
|
||||
import {
|
||||
DocsBuildStrategy,
|
||||
ShouldBuildParameters,
|
||||
} from '@backstage/plugin-techdocs-node';
|
||||
|
||||
/**
|
||||
* Parameters passed to the shouldBuild method on the DocsBuildStrategy interface
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export type ShouldBuildParameters = {
|
||||
entity: Entity;
|
||||
};
|
||||
|
||||
/**
|
||||
* A strategy for when to build TechDocs locally, and when to skip building TechDocs (allowing for an external build)
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export interface DocsBuildStrategy {
|
||||
shouldBuild(params: ShouldBuildParameters): Promise<boolean>;
|
||||
}
|
||||
|
||||
export class DefaultDocsBuildStrategy {
|
||||
export class DefaultDocsBuildStrategy implements DocsBuildStrategy {
|
||||
private readonly config: Config;
|
||||
|
||||
private constructor(config: Config) {
|
||||
@@ -20,7 +20,3 @@ export type {
|
||||
RecommendedDeploymentOptions,
|
||||
OutOfTheBoxDeploymentOptions,
|
||||
} from './router';
|
||||
export type {
|
||||
DocsBuildStrategy,
|
||||
ShouldBuildParameters,
|
||||
} from './DocsBuildStrategy';
|
||||
|
||||
@@ -22,6 +22,7 @@ import {
|
||||
} from '@backstage/backend-common';
|
||||
import { ConfigReader } from '@backstage/config';
|
||||
import {
|
||||
DocsBuildStrategy,
|
||||
GeneratorBuilder,
|
||||
PreparerBuilder,
|
||||
PublisherBase,
|
||||
@@ -32,7 +33,6 @@ import { DocsSynchronizer, DocsSynchronizerSyncOpts } from './DocsSynchronizer';
|
||||
import { CachedEntityLoader } from './CachedEntityLoader';
|
||||
import { createEventStream, createRouter, RouterOptions } from './router';
|
||||
import { TechDocsCache } from '../cache';
|
||||
import { DocsBuildStrategy } from './DocsBuildStrategy';
|
||||
|
||||
jest.mock('@backstage/catalog-client');
|
||||
jest.mock('@backstage/config');
|
||||
|
||||
@@ -22,6 +22,7 @@ import { stringifyEntityRef } from '@backstage/catalog-model';
|
||||
import { Config } from '@backstage/config';
|
||||
import { NotFoundError } from '@backstage/errors';
|
||||
import {
|
||||
DocsBuildStrategy,
|
||||
GeneratorBuilder,
|
||||
getLocationForEntity,
|
||||
PreparerBuilder,
|
||||
@@ -34,10 +35,7 @@ import { ScmIntegrations } from '@backstage/integration';
|
||||
import { DocsSynchronizer, DocsSynchronizerSyncOpts } from './DocsSynchronizer';
|
||||
import { createCacheMiddleware, TechDocsCache } from '../cache';
|
||||
import { CachedEntityLoader } from './CachedEntityLoader';
|
||||
import {
|
||||
DefaultDocsBuildStrategy,
|
||||
DocsBuildStrategy,
|
||||
} from './DocsBuildStrategy';
|
||||
import { DefaultDocsBuildStrategy } from './DefaultDocsBuildStrategy';
|
||||
import * as winston from 'winston';
|
||||
import { PassThrough } from 'stream';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user