@backstage/plugin-scaffolder-backend 1.22.5-next.1 → 1.22.6-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/alpha/package.json +1 -1
- package/config.d.ts +5 -0
- package/dist/alpha.cjs.js +5 -2
- package/dist/alpha.cjs.js.map +1 -1
- package/dist/cjs/{router-DClM_ren.cjs.js → router-DhoUgDz0.cjs.js} +91 -12
- package/dist/cjs/router-DhoUgDz0.cjs.js.map +1 -0
- package/dist/index.cjs.js +5 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +38 -4
- package/migrations/20240401213200_workspace.js +35 -0
- package/package.json +18 -16
- package/dist/cjs/router-DClM_ren.cjs.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder-backend
|
|
2
2
|
|
|
3
|
+
## 1.22.6-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e4b50ab: Scaffolder workspace serialization
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @backstage/plugin-catalog-node@1.12.0-next.2
|
|
10
|
+
- @backstage/plugin-scaffolder-backend-module-gitlab@0.4.0-next.2
|
|
11
|
+
- @backstage/backend-common@0.22.0-next.2
|
|
12
|
+
- @backstage/plugin-scaffolder-node@0.4.4-next.2
|
|
13
|
+
- @backstage/integration@1.11.0-next.0
|
|
14
|
+
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.2
|
|
15
|
+
- @backstage/plugin-scaffolder-backend-module-azure@0.1.10-next.2
|
|
16
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.8-next.2
|
|
17
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.8-next.2
|
|
18
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.8-next.2
|
|
19
|
+
- @backstage/plugin-scaffolder-backend-module-gerrit@0.1.10-next.2
|
|
20
|
+
- @backstage/plugin-scaffolder-backend-module-gitea@0.1.8-next.2
|
|
21
|
+
- @backstage/plugin-scaffolder-backend-module-github@0.2.8-next.2
|
|
22
|
+
|
|
3
23
|
## 1.22.5-next.1
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/alpha/package.json
CHANGED
package/config.d.ts
CHANGED
|
@@ -47,6 +47,11 @@ export interface Config {
|
|
|
47
47
|
*/
|
|
48
48
|
EXPERIMENTAL_recoverTasks?: boolean;
|
|
49
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Sets the serialization of the workspace to have an ability to rerun the failed task.
|
|
52
|
+
*/
|
|
53
|
+
EXPERIMENTAL_workspaceSerialization?: boolean;
|
|
54
|
+
|
|
50
55
|
/**
|
|
51
56
|
* Every task which is in progress state and having a last heartbeat longer than a specified timeout is going to
|
|
52
57
|
* be attempted to recover.
|
package/dist/alpha.cjs.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var alpha = require('@backstage/plugin-scaffolder-common/alpha');
|
|
6
6
|
var pluginPermissionNode = require('@backstage/plugin-permission-node');
|
|
7
|
-
var router = require('./cjs/router-
|
|
7
|
+
var router = require('./cjs/router-DhoUgDz0.cjs.js');
|
|
8
8
|
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
9
9
|
var backendCommon = require('@backstage/backend-common');
|
|
10
10
|
var integration = require('@backstage/integration');
|
|
@@ -39,9 +39,12 @@ require('isbinaryfile');
|
|
|
39
39
|
require('isolated-vm');
|
|
40
40
|
require('lodash/get');
|
|
41
41
|
require('uuid');
|
|
42
|
+
require('tar');
|
|
43
|
+
require('concat-stream');
|
|
44
|
+
require('util');
|
|
45
|
+
require('stream');
|
|
42
46
|
require('winston');
|
|
43
47
|
require('nunjucks');
|
|
44
|
-
require('stream');
|
|
45
48
|
require('prom-client');
|
|
46
49
|
require('@backstage/plugin-permission-common');
|
|
47
50
|
require('winston-transport');
|
package/dist/alpha.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha.cjs.js","sources":["../src/service/conditionExports.ts","../src/ScaffolderPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n RESOURCE_TYPE_SCAFFOLDER_ACTION,\n} from '@backstage/plugin-scaffolder-common/alpha';\nimport { createConditionExports } from '@backstage/plugin-permission-node';\nimport { scaffolderTemplateRules, scaffolderActionRules } from './rules';\n\nconst templateConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n rules: scaffolderTemplateRules,\n});\n\nconst actionsConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_ACTION,\n rules: scaffolderActionRules,\n});\n\n/**\n * `createScaffolderTemplateConditionalDecision` can be used when authoring policies to\n * create conditional decisions. It requires a permission of type\n * `ResourcePermission<'scaffolder-template'>` to be passed as the first parameter.\n * It's recommended that you use the provided `isResourcePermission` and\n * `isPermission` helper methods to narrow the type of the permission passed to\n * the handle method as shown below.\n *\n * ```\n * // MyAuthorizationPolicy.ts\n * ...\n * import { createScaffolderPolicyDecision } from '@backstage/plugin-scaffolder-backend';\n * import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common';\n *\n * class MyAuthorizationPolicy implements PermissionPolicy {\n * async handle(request, user) {\n * ...\n *\n * if (isResourcePermission(request.permission, RESOURCE_TYPE_SCAFFOLDER_TEMPLATE)) {\n * return createScaffolderConditionalDecision(\n * request.permission,\n * { anyOf: [...insert conditions here...] }\n * );\n * }\n *\n * ...\n * }\n *\n * ```\n *\n * @alpha\n */\nexport const createScaffolderTemplateConditionalDecision =\n templateConditionExports.createConditionalDecision;\n\n/**\n * These conditions are used when creating conditional decisions for scaffolder\n * templates that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderTemplateConditions = templateConditionExports.conditions;\n\n/**\n * @alpha\n */\nexport const createScaffolderActionConditionalDecision =\n actionsConditionExports.createConditionalDecision;\n\n/**\n *\n * These conditions are used when creating conditional decisions for scaffolder\n * actions that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderActionConditions = actionsConditionExports.conditions;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport { ScmIntegrations } from '@backstage/integration';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\nimport {\n TaskBroker,\n TemplateAction,\n TemplateFilter,\n TemplateGlobal,\n} from '@backstage/plugin-scaffolder-node';\nimport {\n scaffolderActionsExtensionPoint,\n scaffolderTaskBrokerExtensionPoint,\n scaffolderTemplatingExtensionPoint,\n} from '@backstage/plugin-scaffolder-node/alpha';\nimport {\n createCatalogRegisterAction,\n createCatalogWriteAction,\n createDebugLogAction,\n createFetchCatalogEntityAction,\n createFetchPlainAction,\n createFetchPlainFileAction,\n createFetchTemplateAction,\n createFilesystemDeleteAction,\n createFilesystemRenameAction,\n createWaitAction,\n} from './scaffolder';\nimport { createRouter } from './service/router';\n\n/**\n * Scaffolder plugin\n *\n * @alpha\n */\nexport const scaffolderPlugin = createBackendPlugin({\n pluginId: 'scaffolder',\n register(env) {\n const addedActions = new Array<TemplateAction<any, any>>();\n env.registerExtensionPoint(scaffolderActionsExtensionPoint, {\n addActions(...newActions: TemplateAction<any>[]) {\n addedActions.push(...newActions);\n },\n });\n\n let taskBroker: TaskBroker | undefined;\n env.registerExtensionPoint(scaffolderTaskBrokerExtensionPoint, {\n setTaskBroker(newTaskBroker) {\n if (taskBroker) {\n throw new Error('Task broker may only be set once');\n }\n taskBroker = newTaskBroker;\n },\n });\n\n const additionalTemplateFilters: Record<string, TemplateFilter> = {};\n const additionalTemplateGlobals: Record<string, TemplateGlobal> = {};\n env.registerExtensionPoint(scaffolderTemplatingExtensionPoint, {\n addTemplateFilters(newFilters) {\n Object.assign(additionalTemplateFilters, newFilters);\n },\n addTemplateGlobals(newGlobals) {\n Object.assign(additionalTemplateGlobals, newGlobals);\n },\n });\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n lifecycle: coreServices.rootLifecycle,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n auth: coreServices.auth,\n discovery: coreServices.discovery,\n httpRouter: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n catalogClient: catalogServiceRef,\n },\n async init({\n logger,\n config,\n lifecycle,\n reader,\n database,\n auth,\n discovery,\n httpRouter,\n httpAuth,\n catalogClient,\n permissions,\n }) {\n const log = loggerToWinstonLogger(logger);\n const integrations = ScmIntegrations.fromConfig(config);\n\n const actions = [\n // actions provided from other modules\n ...addedActions,\n\n // built-in actions for the scaffolder\n createFetchPlainAction({\n reader,\n integrations,\n }),\n createFetchPlainFileAction({\n reader,\n integrations,\n }),\n createFetchTemplateAction({\n integrations,\n reader,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n }),\n createDebugLogAction(),\n createWaitAction(),\n // todo(blam): maybe these should be a -catalog module?\n createCatalogRegisterAction({ catalogClient, integrations, auth }),\n createFetchCatalogEntityAction({ catalogClient, auth }),\n createCatalogWriteAction(),\n createFilesystemDeleteAction(),\n createFilesystemRenameAction(),\n ];\n\n const actionIds = actions.map(action => action.id).join(', ');\n\n log.info(\n `Starting scaffolder with the following actions enabled ${actionIds}`,\n );\n\n const router = await createRouter({\n logger: log,\n config,\n database,\n catalogClient,\n reader,\n lifecycle,\n actions,\n taskBroker,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n auth,\n httpAuth,\n discovery,\n permissions,\n });\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createConditionExports","RESOURCE_TYPE_SCAFFOLDER_TEMPLATE","scaffolderTemplateRules","RESOURCE_TYPE_SCAFFOLDER_ACTION","scaffolderActionRules","createBackendPlugin","scaffolderActionsExtensionPoint","scaffolderTaskBrokerExtensionPoint","scaffolderTemplatingExtensionPoint","coreServices","catalogServiceRef","loggerToWinstonLogger","ScmIntegrations","createFetchPlainAction","createFetchPlainFileAction","createFetchTemplateAction","createDebugLogAction","createWaitAction","createCatalogRegisterAction","createFetchCatalogEntityAction","createCatalogWriteAction","createFilesystemDeleteAction","createFilesystemRenameAction","router","createRouter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alpha.cjs.js","sources":["../src/service/conditionExports.ts","../src/ScaffolderPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n RESOURCE_TYPE_SCAFFOLDER_ACTION,\n} from '@backstage/plugin-scaffolder-common/alpha';\nimport { createConditionExports } from '@backstage/plugin-permission-node';\nimport { scaffolderTemplateRules, scaffolderActionRules } from './rules';\n\nconst templateConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_TEMPLATE,\n rules: scaffolderTemplateRules,\n});\n\nconst actionsConditionExports = createConditionExports({\n pluginId: 'scaffolder',\n resourceType: RESOURCE_TYPE_SCAFFOLDER_ACTION,\n rules: scaffolderActionRules,\n});\n\n/**\n * `createScaffolderTemplateConditionalDecision` can be used when authoring policies to\n * create conditional decisions. It requires a permission of type\n * `ResourcePermission<'scaffolder-template'>` to be passed as the first parameter.\n * It's recommended that you use the provided `isResourcePermission` and\n * `isPermission` helper methods to narrow the type of the permission passed to\n * the handle method as shown below.\n *\n * ```\n * // MyAuthorizationPolicy.ts\n * ...\n * import { createScaffolderPolicyDecision } from '@backstage/plugin-scaffolder-backend';\n * import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common';\n *\n * class MyAuthorizationPolicy implements PermissionPolicy {\n * async handle(request, user) {\n * ...\n *\n * if (isResourcePermission(request.permission, RESOURCE_TYPE_SCAFFOLDER_TEMPLATE)) {\n * return createScaffolderConditionalDecision(\n * request.permission,\n * { anyOf: [...insert conditions here...] }\n * );\n * }\n *\n * ...\n * }\n *\n * ```\n *\n * @alpha\n */\nexport const createScaffolderTemplateConditionalDecision =\n templateConditionExports.createConditionalDecision;\n\n/**\n * These conditions are used when creating conditional decisions for scaffolder\n * templates that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderTemplateConditions = templateConditionExports.conditions;\n\n/**\n * @alpha\n */\nexport const createScaffolderActionConditionalDecision =\n actionsConditionExports.createConditionalDecision;\n\n/**\n *\n * These conditions are used when creating conditional decisions for scaffolder\n * actions that are returned by authorization policies.\n *\n * @alpha\n */\nexport const scaffolderActionConditions = actionsConditionExports.conditions;\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createBackendPlugin,\n coreServices,\n} from '@backstage/backend-plugin-api';\nimport { loggerToWinstonLogger } from '@backstage/backend-common';\nimport { ScmIntegrations } from '@backstage/integration';\nimport { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha';\nimport {\n TaskBroker,\n TemplateAction,\n TemplateFilter,\n TemplateGlobal,\n} from '@backstage/plugin-scaffolder-node';\nimport {\n scaffolderActionsExtensionPoint,\n scaffolderTaskBrokerExtensionPoint,\n scaffolderTemplatingExtensionPoint,\n} from '@backstage/plugin-scaffolder-node/alpha';\nimport {\n createCatalogRegisterAction,\n createCatalogWriteAction,\n createDebugLogAction,\n createFetchCatalogEntityAction,\n createFetchPlainAction,\n createFetchPlainFileAction,\n createFetchTemplateAction,\n createFilesystemDeleteAction,\n createFilesystemRenameAction,\n createWaitAction,\n} from './scaffolder';\nimport { createRouter } from './service/router';\n\n/**\n * Scaffolder plugin\n *\n * @alpha\n */\nexport const scaffolderPlugin = createBackendPlugin({\n pluginId: 'scaffolder',\n register(env) {\n const addedActions = new Array<TemplateAction<any, any>>();\n env.registerExtensionPoint(scaffolderActionsExtensionPoint, {\n addActions(...newActions: TemplateAction<any>[]) {\n addedActions.push(...newActions);\n },\n });\n\n let taskBroker: TaskBroker | undefined;\n env.registerExtensionPoint(scaffolderTaskBrokerExtensionPoint, {\n setTaskBroker(newTaskBroker) {\n if (taskBroker) {\n throw new Error('Task broker may only be set once');\n }\n taskBroker = newTaskBroker;\n },\n });\n\n const additionalTemplateFilters: Record<string, TemplateFilter> = {};\n const additionalTemplateGlobals: Record<string, TemplateGlobal> = {};\n env.registerExtensionPoint(scaffolderTemplatingExtensionPoint, {\n addTemplateFilters(newFilters) {\n Object.assign(additionalTemplateFilters, newFilters);\n },\n addTemplateGlobals(newGlobals) {\n Object.assign(additionalTemplateGlobals, newGlobals);\n },\n });\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n lifecycle: coreServices.rootLifecycle,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n database: coreServices.database,\n auth: coreServices.auth,\n discovery: coreServices.discovery,\n httpRouter: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n catalogClient: catalogServiceRef,\n },\n async init({\n logger,\n config,\n lifecycle,\n reader,\n database,\n auth,\n discovery,\n httpRouter,\n httpAuth,\n catalogClient,\n permissions,\n }) {\n const log = loggerToWinstonLogger(logger);\n const integrations = ScmIntegrations.fromConfig(config);\n\n const actions = [\n // actions provided from other modules\n ...addedActions,\n\n // built-in actions for the scaffolder\n createFetchPlainAction({\n reader,\n integrations,\n }),\n createFetchPlainFileAction({\n reader,\n integrations,\n }),\n createFetchTemplateAction({\n integrations,\n reader,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n }),\n createDebugLogAction(),\n createWaitAction(),\n // todo(blam): maybe these should be a -catalog module?\n createCatalogRegisterAction({ catalogClient, integrations, auth }),\n createFetchCatalogEntityAction({ catalogClient, auth }),\n createCatalogWriteAction(),\n createFilesystemDeleteAction(),\n createFilesystemRenameAction(),\n ];\n\n const actionIds = actions.map(action => action.id).join(', ');\n\n log.info(\n `Starting scaffolder with the following actions enabled ${actionIds}`,\n );\n\n const router = await createRouter({\n logger: log,\n config,\n database,\n catalogClient,\n reader,\n lifecycle,\n actions,\n taskBroker,\n additionalTemplateFilters,\n additionalTemplateGlobals,\n auth,\n httpAuth,\n discovery,\n permissions,\n });\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["createConditionExports","RESOURCE_TYPE_SCAFFOLDER_TEMPLATE","scaffolderTemplateRules","RESOURCE_TYPE_SCAFFOLDER_ACTION","scaffolderActionRules","createBackendPlugin","scaffolderActionsExtensionPoint","scaffolderTaskBrokerExtensionPoint","scaffolderTemplatingExtensionPoint","coreServices","catalogServiceRef","loggerToWinstonLogger","ScmIntegrations","createFetchPlainAction","createFetchPlainFileAction","createFetchTemplateAction","createDebugLogAction","createWaitAction","createCatalogRegisterAction","createFetchCatalogEntityAction","createCatalogWriteAction","createFilesystemDeleteAction","createFilesystemRenameAction","router","createRouter"],"mappings":"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"}
|
|
@@ -29,12 +29,15 @@ var gerrit = require('@backstage/plugin-scaffolder-backend-module-gerrit');
|
|
|
29
29
|
var gitlab = require('@backstage/plugin-scaffolder-backend-module-gitlab');
|
|
30
30
|
var pluginScaffolderBackendModuleGitea = require('@backstage/plugin-scaffolder-backend-module-gitea');
|
|
31
31
|
var uuid = require('uuid');
|
|
32
|
+
var tar = require('tar');
|
|
33
|
+
var concatStream = require('concat-stream');
|
|
34
|
+
var util = require('util');
|
|
35
|
+
var stream = require('stream');
|
|
32
36
|
var ObservableImpl = require('zen-observable');
|
|
33
37
|
var lodash = require('lodash');
|
|
34
38
|
var PQueue = require('p-queue');
|
|
35
39
|
var winston = require('winston');
|
|
36
40
|
var nunjucks = require('nunjucks');
|
|
37
|
-
var stream = require('stream');
|
|
38
41
|
var pluginPermissionNode = require('@backstage/plugin-permission-node');
|
|
39
42
|
var promClient = require('prom-client');
|
|
40
43
|
var pluginPermissionCommon = require('@backstage/plugin-permission-common');
|
|
@@ -69,6 +72,8 @@ var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
|
69
72
|
var path__default = /*#__PURE__*/_interopDefaultCompat(path);
|
|
70
73
|
var globby__default = /*#__PURE__*/_interopDefaultCompat(globby);
|
|
71
74
|
var get__default = /*#__PURE__*/_interopDefaultCompat(get);
|
|
75
|
+
var tar__default = /*#__PURE__*/_interopDefaultCompat(tar);
|
|
76
|
+
var concatStream__default = /*#__PURE__*/_interopDefaultCompat(concatStream);
|
|
72
77
|
var ObservableImpl__default = /*#__PURE__*/_interopDefaultCompat(ObservableImpl);
|
|
73
78
|
var PQueue__default = /*#__PURE__*/_interopDefaultCompat(PQueue);
|
|
74
79
|
var winston__namespace = /*#__PURE__*/_interopNamespaceCompat(winston);
|
|
@@ -1521,6 +1526,23 @@ const intervalFromNowTill = (timeoutS, knex) => {
|
|
|
1521
1526
|
return heartbeatInterval;
|
|
1522
1527
|
};
|
|
1523
1528
|
|
|
1529
|
+
const pipeline = util.promisify(stream.pipeline);
|
|
1530
|
+
const serializeWorkspace = async (path) => {
|
|
1531
|
+
return await new Promise(async (resolve) => {
|
|
1532
|
+
await pipeline(tar__default.default.create({ cwd: path }, [""]), concatStream__default.default(resolve));
|
|
1533
|
+
});
|
|
1534
|
+
};
|
|
1535
|
+
const restoreWorkspace = async (path, buffer) => {
|
|
1536
|
+
if (buffer) {
|
|
1537
|
+
await pipeline(
|
|
1538
|
+
stream.Readable.from(buffer),
|
|
1539
|
+
tar__default.default.extract({
|
|
1540
|
+
C: path
|
|
1541
|
+
})
|
|
1542
|
+
);
|
|
1543
|
+
}
|
|
1544
|
+
};
|
|
1545
|
+
|
|
1524
1546
|
var __defProp$3 = Object.defineProperty;
|
|
1525
1547
|
var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
1526
1548
|
var __publicField$3 = (obj, key, value) => {
|
|
@@ -1844,6 +1866,22 @@ class DatabaseTaskStore {
|
|
|
1844
1866
|
}
|
|
1845
1867
|
});
|
|
1846
1868
|
}
|
|
1869
|
+
async rehydrateWorkspace(options) {
|
|
1870
|
+
const [result] = await this.db("tasks").where({ id: options.taskId }).select("workspace");
|
|
1871
|
+
await restoreWorkspace(options.targetPath, result.workspace);
|
|
1872
|
+
}
|
|
1873
|
+
async cleanWorkspace({ taskId }) {
|
|
1874
|
+
await this.db("tasks").where({ id: taskId }).update({
|
|
1875
|
+
workspace: void 0
|
|
1876
|
+
});
|
|
1877
|
+
}
|
|
1878
|
+
async serializeWorkspace(options) {
|
|
1879
|
+
if (options.path) {
|
|
1880
|
+
await this.db("tasks").where({ id: options.taskId }).update({
|
|
1881
|
+
workspace: await serializeWorkspace(options.path)
|
|
1882
|
+
});
|
|
1883
|
+
}
|
|
1884
|
+
}
|
|
1847
1885
|
async cancelTask(options) {
|
|
1848
1886
|
const { taskId, body } = options;
|
|
1849
1887
|
const serializedBody = JSON.stringify(body);
|
|
@@ -1928,17 +1966,25 @@ var __publicField$2 = (obj, key, value) => {
|
|
|
1928
1966
|
};
|
|
1929
1967
|
class TaskManager {
|
|
1930
1968
|
// Runs heartbeat internally
|
|
1931
|
-
constructor(task, storage, signal, logger, auth) {
|
|
1969
|
+
constructor(task, storage, signal, logger, auth, config) {
|
|
1932
1970
|
this.task = task;
|
|
1933
1971
|
this.storage = storage;
|
|
1934
1972
|
this.signal = signal;
|
|
1935
1973
|
this.logger = logger;
|
|
1936
1974
|
this.auth = auth;
|
|
1975
|
+
this.config = config;
|
|
1937
1976
|
__publicField$2(this, "isDone", false);
|
|
1938
1977
|
__publicField$2(this, "heartbeatTimeoutId");
|
|
1939
1978
|
}
|
|
1940
|
-
static create(task, storage, abortSignal, logger, auth) {
|
|
1941
|
-
const agent = new TaskManager(
|
|
1979
|
+
static create(task, storage, abortSignal, logger, auth, config) {
|
|
1980
|
+
const agent = new TaskManager(
|
|
1981
|
+
task,
|
|
1982
|
+
storage,
|
|
1983
|
+
abortSignal,
|
|
1984
|
+
logger,
|
|
1985
|
+
auth,
|
|
1986
|
+
config
|
|
1987
|
+
);
|
|
1942
1988
|
agent.startTimeout();
|
|
1943
1989
|
return agent;
|
|
1944
1990
|
}
|
|
@@ -1957,6 +2003,12 @@ class TaskManager {
|
|
|
1957
2003
|
async getWorkspaceName() {
|
|
1958
2004
|
return this.task.taskId;
|
|
1959
2005
|
}
|
|
2006
|
+
async rehydrateWorkspace(options) {
|
|
2007
|
+
var _a, _b;
|
|
2008
|
+
if (this.isWorkspaceSerializationEnabled()) {
|
|
2009
|
+
(_b = (_a = this.storage).rehydrateWorkspace) == null ? void 0 : _b.call(_a, options);
|
|
2010
|
+
}
|
|
2011
|
+
}
|
|
1960
2012
|
get done() {
|
|
1961
2013
|
return this.isDone;
|
|
1962
2014
|
}
|
|
@@ -1983,6 +2035,21 @@ class TaskManager {
|
|
|
1983
2035
|
state: this.task.state
|
|
1984
2036
|
}));
|
|
1985
2037
|
}
|
|
2038
|
+
async serializeWorkspace(options) {
|
|
2039
|
+
var _a, _b;
|
|
2040
|
+
if (this.isWorkspaceSerializationEnabled()) {
|
|
2041
|
+
await ((_b = (_a = this.storage).serializeWorkspace) == null ? void 0 : _b.call(_a, {
|
|
2042
|
+
path: options.path,
|
|
2043
|
+
taskId: this.task.taskId
|
|
2044
|
+
}));
|
|
2045
|
+
}
|
|
2046
|
+
}
|
|
2047
|
+
async cleanWorkspace() {
|
|
2048
|
+
var _a, _b;
|
|
2049
|
+
if (this.isWorkspaceSerializationEnabled()) {
|
|
2050
|
+
await ((_b = (_a = this.storage).cleanWorkspace) == null ? void 0 : _b.call(_a, { taskId: this.task.taskId }));
|
|
2051
|
+
}
|
|
2052
|
+
}
|
|
1986
2053
|
async complete(result, metadata) {
|
|
1987
2054
|
await this.storage.completeTask({
|
|
1988
2055
|
taskId: this.task.taskId,
|
|
@@ -2011,6 +2078,12 @@ class TaskManager {
|
|
|
2011
2078
|
}
|
|
2012
2079
|
}, 1e3);
|
|
2013
2080
|
}
|
|
2081
|
+
isWorkspaceSerializationEnabled() {
|
|
2082
|
+
var _a, _b;
|
|
2083
|
+
return (_b = (_a = this.config) == null ? void 0 : _a.getOptionalBoolean(
|
|
2084
|
+
"scaffolder.EXPERIMENTAL_workspaceSerialization"
|
|
2085
|
+
)) != null ? _b : false;
|
|
2086
|
+
}
|
|
2014
2087
|
async getInitiatorCredentials() {
|
|
2015
2088
|
const secrets = this.task.secrets;
|
|
2016
2089
|
if (secrets && secrets.__initiatorCredentials) {
|
|
@@ -2110,7 +2183,8 @@ class StorageTaskBroker {
|
|
|
2110
2183
|
this.storage,
|
|
2111
2184
|
abortController.signal,
|
|
2112
2185
|
this.logger,
|
|
2113
|
-
this.auth
|
|
2186
|
+
this.auth,
|
|
2187
|
+
this.config
|
|
2114
2188
|
);
|
|
2115
2189
|
}
|
|
2116
2190
|
await this.waitForDispatch();
|
|
@@ -2568,7 +2642,7 @@ class NunjucksWorkflowRunner {
|
|
|
2568
2642
|
});
|
|
2569
2643
|
}
|
|
2570
2644
|
async executeStep(task, step, context, renderTemplate, taskTrack, workspacePath, decision) {
|
|
2571
|
-
var _a, _b, _c, _d, _e, _f;
|
|
2645
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
2572
2646
|
const stepTrack = await this.tracker.stepStart(task, step);
|
|
2573
2647
|
if (task.cancelSignal.aborted) {
|
|
2574
2648
|
throw new Error(`Step ${step.name} has been cancelled.`);
|
|
@@ -2686,7 +2760,7 @@ class NunjucksWorkflowRunner {
|
|
|
2686
2760
|
logStream: streamLogger,
|
|
2687
2761
|
workspacePath,
|
|
2688
2762
|
async checkpoint(keySuffix, fn) {
|
|
2689
|
-
var _a2, _b2, _c2, _d2;
|
|
2763
|
+
var _a2, _b2, _c2, _d2, _e2;
|
|
2690
2764
|
const key = `v1.task.checkpoint.${keySuffix}`;
|
|
2691
2765
|
try {
|
|
2692
2766
|
let prevValue;
|
|
@@ -2712,6 +2786,8 @@ class NunjucksWorkflowRunner {
|
|
|
2712
2786
|
reason: errors.stringifyError(err)
|
|
2713
2787
|
});
|
|
2714
2788
|
throw err;
|
|
2789
|
+
} finally {
|
|
2790
|
+
await ((_e2 = task.serializeWorkspace) == null ? void 0 : _e2.call(task, { path: workspacePath }));
|
|
2715
2791
|
}
|
|
2716
2792
|
},
|
|
2717
2793
|
createTemporaryDirectory: async () => {
|
|
@@ -2743,23 +2819,25 @@ class NunjucksWorkflowRunner {
|
|
|
2743
2819
|
if (task.cancelSignal.aborted) {
|
|
2744
2820
|
throw new Error(`Step ${step.name} has been cancelled.`);
|
|
2745
2821
|
}
|
|
2822
|
+
await ((_g = task.cleanWorkspace) == null ? void 0 : _g.call(task));
|
|
2746
2823
|
await stepTrack.markSuccessful();
|
|
2747
2824
|
} catch (err) {
|
|
2748
2825
|
await taskTrack.markFailed(step, err);
|
|
2749
2826
|
await stepTrack.markFailed();
|
|
2750
2827
|
throw err;
|
|
2828
|
+
} finally {
|
|
2829
|
+
await ((_h = task.serializeWorkspace) == null ? void 0 : _h.call(task, { path: workspacePath }));
|
|
2751
2830
|
}
|
|
2752
2831
|
}
|
|
2753
2832
|
async execute(task) {
|
|
2833
|
+
var _a;
|
|
2754
2834
|
if (!isValidTaskSpec(task.spec)) {
|
|
2755
2835
|
throw new errors.InputError(
|
|
2756
2836
|
"Wrong template version executed with the workflow engine"
|
|
2757
2837
|
);
|
|
2758
2838
|
}
|
|
2759
|
-
const
|
|
2760
|
-
|
|
2761
|
-
await task.getWorkspaceName()
|
|
2762
|
-
);
|
|
2839
|
+
const taskId = await task.getWorkspaceName();
|
|
2840
|
+
const workspacePath = path__default.default.join(this.options.workingDirectory, taskId);
|
|
2763
2841
|
const { additionalTemplateFilters, additionalTemplateGlobals } = this.options;
|
|
2764
2842
|
const renderTemplate = await SecureTemplater.loadRenderer({
|
|
2765
2843
|
templateFilters: {
|
|
@@ -2769,6 +2847,7 @@ class NunjucksWorkflowRunner {
|
|
|
2769
2847
|
templateGlobals: additionalTemplateGlobals
|
|
2770
2848
|
});
|
|
2771
2849
|
try {
|
|
2850
|
+
await ((_a = task.rehydrateWorkspace) == null ? void 0 : _a.call(task, { taskId, targetPath: workspacePath }));
|
|
2772
2851
|
const taskTrack = await this.tracker.taskStart(task);
|
|
2773
2852
|
await fs__default.default.ensureDir(workspacePath);
|
|
2774
2853
|
const context = {
|
|
@@ -3701,4 +3780,4 @@ exports.createRouter = createRouter;
|
|
|
3701
3780
|
exports.createWaitAction = createWaitAction;
|
|
3702
3781
|
exports.scaffolderActionRules = scaffolderActionRules;
|
|
3703
3782
|
exports.scaffolderTemplateRules = scaffolderTemplateRules;
|
|
3704
|
-
//# sourceMappingURL=router-
|
|
3783
|
+
//# sourceMappingURL=router-DhoUgDz0.cjs.js.map
|