rampway 0.2.5 → 0.3.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.
Files changed (58) hide show
  1. package/README.md +12 -0
  2. package/build/src/cli.d.ts.map +1 -1
  3. package/build/src/cli.js +35 -7
  4. package/build/src/cli.js.map +1 -1
  5. package/build/src/commands/deploy.d.ts.map +1 -1
  6. package/build/src/commands/deploy.js +31 -7
  7. package/build/src/commands/deploy.js.map +1 -1
  8. package/build/src/commands/task.d.ts +9 -0
  9. package/build/src/commands/task.d.ts.map +1 -0
  10. package/build/src/commands/task.js +23 -0
  11. package/build/src/commands/task.js.map +1 -0
  12. package/build/src/config/validate-config.d.ts +5 -0
  13. package/build/src/config/validate-config.d.ts.map +1 -1
  14. package/build/src/config/validate-config.js +139 -0
  15. package/build/src/config/validate-config.js.map +1 -1
  16. package/build/src/core/deploy-log.d.ts +66 -0
  17. package/build/src/core/deploy-log.d.ts.map +1 -0
  18. package/build/src/core/deploy-log.js +112 -0
  19. package/build/src/core/deploy-log.js.map +1 -0
  20. package/build/src/core/deploy-runner.js +5 -5
  21. package/build/src/core/deploy-runner.js.map +1 -1
  22. package/build/src/core/locks.d.ts +2 -1
  23. package/build/src/core/locks.d.ts.map +1 -1
  24. package/build/src/core/locks.js +28 -9
  25. package/build/src/core/locks.js.map +1 -1
  26. package/build/src/core/operational-task-runner.d.ts +21 -0
  27. package/build/src/core/operational-task-runner.d.ts.map +1 -0
  28. package/build/src/core/operational-task-runner.js +66 -0
  29. package/build/src/core/operational-task-runner.js.map +1 -0
  30. package/build/src/core/redaction.d.ts +31 -3
  31. package/build/src/core/redaction.d.ts.map +1 -1
  32. package/build/src/core/redaction.js +83 -5
  33. package/build/src/core/redaction.js.map +1 -1
  34. package/build/src/core/release-manager.d.ts +11 -0
  35. package/build/src/core/release-manager.d.ts.map +1 -1
  36. package/build/src/core/release-manager.js +22 -0
  37. package/build/src/core/release-manager.js.map +1 -1
  38. package/build/src/core/reporter.d.ts +37 -6
  39. package/build/src/core/reporter.d.ts.map +1 -1
  40. package/build/src/core/reporter.js +46 -6
  41. package/build/src/core/reporter.js.map +1 -1
  42. package/build/src/core/task-runner.d.ts +4 -2
  43. package/build/src/core/task-runner.d.ts.map +1 -1
  44. package/build/src/core/task-runner.js +34 -8
  45. package/build/src/core/task-runner.js.map +1 -1
  46. package/build/src/transports/local-transport.d.ts +19 -2
  47. package/build/src/transports/local-transport.d.ts.map +1 -1
  48. package/build/src/transports/local-transport.js +100 -12
  49. package/build/src/transports/local-transport.js.map +1 -1
  50. package/build/src/transports/ssh-transport.d.ts +43 -4
  51. package/build/src/transports/ssh-transport.d.ts.map +1 -1
  52. package/build/src/transports/ssh-transport.js +111 -18
  53. package/build/src/transports/ssh-transport.js.map +1 -1
  54. package/build/src/types.d.ts +20 -0
  55. package/build/src/types.d.ts.map +1 -1
  56. package/docs/config-reference.md +57 -0
  57. package/docs/migration-from-capistrano.md +25 -3
  58. package/package.json +3 -2
@@ -0,0 +1,112 @@
1
+ // @ts-check
2
+ /**
3
+ * @file Persistent per-deploy log.
4
+ *
5
+ * A deploy streams every lifecycle step and command chunk through the
6
+ * {@link import('./reporter.js').Reporter}. This module tees that transcript to
7
+ * a timestamped file on the machine running the deploy (relative to the deploy
8
+ * source, or a configurable directory), keeping only the most recent N logs, so
9
+ * a full record of each deploy survives for later inspection — the kind of
10
+ * per-deploy log Capistrano keeps built in.
11
+ */
12
+ import fs from "node:fs";
13
+ import path from "node:path";
14
+ import { optionalBoolean, optionalNonBlankString, optionalPositiveInteger } from "typanic";
15
+ import { releaseIdFromDate } from "./release-id.js";
16
+ const DEFAULT_DIR = "log/deploys";
17
+ const DEFAULT_KEEP = 20;
18
+ /**
19
+ * @name DeployLogSettings
20
+ * @typedef {object} DeployLogSettings
21
+ * @property {boolean} enabled Whether a per-deploy log file is written.
22
+ * @property {string} dir Log directory; relative paths resolve against the deploy source.
23
+ * @property {number} keep Number of most-recent deploy logs to retain.
24
+ */
25
+ /**
26
+ * Resolves the per-deploy log settings from the loaded Rampway config, applying
27
+ * defaults. `deployLog: false` (or `{enabled: false}`) disables logging.
28
+ *
29
+ * @param {unknown} rawConfig Full loaded Rampway config object.
30
+ * @returns {DeployLogSettings}
31
+ */
32
+ export function resolveDeployLogConfig(rawConfig) {
33
+ const config = rawConfig && typeof rawConfig === "object" ? /** @type {Record<string, unknown>} */ (rawConfig) : {};
34
+ const raw = config.deployLog;
35
+ if (raw === undefined || raw === null)
36
+ return { enabled: true, dir: DEFAULT_DIR, keep: DEFAULT_KEEP };
37
+ if (typeof raw === "boolean")
38
+ return { enabled: raw, dir: DEFAULT_DIR, keep: DEFAULT_KEEP };
39
+ if (typeof raw !== "object" || Array.isArray(raw))
40
+ throw new Error(`deployLog must be a boolean or an object, got ${JSON.stringify(raw)}`);
41
+ // Typanic throws loudly on a malformed field (e.g. `enabled: "false"`) rather
42
+ // than silently coercing it; each accessor returns null when the field is absent.
43
+ const settings = /** @type {Record<string, unknown>} */ (raw);
44
+ return {
45
+ enabled: optionalBoolean(settings.enabled, "deployLog.enabled") ?? true,
46
+ dir: optionalNonBlankString(settings.dir, "deployLog.dir") ?? DEFAULT_DIR,
47
+ keep: optionalPositiveInteger(settings.keep, "deployLog.keep") ?? DEFAULT_KEEP
48
+ };
49
+ }
50
+ /**
51
+ * @name DeployLog
52
+ * @typedef {object} DeployLog
53
+ * @property {string} path Absolute path of the log file being written.
54
+ * @property {import('node:fs').WriteStream} stream Append stream to tee reporter output into.
55
+ * @property {() => Promise<void>} close Flushes and closes the log stream.
56
+ */
57
+ /**
58
+ * Opens the per-deploy log for a run: resolves the directory relative to the
59
+ * deploy source, creates a timestamped file, prunes old logs to the configured
60
+ * keep count, and returns an append stream. Returns `null` when logging is
61
+ * disabled.
62
+ *
63
+ * @param {{config: unknown, sourcePath: string, stageName: string, now?: Date}} args
64
+ * @returns {DeployLog | null}
65
+ */
66
+ export function openDeployLog({ config, sourcePath, stageName, now = new Date() }) {
67
+ const { enabled, dir, keep } = resolveDeployLogConfig(config);
68
+ if (!enabled)
69
+ return null;
70
+ const logDir = path.isAbsolute(dir) ? dir : path.join(sourcePath, dir);
71
+ fs.mkdirSync(logDir, { recursive: true });
72
+ const logPath = path.join(logDir, `${releaseIdFromDate(now)}-${sanitizeStageForFilename(stageName)}.log`);
73
+ // Prune existing logs before opening this run's file, reserving one slot so the
74
+ // total (old logs + this deploy) settles at `keep`. `createWriteStream` creates
75
+ // the file lazily, so pruning here also avoids racing its on-disk appearance.
76
+ pruneOldDeployLogs(logDir, Math.max(0, keep - 1));
77
+ const stream = fs.createWriteStream(logPath, { flags: "a" });
78
+ return { path: logPath, stream, close: () => closeStream(stream) };
79
+ }
80
+ /**
81
+ * @param {string} stageName
82
+ * @returns {string}
83
+ */
84
+ function sanitizeStageForFilename(stageName) {
85
+ return stageName.replace(/[^a-zA-Z0-9._-]/g, "_");
86
+ }
87
+ /**
88
+ * Removes all but the newest `keep` Rampway deploy logs. Only files matching the
89
+ * `<timestamp>-<stage>.log` naming are considered, so unrelated files in the
90
+ * directory are never touched.
91
+ *
92
+ * @param {string} logDir
93
+ * @param {number} keep
94
+ * @returns {void}
95
+ */
96
+ function pruneOldDeployLogs(logDir, keep) {
97
+ const entries = fs.readdirSync(logDir).filter(name => /^\d{14}-.*\.log$/.test(name)).sort();
98
+ const removable = entries.slice(0, Math.max(0, entries.length - keep));
99
+ for (const name of removable)
100
+ fs.rmSync(path.join(logDir, name), { force: true });
101
+ }
102
+ /**
103
+ * @param {import('node:fs').WriteStream} stream
104
+ * @returns {Promise<void>}
105
+ */
106
+ function closeStream(stream) {
107
+ return new Promise((resolve, reject) => {
108
+ stream.on("error", reject);
109
+ stream.end(() => resolve());
110
+ });
111
+ }
112
+ //# sourceMappingURL=deploy-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-log.js","sourceRoot":"","sources":["../../../src/core/deploy-log.js"],"names":[],"mappings":"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"}
@@ -81,9 +81,9 @@ export async function deploy({ transport, stage, sourcePath = process.cwd(), rev
81
81
  await ensureBaseDirs(transport, stage);
82
82
  await runHooks(transport, stage, null, "before_lock");
83
83
  reporter.line(" * Acquiring deploy lock");
84
- await acquireLock(transport, stage, { force });
85
- await runHooks(transport, stage, null, "after_lock");
84
+ const lock = await acquireLock(transport, stage, { force });
86
85
  try {
86
+ await runHooks(transport, stage, null, "after_lock");
87
87
  if (await transport.exists(releasePath))
88
88
  throw new Error(`Release already exists: ${releasePath}`);
89
89
  await runHooks(transport, stage, null, "before_source");
@@ -147,7 +147,7 @@ export async function deploy({ transport, stage, sourcePath = process.cwd(), rev
147
147
  throw err;
148
148
  }
149
149
  finally {
150
- await releaseLock(transport, stage);
150
+ await releaseLock(transport, stage, lock);
151
151
  }
152
152
  }
153
153
  /**
@@ -156,7 +156,7 @@ export async function deploy({ transport, stage, sourcePath = process.cwd(), rev
156
156
  */
157
157
  export async function rollback({ transport, stage, to }) {
158
158
  await ensureBaseDirs(transport, stage);
159
- await acquireLock(transport, stage);
159
+ const lock = await acquireLock(transport, stage);
160
160
  try {
161
161
  const target = to ?? await previousRelease(transport, stage);
162
162
  if (!target)
@@ -171,7 +171,7 @@ export async function rollback({ transport, stage, to }) {
171
171
  return report;
172
172
  }
173
173
  finally {
174
- await releaseLock(transport, stage);
174
+ await releaseLock(transport, stage, lock);
175
175
  }
176
176
  }
177
177
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"deploy-runner.js","sourceRoot":"","sources":["../../../src/core/deploy-runner.js"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAC,QAAQ,EAAC,MAAM,eAAe,CAAA;AACtC,OAAO,EAAC,iBAAiB,EAAC,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AACtC,OAAO,EAAC,WAAW,EAAE,WAAW,EAAC,MAAM,YAAY,CAAA;AACnD,OAAO,EAAC,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAC,MAAM,sBAAsB,CAAA;AAC3I,OAAO,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAA;AACnC,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAC,sBAAsB,EAAE,kBAAkB,EAAC,MAAM,iBAAiB,CAAA;AAE1E,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAA;AAEpE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAK,EAAE,EAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,EAAC,GAAG,EAAE;IACjH,OAAO,uBAAuB,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACvF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAK,EAAE,EAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,EAAC,GAAG,EAAE;IACxH,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACtD,OAAO;QACL,EAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAC;QACpE,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAC;QACjE,EAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,+BAA+B,SAAS,EAAE,EAAC;QACxF,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAC;QAC3E,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mCAAmC,EAAC;QAC9E,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,IAAI,EAAE,EAAC,CAAC,CAAC;QACjH,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC;QAC5E,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,EAAC,CAAC,CAAC;QAC9L,EAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,yBAAyB,EAAC;QACxE,EAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,gCAAgC,KAAK,CAAC,YAAY,EAAE,EAAC;QACjG,EAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAC;KAClE,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,KAAK,EAAE,QAAQ;IACvC,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gCAAgC,EAAC,CAAA;IACtG,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,EAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,QAAQ,SAAS,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAC,CAAA;IAC3I,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gCAAgC,EAAC,CAAA;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAG,iBAAiB,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,EAAC;IACvN,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;IACtG,IAAI,MAAM;QAAE,OAAO,EAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,eAAe,EAAE,SAAS,EAAC,CAAC,EAAC,CAAA;IAC1F,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAC,QAAQ,wEAAwE,CAAC,CAAA;IAC5K,MAAM,aAAa,GAAG,EAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAC,CAAA;IAC9E,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAC3C,qBAAqB;IACrB,MAAM,WAAW,GAAG,qBAAqB,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;IAC5B,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,cAAc,GAAG,KAAK,CAAA;IAC1B,IAAI,gBAAgB,GAAG,KAAK,CAAA;IAC5B,0BAA0B;IAC1B,IAAI,mBAAmB,GAAG,IAAI,CAAA;IAC9B,IAAI,gBAAgB,GAAG,eAAe,CAAA;IACtC,QAAQ,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,aAAa,eAAe,eAAe,SAAS,EAAE,CAAC,CAAA;IACtH,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,CAAA;IACvD,QAAQ,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;IACjD,MAAM,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACtC,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,CAAC,CAAA;IACrD,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IAC1C,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,EAAC,KAAK,EAAC,CAAC,CAAA;IAC5C,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;IACpD,IAAI,CAAC;QACH,IAAI,MAAM,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAA;QAClG,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,CAAA;QACvD,QAAQ,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC/E,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACpC,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QAClD,CAAC;aAAM,IAAI,aAAa,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YACnD,gBAAgB,GAAG,CAAC,MAAM,sBAAsB,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAA;QACnG,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QACrC,CAAC;QACD,cAAc,GAAG,IAAI,CAAA;QACrB,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAA;QAC7D,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;QACzD,MAAM,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;QACvD,MAAM,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAC,CAAC,CAAA;QACnG,mBAAmB,GAAG,MAAM,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;QACnF,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACpF,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,EAAC,mBAAmB,EAAE,QAAQ,EAAC,CAAC,CAAA;QAC9E,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACnF,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACtF,QAAQ,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,CAAA;QAC3F,gBAAgB,GAAG,IAAI,CAAA;QACvB,MAAM,aAAa,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAC,CAAC,CAAA;QACrJ,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACrF,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACrF,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QAC7E,MAAM,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;QACjE,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACpF,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACzD,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACtF,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;QAC/C,MAAM,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAA;QACnD,SAAS,GAAG,IAAI,CAAA;QAChB,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACrF,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACtF,QAAQ,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACvD,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;QACrF,MAAM,MAAM,GAAG,EAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,QAAQ,IAAI,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,EAAC,CAAA;QAC5U,MAAM,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAA;QACxC,IAAI,gBAAgB,CAAA;QACpB,IAAI,cAAc,IAAI,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;YACrD,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,EAAC,mBAAmB,EAAC,CAAC,CAAA;YAChG,CAAC;YAAC,OAAO,SAAS,EAAE,CAAC;gBACnB,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAA;YACrD,CAAC;QACH,CAAC;QACD,GAAG,CAAC,OAAO,GAAG,oBAAoB,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC,CAAA;QAC7F,IAAI,gBAAgB;YAAE,GAAG,CAAC,OAAO,IAAI,2CAA2C,gBAAgB,CAAC,OAAO,EAAE,CAAA;QAC1G,MAAM,GAAG,CAAA;IACX,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,EAAE,EAAC;IACnD,MAAM,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACtC,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,EAAE,IAAI,MAAM,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QAC5D,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;QAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QACrE,IAAI,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,MAAM,EAAE,CAAC,CAAA;QACrG,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;QACzD,MAAM,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,EAAC,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,eAAe,EAAE,QAAQ,IAAI,SAAS,EAAE,KAAK,EAAE,UAAU,EAAC,CAAA;QAC7L,MAAM,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,OAAO,MAAM,CAAA;IACf,CAAC;YAAS,CAAC;QACT,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACrC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAC,KAAK,EAAE,SAAS,EAAE,cAAc,GAAG,KAAK,EAAE,KAAK,EAAE,SAAS,EAAC;IAC/F,MAAM,kBAAkB,GAAG;QACzB,wCAAwC,KAAK,CAAC,SAAS,SAAS;QAChE,cAAc,CAAC,CAAC,CAAC,mEAAmE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,mHAAmH;QACjQ,0EAA0E;KAC3E,CAAA;IACD,MAAM,iBAAiB,GAAG;QACxB,0CAA0C,KAAK,CAAC,SAAS,SAAS;QAClE,2CAA2C,KAAK,CAAC,SAAS,WAAW;QACrE,kCAAkC,KAAK,CAAC,SAAS,WAAW;KAC7D,CAAA;IACD,MAAM,KAAK,GAAG;QACZ,iBAAiB,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,gBAAgB,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,SAAS,YAAY,SAAS,GAAG;QAC3H,SAAS,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,kCAAkC;QAC5E,KAAK,CAAC,OAAO;QACb,iBAAiB;QACjB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACxD,CAAA;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,EAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAC;IACvF,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,GAAG,QAAQ;CAC1E,CAAC,CAAA;IACA,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QACvF,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,KAAK,EAAE,KAAK,CAAC,SAAS;QACtB,SAAS;QACT,QAAQ;QACR,MAAM;QACN,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ;QACtD,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE;QACnB,cAAc,EAAE,OAAO;KACxB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM;IAClD,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,CAAA;IAChD,IAAI,QAAQ,GAAG,EAAE,CAAA;IACjB,IAAI,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC;QAAE,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACvF,MAAM,SAAS,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AACjF,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,yBAAyB,CAAC,SAAS,EAAE,WAAW;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACpD,OAAO,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAA;IACvF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"deploy-runner.js","sourceRoot":"","sources":["../../../src/core/deploy-runner.js"],"names":[],"mappings":"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"}
@@ -10,7 +10,8 @@ export function acquireLock(transport: import("#types").Transport, stage: import
10
10
  /**
11
11
  * @param {import('#types').Transport} transport
12
12
  * @param {import('#types').StageConfig} stage
13
+ * @param {import('#types').LockInfo} lock
13
14
  * @returns {Promise<void>}
14
15
  */
15
- export function releaseLock(transport: import("#types").Transport, stage: import("#types").StageConfig): Promise<void>;
16
+ export function releaseLock(transport: import("#types").Transport, stage: import("#types").StageConfig, lock: import("#types").LockInfo): Promise<void>;
16
17
  //# sourceMappingURL=locks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/core/locks.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,uCALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,cAC5B;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,GACf,OAAO,CAAC,OAAO,QAAQ,EAAE,QAAQ,CAAC,CAc9C;AAED;;;;GAIG;AACH,uCAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIzB"}
1
+ {"version":3,"file":"locks.d.ts","sourceRoot":"","sources":["../../../src/core/locks.js"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,uCALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,cAC5B;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,GACf,OAAO,CAAC,OAAO,QAAQ,EAAE,QAAQ,CAAC,CA2B9C;AAED;;;;;GAKG;AACH,uCALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,QAC5B,OAAO,QAAQ,EAAE,QAAQ,GACvB,OAAO,CAAC,IAAI,CAAC,CAQzB"}
@@ -1,6 +1,8 @@
1
+ import { randomUUID } from "node:crypto";
1
2
  import os from "node:os";
2
3
  import path from "node:path";
3
4
  import { deployPaths } from "./paths.js";
5
+ import { redactText } from "./redaction.js";
4
6
  /**
5
7
  * @param {import('#types').Transport} transport
6
8
  * @param {import('#types').StageConfig} stage
@@ -10,23 +12,40 @@ import { deployPaths } from "./paths.js";
10
12
  export async function acquireLock(transport, stage, { force = false } = {}) {
11
13
  const paths = deployPaths(stage);
12
14
  await transport.mkdirp(path.dirname(paths.lockPath));
13
- if (await transport.exists(paths.lockPath)) {
14
- const lock = await transport.readFile(paths.lockPath);
15
- if (!force)
16
- throw new Error(`Deploy is locked:
17
- ${lock}
15
+ const lockInfo = {
16
+ id: randomUUID(),
17
+ owner: process.env.USER ?? os.userInfo().username,
18
+ host: os.hostname(),
19
+ pid: process.pid,
20
+ createdAt: new Date().toISOString()
21
+ };
22
+ const content = JSON.stringify(lockInfo, null, 2);
23
+ if (await transport.writeFileExclusive(paths.lockPath, content))
24
+ return lockInfo;
25
+ const existing = await transport.readFile(paths.lockPath);
26
+ if (!force)
27
+ throw new Error(`Deploy is locked:
28
+ ${redactText(existing)}
18
29
  Use --force only after verifying no deploy is running.`);
30
+ if (!await transport.removeFileIfContent(paths.lockPath, existing)) {
31
+ throw new Error("Deploy lock ownership changed while forcing; refusing to remove the replacement owner.");
32
+ }
33
+ if (!await transport.writeFileExclusive(paths.lockPath, content)) {
34
+ throw new Error("Deploy lock ownership changed while forcing; refusing to overwrite the new owner.");
19
35
  }
20
- const lockInfo = { owner: process.env.USER ?? os.userInfo().username, host: os.hostname(), pid: process.pid, createdAt: new Date().toISOString() };
21
- await transport.writeFile(paths.lockPath, JSON.stringify(lockInfo, null, 2));
22
36
  return lockInfo;
23
37
  }
24
38
  /**
25
39
  * @param {import('#types').Transport} transport
26
40
  * @param {import('#types').StageConfig} stage
41
+ * @param {import('#types').LockInfo} lock
27
42
  * @returns {Promise<void>}
28
43
  */
29
- export async function releaseLock(transport, stage) {
30
- await transport.rm(deployPaths(stage).lockPath);
44
+ export async function releaseLock(transport, stage, lock) {
45
+ const lockPath = deployPaths(stage).lockPath;
46
+ const expected = JSON.stringify(lock, null, 2);
47
+ if (!await transport.removeFileIfContent(lockPath, expected)) {
48
+ throw new Error("Deploy lock ownership changed or disappeared; refusing to remove another owner's lock.");
49
+ }
31
50
  }
32
51
  //# sourceMappingURL=locks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../src/core/locks.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,EAAC,KAAK,GAAG,KAAK,EAAC,GAAG,EAAE;IACtE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpD,IAAI,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QACrD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC;EAC9B,IAAI;uDACiD,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,QAAQ,GAAG,EAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAC,CAAA;IAChJ,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5E,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,EAAE,KAAK;IAChD,MAAM,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAA;AACjD,CAAC"}
1
+ {"version":3,"file":"locks.js","sourceRoot":"","sources":["../../../src/core/locks.js"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAA;AACtC,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAA;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,EAAC,KAAK,GAAG,KAAK,EAAC,GAAG,EAAE;IACtE,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;IAChC,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG;QACf,EAAE,EAAE,UAAU,EAAE;QAChB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ;QACjD,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE;QACnB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAA;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACjD,IAAI,MAAM,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAE,OAAO,QAAQ,CAAA;IAEhF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACzD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC;EAC5B,UAAU,CAAC,QAAQ,CAAC;uDACiC,CAAC,CAAA;IAEtD,IAAI,CAAC,MAAM,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAA;IAC3G,CAAC;IACD,IAAI,CAAC,MAAM,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAA;IACtG,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI;IACtD,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAA;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAC9C,IAAI,CAAC,MAAM,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAA;IAC3G,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Runs one exact configured operational task against the active release.
3
+ *
4
+ * @param {{
5
+ * transport: import('#types').Transport,
6
+ * stage: import('#types').StageConfig,
7
+ * taskName: string,
8
+ * env?: Record<string, string|undefined>,
9
+ * reporter?: Reporter
10
+ * }} opts
11
+ * @returns {Promise<import('#types').OperationalTaskReport>}
12
+ */
13
+ export function runOperationalTask({ transport, stage, taskName, env, reporter }: {
14
+ transport: import("#types").Transport;
15
+ stage: import("#types").StageConfig;
16
+ taskName: string;
17
+ env?: Record<string, string | undefined>;
18
+ reporter?: Reporter;
19
+ }): Promise<import("#types").OperationalTaskReport>;
20
+ import { Reporter } from "./reporter.js";
21
+ //# sourceMappingURL=operational-task-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operational-task-runner.d.ts","sourceRoot":"","sources":["../../../src/core/operational-task-runner.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;GAWG;AACH,kFATW;IACN,SAAS,EAAE,OAAO,QAAQ,EAAE,SAAS,CAAC;IACtC,KAAK,EAAE,OAAO,QAAQ,EAAE,WAAW,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAC,SAAS,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB,GACS,OAAO,CAAC,OAAO,QAAQ,EAAE,qBAAqB,CAAC,CA6B3D;yBA3CsB,eAAe"}
@@ -0,0 +1,66 @@
1
+ // @ts-check
2
+ import { isValidOperationalTaskName } from "../config/validate-config.js";
3
+ import { acquireLock, releaseLock } from "./locks.js";
4
+ import { Reporter } from "./reporter.js";
5
+ import { requireCurrentRelease } from "./release-manager.js";
6
+ import { runTask } from "./task-runner.js";
7
+ /**
8
+ * Runs one exact configured operational task against the active release.
9
+ *
10
+ * @param {{
11
+ * transport: import('#types').Transport,
12
+ * stage: import('#types').StageConfig,
13
+ * taskName: string,
14
+ * env?: Record<string, string|undefined>,
15
+ * reporter?: Reporter
16
+ * }} opts
17
+ * @returns {Promise<import('#types').OperationalTaskReport>}
18
+ */
19
+ export async function runOperationalTask({ transport, stage, taskName, env = process.env, reporter = new Reporter({ lifecycle: false }) }) {
20
+ if (!isValidOperationalTaskName(taskName))
21
+ throw new Error(`Invalid operational task name '${taskName}'.`);
22
+ const configured = stage.operationalTasks ?? {};
23
+ if (!Object.hasOwn(configured, taskName))
24
+ throw new Error(`Unknown operational task '${taskName}' for ${stage.application}/${stage.stageName}.`);
25
+ const entries = configured[taskName];
26
+ const secretEnvs = entries.map(entry => resolveForwardedEnv(entry, env));
27
+ const lock = await acquireLock(transport, stage);
28
+ /** @type {import('#types').OperationalTaskReport|undefined} */
29
+ let report;
30
+ try {
31
+ const { releaseId, releasePath } = await requireCurrentRelease(transport, stage);
32
+ reporter.line(`Running operational task ${stage.application}/${stage.stageName} '${taskName}' against release ${releaseId}`);
33
+ for (const [index, entry] of entries.entries()) {
34
+ await runTask(transport, entry, releasePath, {
35
+ reporter,
36
+ secretEnv: secretEnvs[index],
37
+ strictCwd: true
38
+ });
39
+ }
40
+ report = { application: stage.application, stage: stage.stageName, task: taskName, releaseId, status: "passed" };
41
+ }
42
+ finally {
43
+ await releaseLock(transport, stage, lock);
44
+ }
45
+ reporter.line(`Operational task '${taskName}' passed on release ${report.releaseId}`);
46
+ return report;
47
+ }
48
+ /**
49
+ * @param {import('#types').OperationalTaskEntry} entry
50
+ * @param {Record<string, string|undefined>} env
51
+ * @returns {Record<string, string>}
52
+ */
53
+ function resolveForwardedEnv(entry, env) {
54
+ /** @type {Record<string, string>} */
55
+ const forwarded = {};
56
+ for (const name of entry.forwardEnv ?? []) {
57
+ const value = Object.hasOwn(env, name) ? env[name] : undefined;
58
+ if (value === undefined)
59
+ throw new Error(`Required forwarded environment variable '${name}' is missing.`);
60
+ if (value.includes("\0"))
61
+ throw new Error(`Forwarded environment variable '${name}' contains NUL and cannot be transported.`);
62
+ forwarded[name] = value;
63
+ }
64
+ return forwarded;
65
+ }
66
+ //# sourceMappingURL=operational-task-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operational-task-runner.js","sourceRoot":"","sources":["../../../src/core/operational-task-runner.js"],"names":[],"mappings":"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"}
@@ -3,6 +3,11 @@
3
3
  * @returns {boolean}
4
4
  */
5
5
  export function isSecretKey(key: unknown): boolean;
6
+ /**
7
+ * @param {unknown} name
8
+ * @returns {boolean}
9
+ */
10
+ export function isValidEnvironmentName(name: unknown): boolean;
6
11
  /**
7
12
  * @param {unknown} key
8
13
  * @param {unknown} value
@@ -16,9 +21,10 @@ export function redactValue(key: unknown, value: unknown): string;
16
21
  export function redactEnv(env?: Record<string, string>): Record<string, string>;
17
22
  /**
18
23
  * @param {string} text
24
+ * @param {string[]} [knownSecrets]
19
25
  * @returns {string}
20
26
  */
21
- export function redactText(text: string): string;
27
+ export function redactText(text: string, knownSecrets?: string[]): string;
22
28
  /**
23
29
  * Incrementally redacts a command output stream without ever emitting a
24
30
  * possibly-incomplete sensitive tail.
@@ -42,13 +48,18 @@ export function redactText(text: string): string;
42
48
  */
43
49
  export class StreamingRedactor {
44
50
  /**
45
- * @param {{maxHold?: number}} [opts]
51
+ * @param {{maxHold?: number, knownSecrets?: string[]}} [opts]
46
52
  */
47
- constructor({ maxHold }?: {
53
+ constructor({ maxHold, knownSecrets }?: {
48
54
  maxHold?: number;
55
+ knownSecrets?: string[];
49
56
  });
50
57
  /** @type {string} */
51
58
  pending: string;
59
+ /** @type {string} */
60
+ knownPending: string;
61
+ /** @type {string[]} */
62
+ knownSecrets: string[];
52
63
  /** @type {number} */
53
64
  maxHold: number;
54
65
  /** @type {boolean} */
@@ -60,6 +71,14 @@ export class StreamingRedactor {
60
71
  * @returns {string}
61
72
  */
62
73
  push(chunk: string): string;
74
+ /**
75
+ * Applies assignment and credential-URL redaction after known values have
76
+ * been removed from the stream.
77
+ *
78
+ * @param {string} chunk
79
+ * @returns {string}
80
+ */
81
+ pushPatternChunk(chunk: string): string;
63
82
  /**
64
83
  * Emits and clears any buffered tail. At end of stream the final token is
65
84
  * complete, so redactText fully masks any secret it contains.
@@ -67,5 +86,14 @@ export class StreamingRedactor {
67
86
  * @returns {string}
68
87
  */
69
88
  flush(): string;
89
+ /**
90
+ * Replaces complete known values while retaining only a possible value
91
+ * prefix between chunks.
92
+ *
93
+ * @param {string} chunk
94
+ * @param {boolean} [flush]
95
+ * @returns {string}
96
+ */
97
+ redactKnownChunk(chunk: string, flush?: boolean): string;
70
98
  }
71
99
  //# sourceMappingURL=redaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../../src/core/redaction.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,iCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,iCAJW,OAAO,SACP,OAAO,GACL,MAAM,CAKlB;AAED;;;GAGG;AACH,gCAHW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlC;AAED;;;GAGG;AACH,iCAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IACE;;OAEG;IACH,0BAFW;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAC,EAS5B;IANC,qBAAqB;IACrB,SADW,MAAM,CACA;IACjB,qBAAqB;IACrB,SADW,MAAM,CACK;IACtB,sBAAsB;IACtB,uBADW,OAAO,CACgB;IAGpC;;;;;OAKG;IACH,YAHW,MAAM,GACJ,MAAM,CA6BlB;IAED;;;;;OAKG;IACH,SAFa,MAAM,CAMlB;CACF"}
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../../src/core/redaction.js"],"names":[],"mappings":"AAOA;;;GAGG;AACH,iCAHW,OAAO,GACL,OAAO,CAInB;AAED;;;GAGG;AACH,6CAHW,OAAO,GACL,OAAO,CAInB;AAED;;;;GAIG;AACH,iCAJW,OAAO,SACP,OAAO,GACL,MAAM,CAKlB;AAED;;;GAGG;AACH,gCAHW,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOlC;AAED;;;;GAIG;AACH,iCAJW,MAAM,iBACN,MAAM,EAAE,GACN,MAAM,CAMlB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IACE;;OAEG;IACH,wCAFW;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAC,EAarD;IAVC,qBAAqB;IACrB,SADW,MAAM,CACA;IACjB,qBAAqB;IACrB,cADW,MAAM,CACK;IACtB,uBAAuB;IACvB,cADW,MAAM,EAAE,CACoC;IACvD,qBAAqB;IACrB,SADW,MAAM,CACK;IACtB,sBAAsB;IACtB,uBADW,OAAO,CACgB;IAGpC;;;;;OAKG;IACH,YAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,wBAHW,MAAM,GACJ,MAAM,CA6BlB;IAED;;;;;OAKG;IACH,SAFa,MAAM,CAQlB;IAED;;;;;;;OAOG;IACH,wBAJW,MAAM,UACN,OAAO,GACL,MAAM,CAQlB;CACF"}
@@ -2,6 +2,7 @@
2
2
  const SECRET_KEY_PATTERN = /(token|password|secret|key|cookie|authorization)/iu;
3
3
  const SECRET_ASSIGNMENT_PATTERN = /((?:token|password|secret|key|cookie|authorization)[A-Z0-9_\-]*\s*=\s*)('[^']*'|"[^"]*"|[^\s]+)/giu;
4
4
  const HTTPS_USERINFO_PATTERN = /(https?:\/\/)[^/@\s]+@/giu;
5
+ const ENV_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/u;
5
6
  /**
6
7
  * @param {unknown} key
7
8
  * @returns {boolean}
@@ -9,6 +10,13 @@ const HTTPS_USERINFO_PATTERN = /(https?:\/\/)[^/@\s]+@/giu;
9
10
  export function isSecretKey(key) {
10
11
  return SECRET_KEY_PATTERN.test(String(key));
11
12
  }
13
+ /**
14
+ * @param {unknown} name
15
+ * @returns {boolean}
16
+ */
17
+ export function isValidEnvironmentName(name) {
18
+ return typeof name === "string" && ENV_NAME_PATTERN.test(name);
19
+ }
12
20
  /**
13
21
  * @param {unknown} key
14
22
  * @param {unknown} value
@@ -32,10 +40,14 @@ export function redactEnv(env = {}) {
32
40
  }
33
41
  /**
34
42
  * @param {string} text
43
+ * @param {string[]} [knownSecrets]
35
44
  * @returns {string}
36
45
  */
37
- export function redactText(text) {
38
- return String(text).replace(SECRET_ASSIGNMENT_PATTERN, "$1[REDACTED]").replace(HTTPS_USERINFO_PATTERN, "$1[REDACTED]@");
46
+ export function redactText(text, knownSecrets = []) {
47
+ let redacted = String(text);
48
+ for (const secret of normalizeKnownSecrets(knownSecrets))
49
+ redacted = redacted.replaceAll(secret, "[REDACTED]");
50
+ return redacted.replace(SECRET_ASSIGNMENT_PATTERN, "$1[REDACTED]").replace(HTTPS_USERINFO_PATTERN, "$1[REDACTED]@");
39
51
  }
40
52
  /**
41
53
  * Incrementally redacts a command output stream without ever emitting a
@@ -60,11 +72,15 @@ export function redactText(text) {
60
72
  */
61
73
  export class StreamingRedactor {
62
74
  /**
63
- * @param {{maxHold?: number}} [opts]
75
+ * @param {{maxHold?: number, knownSecrets?: string[]}} [opts]
64
76
  */
65
- constructor({ maxHold = 8192 } = {}) {
77
+ constructor({ maxHold = 8192, knownSecrets = [] } = {}) {
66
78
  /** @type {string} */
67
79
  this.pending = "";
80
+ /** @type {string} */
81
+ this.knownPending = "";
82
+ /** @type {string[]} */
83
+ this.knownSecrets = normalizeKnownSecrets(knownSecrets);
68
84
  /** @type {number} */
69
85
  this.maxHold = maxHold;
70
86
  /** @type {boolean} */
@@ -77,6 +93,16 @@ export class StreamingRedactor {
77
93
  * @returns {string}
78
94
  */
79
95
  push(chunk) {
96
+ return this.pushPatternChunk(this.redactKnownChunk(chunk));
97
+ }
98
+ /**
99
+ * Applies assignment and credential-URL redaction after known values have
100
+ * been removed from the stream.
101
+ *
102
+ * @param {string} chunk
103
+ * @returns {string}
104
+ */
105
+ pushPatternChunk(chunk) {
80
106
  if (this.discardingSecretValue) {
81
107
  const whitespaceIndex = firstWhitespaceIndex(chunk);
82
108
  if (whitespaceIndex < 0)
@@ -111,10 +137,62 @@ export class StreamingRedactor {
111
137
  * @returns {string}
112
138
  */
113
139
  flush() {
140
+ const knownRest = this.redactKnownChunk("", true);
141
+ const emitted = knownRest ? this.pushPatternChunk(knownRest) : "";
114
142
  const rest = this.pending;
115
143
  this.pending = "";
116
- return redactText(rest);
144
+ return emitted + redactText(rest);
145
+ }
146
+ /**
147
+ * Replaces complete known values while retaining only a possible value
148
+ * prefix between chunks.
149
+ *
150
+ * @param {string} chunk
151
+ * @param {boolean} [flush]
152
+ * @returns {string}
153
+ */
154
+ redactKnownChunk(chunk, flush = false) {
155
+ if (this.knownSecrets.length === 0)
156
+ return String(chunk);
157
+ this.knownPending += chunk;
158
+ const { output, rest } = consumeKnownValues(this.knownPending, this.knownSecrets, flush);
159
+ this.knownPending = rest;
160
+ return output;
161
+ }
162
+ }
163
+ /**
164
+ * @param {string[]} values
165
+ * @returns {string[]}
166
+ */
167
+ function normalizeKnownSecrets(values) {
168
+ return [...new Set(Array.from(values, value => String(value)).filter(Boolean))].sort((left, right) => right.length - left.length);
169
+ }
170
+ /**
171
+ * @param {string} text
172
+ * @param {string[]} secrets
173
+ * @param {boolean} flush
174
+ * @returns {{output: string, rest: string}}
175
+ */
176
+ function consumeKnownValues(text, secrets, flush) {
177
+ let output = "";
178
+ let index = 0;
179
+ while (index < text.length) {
180
+ const remaining = text.slice(index);
181
+ if (!flush && secrets.some(secret => secret.length > remaining.length && secret.startsWith(remaining)))
182
+ break;
183
+ const matches = secrets.filter(secret => text.startsWith(secret, index));
184
+ if (matches.length > 0) {
185
+ const longest = matches[0];
186
+ output += "[REDACTED]";
187
+ index += longest.length;
188
+ continue;
189
+ }
190
+ if (!flush && secrets.some(secret => secret.startsWith(remaining)))
191
+ break;
192
+ output += text[index];
193
+ index += 1;
117
194
  }
195
+ return { output, rest: text.slice(index) };
118
196
  }
119
197
  /**
120
198
  * @param {string} text
@@ -1 +1 @@
1
- {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/core/redaction.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/core/redaction.js"],"names":[],"mappings":"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"}