Accept object in shouldBuild for future extensibility

Signed-off-by: Nikolas Skoufis <nskoufis@seek.com.au>
This commit is contained in:
Nikolas Skoufis
2022-03-02 10:06:23 +11:00
parent 44a1a447cc
commit 4368196fba
6 changed files with 25 additions and 7 deletions
+6 -1
View File
@@ -45,7 +45,7 @@ export class DefaultTechDocsCollator implements DocumentCollator {
// @public
export interface DocsBuildStrategy {
// (undocumented)
shouldBuild(entity: Entity): Promise<boolean>;
shouldBuild(params: ShouldBuildParameters): Promise<boolean>;
}
// @public
@@ -76,6 +76,11 @@ export type RouterOptions =
| RecommendedDeploymentOptions
| OutOfTheBoxDeploymentOptions;
// @public
export type ShouldBuildParameters = {
entity: Entity;
};
// @public
export type TechDocsCollatorOptions = {
discovery: PluginEndpointDiscovery;
+1
View File
@@ -26,6 +26,7 @@ export type {
RecommendedDeploymentOptions,
OutOfTheBoxDeploymentOptions,
DocsBuildStrategy,
ShouldBuildParameters,
} from './service';
export { DefaultTechDocsCollator } from './search';
@@ -46,7 +46,7 @@ describe('DefaultDocsBuildStrategy', () => {
MockedConfigReader.prototype.getString.mockReturnValue('local');
const result = await defaultDocsBuildStrategy.shouldBuild(entity);
const result = await defaultDocsBuildStrategy.shouldBuild({ entity });
expect(result).toBe(true);
});
@@ -57,7 +57,7 @@ describe('DefaultDocsBuildStrategy', () => {
MockedConfigReader.prototype.getString.mockReturnValue('external');
const result = await defaultDocsBuildStrategy.shouldBuild(entity);
const result = await defaultDocsBuildStrategy.shouldBuild({ entity });
expect(result).toBe(false);
});
@@ -16,13 +16,22 @@
import { Entity } from '@backstage/catalog-model';
import { Config } from '@backstage/config';
/**
* 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(entity: Entity): Promise<boolean>;
shouldBuild(params: ShouldBuildParameters): Promise<boolean>;
}
export class DefaultDocsBuildStrategy {
@@ -36,7 +45,7 @@ export class DefaultDocsBuildStrategy {
return new DefaultDocsBuildStrategy(config);
}
async shouldBuild(_: Entity): Promise<boolean> {
async shouldBuild(_: ShouldBuildParameters): Promise<boolean> {
return this.config.getString('techdocs.builder') === 'local';
}
}
@@ -20,4 +20,7 @@ export type {
RecommendedDeploymentOptions,
OutOfTheBoxDeploymentOptions,
} from './router';
export type { DocsBuildStrategy } from './DocsBuildStrategy';
export type {
DocsBuildStrategy,
ShouldBuildParameters,
} from './DocsBuildStrategy';
@@ -221,7 +221,7 @@ export async function createRouter(
// techdocs-backend will only try to build documentation for an entity if techdocs.builder is set to 'local'
// If set to 'external', it will assume that an external process (e.g. CI/CD pipeline
// of the repository) is responsible for building and publishing documentation to the storage provider
const shouldBuild = await docsBuildStrategy.shouldBuild(entity);
const shouldBuild = await docsBuildStrategy.shouldBuild({ entity });
if (!shouldBuild) {
// However, if caching is enabled, take the opportunity to check and
// invalidate stale cache entries.