feat: allow prepared directory clean up for custom preparers

When using custom preparer for TechDocs, the `preparedDir` might
end up taking disk space. This requires all custom preparers to
implement a new method `shouldCleanPreparedDirectory` which indicates
whether the prepared directory should be cleaned after generation.

Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2023-10-05 09:37:10 +03:00
parent e5b6767025
commit 344cfbcfbc
6 changed files with 31 additions and 3 deletions
+11
View File
@@ -0,0 +1,11 @@
---
'@backstage/plugin-techdocs-backend': minor
'@backstage/plugin-techdocs-node': minor
---
Allow prepared directory clean up for custom preparers
When using custom preparer for TechDocs, the `preparedDir` might
end up taking disk space. This requires all custom preparers to
implement a new method `shouldCleanPreparedDirectory` which indicates
whether the prepared directory should be cleaned after generation.
@@ -14,8 +14,8 @@
* limitations under the License.
*/
import {
Entity,
DEFAULT_NAMESPACE,
Entity,
stringifyEntityRef,
} from '@backstage/catalog-model';
import { Config } from '@backstage/config';
@@ -28,7 +28,6 @@ import {
PreparerBase,
PreparerBuilder,
PublisherBase,
UrlPreparer,
} from '@backstage/plugin-techdocs-node';
import fs from 'fs-extra';
import os from 'os';
@@ -194,7 +193,7 @@ export class DocsBuilder {
// Remove Prepared directory since it is no longer needed.
// Caveat: Can not remove prepared directory in case of git preparer since the
// local git repository is used to get etag on subsequent requests.
if (this.preparer instanceof UrlPreparer) {
if (this.preparer.shouldCleanPreparedDirectory()) {
this.logger.debug(
`Removing prepared directory ${preparedDir} since the site has been generated`,
);
+3
View File
@@ -21,6 +21,7 @@ import { Writable } from 'stream';
export class DirectoryPreparer implements PreparerBase {
static fromConfig(config: Config, options: PreparerConfig): DirectoryPreparer;
prepare(entity: Entity, options?: PreparerOptions): Promise<PreparerResponse>;
shouldCleanPreparedDirectory(): boolean;
}
// @public
@@ -132,6 +133,7 @@ export const parseReferenceAnnotation: (
// @public
export type PreparerBase = {
prepare(entity: Entity, options?: PreparerOptions): Promise<PreparerResponse>;
shouldCleanPreparedDirectory(): boolean;
};
// @public
@@ -274,5 +276,6 @@ export const transformDirLocation: (
export class UrlPreparer implements PreparerBase {
static fromConfig(options: PreparerConfig): UrlPreparer;
prepare(entity: Entity, options?: PreparerOptions): Promise<PreparerResponse>;
shouldCleanPreparedDirectory(): boolean;
}
```
@@ -60,6 +60,11 @@ export class DirectoryPreparer implements PreparerBase {
this.scmIntegrations = ScmIntegrations.fromConfig(config);
}
/** {@inheritDoc PreparerBase.shouldCleanPreparedDirectory} */
shouldCleanPreparedDirectory() {
return false;
}
/** {@inheritDoc PreparerBase.prepare} */
async prepare(
entity: Entity,
@@ -78,6 +78,11 @@ export type PreparerBase = {
* @throws `NotModifiedError` when the prepared directory has not been changed since the last build.
*/
prepare(entity: Entity, options?: PreparerOptions): Promise<PreparerResponse>;
/**
* Indicates whether the prepared directory should be cleaned after generation.
*/
shouldCleanPreparedDirectory(): boolean;
};
/**
@@ -47,6 +47,11 @@ export class UrlPreparer implements PreparerBase {
this.reader = reader;
}
/** {@inheritDoc PreparerBase.shouldCleanPreparedDirectory} */
shouldCleanPreparedDirectory() {
return true;
}
/** {@inheritDoc PreparerBase.prepare} */
async prepare(
entity: Entity,