@backstage/plugin-scaffolder-backend 1.21.2 → 1.22.0-next.0
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 +39 -43
- package/alpha/package.json +1 -1
- package/dist/alpha.cjs.js +1 -1
- package/dist/cjs/{router-f392ade6.cjs.js → router-ae706822.cjs.js} +62 -3
- package/dist/cjs/router-ae706822.cjs.js.map +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +35 -1
- package/migrations/20240203232000_state.js +35 -0
- package/package.json +28 -27
- package/dist/cjs/router-f392ade6.cjs.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,48 +1,44 @@
|
|
|
1
1
|
# @backstage/plugin-scaffolder-backend
|
|
2
2
|
|
|
3
|
-
## 1.
|
|
4
|
-
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- @backstage/
|
|
19
|
-
- @backstage/plugin-
|
|
20
|
-
- @backstage/
|
|
21
|
-
- @backstage/
|
|
22
|
-
- @backstage/
|
|
23
|
-
- @backstage/plugin-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
- @backstage/backend-
|
|
31
|
-
- @backstage/
|
|
32
|
-
- @backstage/plugin-
|
|
33
|
-
- @backstage/
|
|
34
|
-
- @backstage/plugin-
|
|
35
|
-
- @backstage/plugin-
|
|
36
|
-
- @backstage/
|
|
37
|
-
- @backstage/
|
|
38
|
-
- @backstage/
|
|
39
|
-
- @backstage/
|
|
40
|
-
- @backstage/
|
|
41
|
-
- @backstage/plugin-scaffolder-
|
|
42
|
-
- @backstage/plugin-scaffolder-node@0.3.1
|
|
43
|
-
- @backstage/backend-plugin-api@0.6.11
|
|
44
|
-
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.8
|
|
45
|
-
- @backstage/plugin-catalog-node@1.7.1
|
|
3
|
+
## 1.22.0-next.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- c6b132e: Introducing checkpoints for scaffolder task action idempotency
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- f44589d: Introduced `createMockActionContext` to unify the way of creating scaffolder mock context.
|
|
12
|
+
|
|
13
|
+
It will help to maintain tests in a long run during structural changes of action context.
|
|
14
|
+
|
|
15
|
+
- 0fb419b: Updated dependency `uuid` to `^9.0.0`.
|
|
16
|
+
Updated dependency `@types/uuid` to `^9.0.0`.
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
- @backstage/backend-common@0.21.3-next.0
|
|
19
|
+
- @backstage/plugin-auth-node@0.4.8-next.0
|
|
20
|
+
- @backstage/errors@1.2.4-next.0
|
|
21
|
+
- @backstage/plugin-scaffolder-node@0.3.3-next.0
|
|
22
|
+
- @backstage/backend-plugin-api@0.6.13-next.0
|
|
23
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.3-next.0
|
|
24
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.3-next.0
|
|
25
|
+
- @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.3-next.0
|
|
26
|
+
- @backstage/plugin-scaffolder-backend-module-gerrit@0.1.5-next.0
|
|
27
|
+
- @backstage/plugin-scaffolder-backend-module-github@0.2.3-next.0
|
|
28
|
+
- @backstage/plugin-scaffolder-backend-module-gitlab@0.2.16-next.0
|
|
29
|
+
- @backstage/plugin-scaffolder-backend-module-azure@0.1.5-next.0
|
|
30
|
+
- @backstage/plugin-scaffolder-backend-module-gitea@0.1.3-next.0
|
|
31
|
+
- @backstage/plugin-permission-common@0.7.13-next.0
|
|
32
|
+
- @backstage/plugin-catalog-node@1.8.0-next.0
|
|
33
|
+
- @backstage/backend-tasks@0.5.18-next.0
|
|
34
|
+
- @backstage/plugin-permission-node@0.7.24-next.0
|
|
35
|
+
- @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.10-next.0
|
|
36
|
+
- @backstage/catalog-client@1.6.1-next.0
|
|
37
|
+
- @backstage/catalog-model@1.4.5-next.0
|
|
38
|
+
- @backstage/config@1.1.2-next.0
|
|
39
|
+
- @backstage/integration@1.9.1-next.0
|
|
40
|
+
- @backstage/types@1.1.1
|
|
41
|
+
- @backstage/plugin-scaffolder-common@1.5.1-next.0
|
|
46
42
|
|
|
47
43
|
## 1.21.0
|
|
48
44
|
|
package/alpha/package.json
CHANGED
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-ae706822.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');
|
|
@@ -1742,6 +1742,18 @@ class DatabaseTaskStore {
|
|
|
1742
1742
|
body: serializedBody
|
|
1743
1743
|
});
|
|
1744
1744
|
}
|
|
1745
|
+
async getTaskState({ taskId }) {
|
|
1746
|
+
const [result] = await this.db("tasks").where({ id: taskId }).select("state");
|
|
1747
|
+
return result.state ? JSON.parse(result.state) : void 0;
|
|
1748
|
+
}
|
|
1749
|
+
async saveTaskState(options) {
|
|
1750
|
+
if (options.state) {
|
|
1751
|
+
const serializedState = JSON.stringify({ state: options.state });
|
|
1752
|
+
await this.db("tasks").where({ id: options.taskId }).update({
|
|
1753
|
+
state: serializedState
|
|
1754
|
+
});
|
|
1755
|
+
}
|
|
1756
|
+
}
|
|
1745
1757
|
async listEvents(options) {
|
|
1746
1758
|
const { taskId, after } = options;
|
|
1747
1759
|
const rawEvents = await this.db("task_events").where({
|
|
@@ -1918,6 +1930,23 @@ class TaskManager {
|
|
|
1918
1930
|
body: { message, ...logMetadata }
|
|
1919
1931
|
});
|
|
1920
1932
|
}
|
|
1933
|
+
async getTaskState() {
|
|
1934
|
+
var _a, _b;
|
|
1935
|
+
return (_b = (_a = this.storage).getTaskState) == null ? void 0 : _b.call(_a, { taskId: this.task.taskId });
|
|
1936
|
+
}
|
|
1937
|
+
async updateCheckpoint(options) {
|
|
1938
|
+
var _a, _b;
|
|
1939
|
+
const { key, ...value } = options;
|
|
1940
|
+
if (this.task.state) {
|
|
1941
|
+
this.task.state.checkpoints[key] = value;
|
|
1942
|
+
} else {
|
|
1943
|
+
this.task.state = { checkpoints: { [key]: value } };
|
|
1944
|
+
}
|
|
1945
|
+
await ((_b = (_a = this.storage).saveTaskState) == null ? void 0 : _b.call(_a, {
|
|
1946
|
+
taskId: this.task.taskId,
|
|
1947
|
+
state: this.task.state
|
|
1948
|
+
}));
|
|
1949
|
+
}
|
|
1921
1950
|
async complete(result, metadata) {
|
|
1922
1951
|
await this.storage.completeTask({
|
|
1923
1952
|
taskId: this.task.taskId,
|
|
@@ -2311,7 +2340,7 @@ class NunjucksWorkflowRunner {
|
|
|
2311
2340
|
});
|
|
2312
2341
|
}
|
|
2313
2342
|
async executeStep(task, step, context, renderTemplate, taskTrack, workspacePath, decision) {
|
|
2314
|
-
var _a, _b, _c, _d, _e;
|
|
2343
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2315
2344
|
const stepTrack = await this.tracker.stepStart(task, step);
|
|
2316
2345
|
if (task.cancelSignal.aborted) {
|
|
2317
2346
|
throw new Error(`Step ${step.name} has been cancelled.`);
|
|
@@ -2406,6 +2435,7 @@ class NunjucksWorkflowRunner {
|
|
|
2406
2435
|
}
|
|
2407
2436
|
const tmpDirs = new Array();
|
|
2408
2437
|
const stepOutput = {};
|
|
2438
|
+
const prevTaskState = await ((_e = task.getTaskState) == null ? void 0 : _e.call(task));
|
|
2409
2439
|
for (const iteration of iterations) {
|
|
2410
2440
|
if (iteration.each) {
|
|
2411
2441
|
taskLogger.info(
|
|
@@ -2418,10 +2448,39 @@ class NunjucksWorkflowRunner {
|
|
|
2418
2448
|
}
|
|
2419
2449
|
await action.handler({
|
|
2420
2450
|
input: iteration.input,
|
|
2421
|
-
secrets: (
|
|
2451
|
+
secrets: (_f = task.secrets) != null ? _f : {},
|
|
2422
2452
|
logger: taskLogger,
|
|
2423
2453
|
logStream: streamLogger,
|
|
2424
2454
|
workspacePath,
|
|
2455
|
+
async checkpoint(keySuffix, fn) {
|
|
2456
|
+
var _a2, _b2, _c2, _d2;
|
|
2457
|
+
const key = `v1.task.checkpoint.${keySuffix}`;
|
|
2458
|
+
try {
|
|
2459
|
+
let prevValue;
|
|
2460
|
+
if (prevTaskState) {
|
|
2461
|
+
const prevState = (_b2 = (_a2 = prevTaskState.state) == null ? void 0 : _a2.checkpoints) == null ? void 0 : _b2[key];
|
|
2462
|
+
if (prevState && prevState.status === "success") {
|
|
2463
|
+
prevValue = prevState.value;
|
|
2464
|
+
}
|
|
2465
|
+
}
|
|
2466
|
+
const value = prevValue ? prevValue : await fn();
|
|
2467
|
+
if (!prevValue) {
|
|
2468
|
+
(_c2 = task.updateCheckpoint) == null ? void 0 : _c2.call(task, {
|
|
2469
|
+
key,
|
|
2470
|
+
status: "success",
|
|
2471
|
+
value
|
|
2472
|
+
});
|
|
2473
|
+
}
|
|
2474
|
+
return value;
|
|
2475
|
+
} catch (err) {
|
|
2476
|
+
(_d2 = task.updateCheckpoint) == null ? void 0 : _d2.call(task, {
|
|
2477
|
+
key,
|
|
2478
|
+
status: "failed",
|
|
2479
|
+
reason: errors.stringifyError(err)
|
|
2480
|
+
});
|
|
2481
|
+
throw err;
|
|
2482
|
+
}
|
|
2483
|
+
},
|
|
2425
2484
|
createTemporaryDirectory: async () => {
|
|
2426
2485
|
const tmpDir = await fs__default["default"].mkdtemp(
|
|
2427
2486
|
`${workspacePath}_step-${step.id}-`
|
|
@@ -3389,4 +3448,4 @@ exports.createRouter = createRouter;
|
|
|
3389
3448
|
exports.createWaitAction = createWaitAction;
|
|
3390
3449
|
exports.scaffolderActionRules = scaffolderActionRules;
|
|
3391
3450
|
exports.scaffolderTemplateRules = scaffolderTemplateRules;
|
|
3392
|
-
//# sourceMappingURL=router-
|
|
3451
|
+
//# sourceMappingURL=router-ae706822.cjs.js.map
|