@backstage/plugin-scaffolder-backend 1.21.1 → 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 CHANGED
@@ -1,26 +1,44 @@
1
1
  # @backstage/plugin-scaffolder-backend
2
2
 
3
- ## 1.21.1
4
-
5
- ### Patch Changes
6
-
7
- - Updated dependencies
8
- - @backstage/backend-common@0.21.1
9
- - @backstage/backend-tasks@0.5.16
10
- - @backstage/plugin-auth-node@0.4.6
11
- - @backstage/plugin-permission-node@0.7.22
12
- - @backstage/plugin-scaffolder-backend-module-azure@0.1.3
13
- - @backstage/plugin-scaffolder-backend-module-bitbucket@0.2.1
14
- - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.1
15
- - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.1
16
- - @backstage/plugin-scaffolder-backend-module-gerrit@0.1.3
17
- - @backstage/plugin-scaffolder-backend-module-gitea@0.1.1
18
- - @backstage/plugin-scaffolder-backend-module-github@0.2.1
19
- - @backstage/plugin-scaffolder-backend-module-gitlab@0.2.14
20
- - @backstage/plugin-scaffolder-node@0.3.1
21
- - @backstage/backend-plugin-api@0.6.11
22
- - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.8
23
- - @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
24
42
 
25
43
  ## 1.21.0
26
44
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder-backend",
3
- "version": "1.21.1",
3
+ "version": "1.22.0-next.0",
4
4
  "main": "../dist/alpha.cjs.js",
5
5
  "types": "../dist/alpha.d.ts"
6
6
  }
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-f392ade6.cjs.js');
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: (_e = task.secrets) != null ? _e : {},
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-f392ade6.cjs.js.map
3451
+ //# sourceMappingURL=router-ae706822.cjs.js.map