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
@@ -46,4 +46,15 @@ export function previousRelease(transport: import("#types").Transport, stage: im
46
46
  * @returns {Promise<string|null>}
47
47
  */
48
48
  export function currentReleaseId(transport: import("#types").Transport, stage: import("#types").StageConfig): Promise<string | null>;
49
+ /**
50
+ * Strictly resolves the active release for an executable operation.
51
+ *
52
+ * @param {import('#types').Transport} transport
53
+ * @param {import('#types').StageConfig} stage
54
+ * @returns {Promise<{releaseId: string, releasePath: string}>}
55
+ */
56
+ export function requireCurrentRelease(transport: import("#types").Transport, stage: import("#types").StageConfig): Promise<{
57
+ releaseId: string;
58
+ releasePath: string;
59
+ }>;
49
60
  //# sourceMappingURL=release-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"release-manager.d.ts","sourceRoot":"","sources":["../../../src/core/release-manager.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,0CAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,IAAI,CAAC,CAQzB;AAED;;;;;GAKG;AACH,8CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAwBzB;AAWD;;;;;GAKG;AACH,0CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAOzB;AAED;;;;GAIG;AACH,wCAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAK7B;AAED;;;;;GAKG;AACH,2CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,aAC5B;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAU7B;AAED;;;;;GAKG;AACH,2CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,mBAC5B,MAAM,GAAC,IAAI,GACT,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAOrC;AAED;;;;GAIG;AACH,4CAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CAMhC"}
1
+ {"version":3,"file":"release-manager.d.ts","sourceRoot":"","sources":["../../../src/core/release-manager.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,0CAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,IAAI,CAAC,CAQzB;AAED;;;;;GAKG;AACH,8CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAwBzB;AAWD;;;;;GAKG;AACH,0CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAOzB;AAED;;;;GAIG;AACH,wCAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAK7B;AAED;;;;;GAKG;AACH,2CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,aAC5B;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAC,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAU7B;AAED;;;;;GAKG;AACH,2CALW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,mBAC5B,MAAM,GAAC,IAAI,GACT,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAOrC;AAED;;;;GAIG;AACH,4CAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,MAAM,GAAC,IAAI,CAAC,CAMhC;AAED;;;;;;GAMG;AACH,iDAJW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAC,CAAC,CAe7D"}
@@ -112,4 +112,26 @@ export async function currentReleaseId(transport, stage) {
112
112
  return null;
113
113
  return path.basename(await transport.readlink(currentPath));
114
114
  }
115
+ /**
116
+ * Strictly resolves the active release for an executable operation.
117
+ *
118
+ * @param {import('#types').Transport} transport
119
+ * @param {import('#types').StageConfig} stage
120
+ * @returns {Promise<{releaseId: string, releasePath: string}>}
121
+ */
122
+ export async function requireCurrentRelease(transport, stage) {
123
+ const paths = deployPaths(stage);
124
+ if (!await transport.exists(paths.currentPath))
125
+ throw new Error(`No current release exists at ${paths.currentPath}.`);
126
+ const target = await transport.readlink(paths.currentPath);
127
+ const releasesPath = path.resolve(paths.releasesPath);
128
+ const releasePath = path.resolve(path.dirname(paths.currentPath), target);
129
+ const relative = path.relative(releasesPath, releasePath);
130
+ if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative) || relative.includes(path.sep)) {
131
+ throw new Error(`Current release target must resolve to one direct child of ${releasesPath}.`);
132
+ }
133
+ if (!await transport.exists(releasePath))
134
+ throw new Error(`Current release '${relative}' does not exist at ${releasePath}.`);
135
+ return { releaseId: relative, releasePath };
136
+ }
115
137
  //# sourceMappingURL=release-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"release-manager.js","sourceRoot":"","sources":["../../../src/core/release-manager.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"release-manager.js","sourceRoot":"","sources":["../../../src/core/release-manager.js"],"names":[],"mappings":"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"}
@@ -26,13 +26,14 @@ export function jsonReporter(): Reporter;
26
26
  */
27
27
  export class Reporter {
28
28
  /**
29
- * @param {{lifecycle?: boolean, streamCommands?: boolean, out?: import('node:stream').Writable, err?: import('node:stream').Writable}} [opts]
29
+ * @param {{lifecycle?: boolean, streamCommands?: boolean, out?: import('node:stream').Writable, err?: import('node:stream').Writable, logStream?: import('node:stream').Writable|null}} [opts]
30
30
  */
31
- constructor({ lifecycle, streamCommands, out, err }?: {
31
+ constructor({ lifecycle, streamCommands, out, err, logStream }?: {
32
32
  lifecycle?: boolean;
33
33
  streamCommands?: boolean;
34
34
  out?: import("node:stream").Writable;
35
35
  err?: import("node:stream").Writable;
36
+ logStream?: import("node:stream").Writable | null;
36
37
  });
37
38
  /** @type {boolean} */
38
39
  lifecycleEnabled: boolean;
@@ -42,26 +43,56 @@ export class Reporter {
42
43
  out: import("node:stream").Writable;
43
44
  /** @type {import('node:stream').Writable} */
44
45
  err: import("node:stream").Writable;
46
+ /**
47
+ * Optional persistent per-deploy log. When attached, every lifecycle line
48
+ * and streamed command chunk is tee'd here in addition to the live
49
+ * stdout/stderr contract, so a full deploy transcript survives on disk.
50
+ *
51
+ * @type {import('node:stream').Writable|null}
52
+ */
53
+ logStream: import("node:stream").Writable | null;
45
54
  /**
46
55
  * Whether live command stdout/stderr should be streamed as it arrives.
47
56
  *
48
57
  * @returns {boolean}
49
58
  */
50
59
  get streamsCommands(): boolean;
60
+ /**
61
+ * Whether the transport should feed redacted command output to the reporter at
62
+ * all — either to live-stream it or to persist it to the deploy log. This is
63
+ * decoupled from {@link streamsCommands} so a `--json` deploy still records a
64
+ * full command transcript in its log even though nothing is streamed live.
65
+ *
66
+ * @returns {boolean}
67
+ */
68
+ get capturesCommands(): boolean;
69
+ /**
70
+ * Attaches a persistent per-deploy log stream after construction. The deploy
71
+ * command builds the reporter before the config (and therefore the log path)
72
+ * is known, so the log is tee'd in once resolved.
73
+ *
74
+ * @param {import('node:stream').Writable|null} stream
75
+ * @returns {void}
76
+ */
77
+ attachLogStream(stream: import("node:stream").Writable | null): void;
51
78
  /**
52
79
  * Prints a Capistrano-style lifecycle line in human mode; no-op otherwise.
80
+ * The line is always tee'd to the persistent log (when attached) so the log
81
+ * stays readable even for a `--json` automation deploy.
53
82
  *
54
83
  * @param {string} message
55
84
  * @returns {void}
56
85
  */
57
86
  line(message: string): void;
58
87
  /**
59
- * Writes already-redacted streamed command output to the error stream. The
60
- * error stream is used so human deploy stdout stays reserved for lifecycle
61
- * progress and the final summary, and JSON stdout stays clean.
88
+ * Records already-redacted command output. It is always tee'd to the deploy
89
+ * log when one is attached, so the log is a full transcript regardless of
90
+ * output mode. It is streamed live to the error stream only when
91
+ * {@link streamsCommands} is set (human mode) — the error stream keeps human
92
+ * stdout reserved for lifecycle progress and JSON stdout clean.
62
93
  *
63
94
  * @param {string} text
64
- * @returns {boolean}
95
+ * @returns {boolean} Backpressure signal: `false` asks the caller to pause. Only the live stream can request a pause; log-only writes never do.
65
96
  */
66
97
  writeCommandOutput(text: string): boolean;
67
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../src/core/reporter.js"],"names":[],"mappings":"AA+DA;;;;GAIG;AACH,iCAFa,QAAQ,CAIpB;AAED;;;;;GAKG;AACH,gCAFa,QAAQ,CAIpB;AA9ED;;;;;;;;GAQG;AAEH;;;GAGG;AACH;IACE;;OAEG;IACH,sDAFW;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,CAAA;KAAC,EAWrI;IARC,sBAAsB;IACtB,kBADW,OAAO,CACe;IACjC,sBAAsB;IACtB,gBADW,OAAO,CACkB;IACpC,6CAA6C;IAC7C,KADW,OAAO,aAAa,EAAE,QAAQ,CAC3B;IACd,6CAA6C;IAC7C,KADW,OAAO,aAAa,EAAE,QAAQ,CAC3B;IAGhB;;;;OAIG;IACH,uBAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,cAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;;;;;OAOG;IACH,yBAHW,MAAM,GACJ,OAAO,CAInB;CACF"}
1
+ {"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../../src/core/reporter.js"],"names":[],"mappings":"AAsGA;;;;GAIG;AACH,iCAFa,QAAQ,CAIpB;AAED;;;;;GAKG;AACH,gCAFa,QAAQ,CAIpB;AArHD;;;;;;;;GAQG;AAEH;;;GAGG;AACH;IACE;;OAEG;IACH,iEAFW;QAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,aAAa,EAAE,QAAQ,GAAC,IAAI,CAAA;KAAC,EAmBtL;IAhBC,sBAAsB;IACtB,kBADW,OAAO,CACe;IACjC,sBAAsB;IACtB,gBADW,OAAO,CACkB;IACpC,6CAA6C;IAC7C,KADW,OAAO,aAAa,EAAE,QAAQ,CAC3B;IACd,6CAA6C;IAC7C,KADW,OAAO,aAAa,EAAE,QAAQ,CAC3B;IACd;;;;;;OAMG;IACH,WAFU,OAAO,aAAa,EAAE,QAAQ,GAAC,IAAI,CAEnB;IAG5B;;;;OAIG;IACH,uBAFa,OAAO,CAInB;IAED;;;;;;;OAOG;IACH,wBAFa,OAAO,CAInB;IAED;;;;;;;OAOG;IACH,wBAHW,OAAO,aAAa,EAAE,QAAQ,GAAC,IAAI,GACjC,IAAI,CAIhB;IAED;;;;;;;OAOG;IACH,cAHW,MAAM,GACJ,IAAI,CAKhB;IAED;;;;;;;;;OASG;IACH,yBAHW,MAAM,GACJ,OAAO,CAMnB;CACF"}
@@ -14,9 +14,9 @@
14
14
  */
15
15
  export class Reporter {
16
16
  /**
17
- * @param {{lifecycle?: boolean, streamCommands?: boolean, out?: import('node:stream').Writable, err?: import('node:stream').Writable}} [opts]
17
+ * @param {{lifecycle?: boolean, streamCommands?: boolean, out?: import('node:stream').Writable, err?: import('node:stream').Writable, logStream?: import('node:stream').Writable|null}} [opts]
18
18
  */
19
- constructor({ lifecycle = true, streamCommands = true, out = process.stdout, err = process.stderr } = {}) {
19
+ constructor({ lifecycle = true, streamCommands = true, out = process.stdout, err = process.stderr, logStream = null } = {}) {
20
20
  /** @type {boolean} */
21
21
  this.lifecycleEnabled = lifecycle;
22
22
  /** @type {boolean} */
@@ -25,6 +25,14 @@ export class Reporter {
25
25
  this.out = out;
26
26
  /** @type {import('node:stream').Writable} */
27
27
  this.err = err;
28
+ /**
29
+ * Optional persistent per-deploy log. When attached, every lifecycle line
30
+ * and streamed command chunk is tee'd here in addition to the live
31
+ * stdout/stderr contract, so a full deploy transcript survives on disk.
32
+ *
33
+ * @type {import('node:stream').Writable|null}
34
+ */
35
+ this.logStream = logStream;
28
36
  }
29
37
  /**
30
38
  * Whether live command stdout/stderr should be streamed as it arrives.
@@ -34,8 +42,32 @@ export class Reporter {
34
42
  get streamsCommands() {
35
43
  return this.streamCommands;
36
44
  }
45
+ /**
46
+ * Whether the transport should feed redacted command output to the reporter at
47
+ * all — either to live-stream it or to persist it to the deploy log. This is
48
+ * decoupled from {@link streamsCommands} so a `--json` deploy still records a
49
+ * full command transcript in its log even though nothing is streamed live.
50
+ *
51
+ * @returns {boolean}
52
+ */
53
+ get capturesCommands() {
54
+ return this.streamCommands || this.logStream !== null;
55
+ }
56
+ /**
57
+ * Attaches a persistent per-deploy log stream after construction. The deploy
58
+ * command builds the reporter before the config (and therefore the log path)
59
+ * is known, so the log is tee'd in once resolved.
60
+ *
61
+ * @param {import('node:stream').Writable|null} stream
62
+ * @returns {void}
63
+ */
64
+ attachLogStream(stream) {
65
+ this.logStream = stream;
66
+ }
37
67
  /**
38
68
  * Prints a Capistrano-style lifecycle line in human mode; no-op otherwise.
69
+ * The line is always tee'd to the persistent log (when attached) so the log
70
+ * stays readable even for a `--json` automation deploy.
39
71
  *
40
72
  * @param {string} message
41
73
  * @returns {void}
@@ -43,16 +75,24 @@ export class Reporter {
43
75
  line(message) {
44
76
  if (this.lifecycleEnabled)
45
77
  this.out.write(`${message}\n`);
78
+ if (this.logStream)
79
+ this.logStream.write(`${message}\n`);
46
80
  }
47
81
  /**
48
- * Writes already-redacted streamed command output to the error stream. The
49
- * error stream is used so human deploy stdout stays reserved for lifecycle
50
- * progress and the final summary, and JSON stdout stays clean.
82
+ * Records already-redacted command output. It is always tee'd to the deploy
83
+ * log when one is attached, so the log is a full transcript regardless of
84
+ * output mode. It is streamed live to the error stream only when
85
+ * {@link streamsCommands} is set (human mode) — the error stream keeps human
86
+ * stdout reserved for lifecycle progress and JSON stdout clean.
51
87
  *
52
88
  * @param {string} text
53
- * @returns {boolean}
89
+ * @returns {boolean} Backpressure signal: `false` asks the caller to pause. Only the live stream can request a pause; log-only writes never do.
54
90
  */
55
91
  writeCommandOutput(text) {
92
+ if (this.logStream)
93
+ this.logStream.write(text);
94
+ if (!this.streamCommands)
95
+ return true;
56
96
  return this.err.write(text);
57
97
  }
58
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/core/reporter.js"],"names":[],"mappings":"AAAA,YAAY;AAEZ;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACnB;;OAEG;IACH,YAAY,EAAC,SAAS,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAC,GAAG,EAAE;QACpG,sBAAsB;QACtB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;QACjC,sBAAsB;QACtB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,6CAA6C;QAC7C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,6CAA6C;QAC7C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAChB,CAAC;IAED;;;;OAIG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,OAAO;QACV,IAAI,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;IAC3D,CAAC;IAED;;;;;;;OAOG;IACH,kBAAkB,CAAC,IAAI;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,QAAQ,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAC,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,QAAQ,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAC,CAAC,CAAA;AAChE,CAAC"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../src/core/reporter.js"],"names":[],"mappings":"AAAA,YAAY;AAEZ;;;;;;;;GAQG;AAEH;;;GAGG;AACH,MAAM,OAAO,QAAQ;IACnB;;OAEG;IACH,YAAY,EAAC,SAAS,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,EAAC,GAAG,EAAE;QACtH,sBAAsB;QACtB,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAA;QACjC,sBAAsB;QACtB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAA;QACpC,6CAA6C;QAC7C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,6CAA6C;QAC7C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd;;;;;;WAMG;QACH,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAED;;;;OAIG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAA;IACvD,CAAC;IAED;;;;;;;OAOG;IACH,eAAe,CAAC,MAAM;QACpB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAA;IACzB,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CAAC,OAAO;QACV,IAAI,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;QACzD,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAA;IAC1D,CAAC;IAED;;;;;;;;;OASG;IACH,kBAAkB,CAAC,IAAI;QACrB,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO,IAAI,CAAA;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,QAAQ,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAC,CAAC,CAAA;AAC9D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,QAAQ,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAC,CAAC,CAAA;AAChE,CAAC"}
@@ -30,12 +30,14 @@ export function normalizeTask(name: string, entry: string | import("#types").Tas
30
30
  * @param {import('#types').Transport} transport
31
31
  * @param {import('#types').TaskEntry} task
32
32
  * @param {string} cwd
33
- * @param {{previousReleasePath?: string|null, reporter?: Reporter}} [opts]
33
+ * @param {{previousReleasePath?: string|null, reporter?: Reporter, secretEnv?: Record<string, string>, strictCwd?: boolean}} [opts]
34
34
  * @returns {Promise<import('#types').TaskResult>}
35
35
  */
36
- export function runTask(transport: import("#types").Transport, task: import("#types").TaskEntry, cwd: string, { previousReleasePath, reporter }?: {
36
+ export function runTask(transport: import("#types").Transport, task: import("#types").TaskEntry, cwd: string, { previousReleasePath, reporter, secretEnv, strictCwd }?: {
37
37
  previousReleasePath?: string | null;
38
38
  reporter?: Reporter;
39
+ secretEnv?: Record<string, string>;
40
+ strictCwd?: boolean;
39
41
  }): Promise<import("#types").TaskResult>;
40
42
  import { Reporter } from "./reporter.js";
41
43
  //# sourceMappingURL=task-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../../../src/core/task-runner.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,oCAHW,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,QAAQ,EAAE,SAAS,EAAE,CAQxC;AAED;;;;;;GAMG;AACH,oCANW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,sCACN;IAAC,mBAAmB,CAAC,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAC,GACtD,OAAO,CAAC,OAAO,QAAQ,EAAE,UAAU,EAAE,CAAC,CAQlD;AAED;;;;GAIG;AACH,yCAJW,MAAM,WACN,MAAM,GAAC,OAAO,QAAQ,EAAE,SAAS,GAAC,KAAK,CAAC,MAAM,GAAC,OAAO,QAAQ,EAAE,SAAS,CAAC,GACxE,OAAO,QAAQ,EAAE,SAAS,EAAE,CASxC;AAED;;;;GAIG;AACH,oCAJW,MAAM,SACN,MAAM,GAAC,OAAO,QAAQ,EAAE,SAAS,GAC/B,OAAO,QAAQ,EAAE,SAAS,CAOtC;AAED;;;;;;GAMG;AACH,mCANW,OAAO,QAAQ,EAAE,SAAS,QAC1B,OAAO,QAAQ,EAAE,SAAS,OAC1B,MAAM,sCACN;IAAC,mBAAmB,CAAC,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAC,GACtD,OAAO,CAAC,OAAO,QAAQ,EAAE,UAAU,CAAC,CAyBhD;yBAtFsB,eAAe"}
1
+ {"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../../../src/core/task-runner.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,oCAHW,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,QAAQ,EAAE,SAAS,EAAE,CAQxC;AAED;;;;;;GAMG;AACH,oCANW,OAAO,QAAQ,EAAE,SAAS,SAC1B,OAAO,QAAQ,EAAE,WAAW,eAC5B,MAAM,sCACN;IAAC,mBAAmB,CAAC,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAC,GACtD,OAAO,CAAC,OAAO,QAAQ,EAAE,UAAU,EAAE,CAAC,CAQlD;AAED;;;;GAIG;AACH,yCAJW,MAAM,WACN,MAAM,GAAC,OAAO,QAAQ,EAAE,SAAS,GAAC,KAAK,CAAC,MAAM,GAAC,OAAO,QAAQ,EAAE,SAAS,CAAC,GACxE,OAAO,QAAQ,EAAE,SAAS,EAAE,CASxC;AAED;;;;GAIG;AACH,oCAJW,MAAM,SACN,MAAM,GAAC,OAAO,QAAQ,EAAE,SAAS,GAC/B,OAAO,QAAQ,EAAE,SAAS,CAOtC;AAED;;;;;;GAMG;AACH,mCANW,OAAO,QAAQ,EAAE,SAAS,QAC1B,OAAO,QAAQ,EAAE,SAAS,OAC1B,MAAM,4DACN;IAAC,mBAAmB,CAAC,EAAE,MAAM,GAAC,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAC,GAC/G,OAAO,CAAC,OAAO,QAAQ,EAAE,UAAU,CAAC,CAgChD;yBA7FsB,eAAe"}
@@ -1,4 +1,5 @@
1
1
  // @ts-check
2
+ import path from "node:path";
2
3
  import { redactText } from "./redaction.js";
3
4
  import { Reporter } from "./reporter.js";
4
5
  import { pathsChanged } from "./path-change-gate.js";
@@ -58,10 +59,10 @@ export function normalizeTask(name, entry) {
58
59
  * @param {import('#types').Transport} transport
59
60
  * @param {import('#types').TaskEntry} task
60
61
  * @param {string} cwd
61
- * @param {{previousReleasePath?: string|null, reporter?: Reporter}} [opts]
62
+ * @param {{previousReleasePath?: string|null, reporter?: Reporter, secretEnv?: Record<string, string>, strictCwd?: boolean}} [opts]
62
63
  * @returns {Promise<import('#types').TaskResult>}
63
64
  */
64
- export async function runTask(transport, task, cwd, { previousReleasePath, reporter = new Reporter({ lifecycle: false }) } = {}) {
65
+ export async function runTask(transport, task, cwd, { previousReleasePath, reporter = new Reporter({ lifecycle: false }), secretEnv, strictCwd = false } = {}) {
65
66
  if (task.onlyIfChanged && previousReleasePath) {
66
67
  const changed = await pathsChanged(transport, previousReleasePath, cwd, task.onlyIfChanged);
67
68
  if (!changed) {
@@ -69,22 +70,47 @@ export async function runTask(transport, task, cwd, { previousReleasePath, repor
69
70
  return taskResult(task, task.optional === true, "skipped", undefined, "no paths changed");
70
71
  }
71
72
  }
72
- const taskCwd = task.cwd ? `${cwd}/${task.cwd}` : cwd;
73
+ const taskCwd = resolveTaskCwd(cwd, task.cwd, strictCwd);
73
74
  const optional = task.optional === true;
74
- reporter.line(` * Running task ${task.name}: ${redactText(task.command)}`);
75
+ const knownSecrets = Object.values(secretEnv ?? {});
76
+ reporter.line(` * Running task ${task.name}: ${redactText(task.command, knownSecrets)}`);
75
77
  try {
76
- await transport.run(task.command, { cwd: taskCwd, env: task.env ?? {} });
78
+ const runOptions = {
79
+ cwd: taskCwd,
80
+ env: task.env ?? {},
81
+ ...(secretEnv === undefined ? {} : { secretEnv })
82
+ };
83
+ await transport.run(task.command, runOptions);
77
84
  return taskResult(task, optional, "passed", undefined);
78
85
  }
79
86
  catch (error) {
80
87
  if (optional) {
81
88
  const err = /** @type {Error} */ (error);
82
- reporter.line(` * Optional task '${task.name}' failed: ${err.message}`);
83
- return taskResult(task, optional, "failed", err);
89
+ const redactedError = new Error(redactText(err.message, knownSecrets));
90
+ reporter.line(` * Optional task '${task.name}' failed: ${redactedError.message}`);
91
+ return taskResult(task, optional, "failed", redactedError);
84
92
  }
85
93
  const err = /** @type {Error} */ (error);
86
- throw new Error(`Task '${task.name}' failed while running ${redactText(task.command)}: ${err.message}`);
94
+ throw new Error(`Task '${task.name}' failed while running ${redactText(task.command, knownSecrets)}: ${redactText(err.message, knownSecrets)}`);
95
+ }
96
+ }
97
+ /**
98
+ * @param {string} releasePath
99
+ * @param {string|undefined} taskCwd
100
+ * @param {boolean} strict
101
+ * @returns {string}
102
+ */
103
+ function resolveTaskCwd(releasePath, taskCwd, strict) {
104
+ if (!taskCwd)
105
+ return releasePath;
106
+ if (!strict)
107
+ return `${releasePath}/${taskCwd}`;
108
+ const resolved = path.resolve(releasePath, taskCwd);
109
+ const relative = path.relative(path.resolve(releasePath), resolved);
110
+ if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
111
+ throw new Error(`Task working directory '${taskCwd}' escapes active release ${releasePath}.`);
87
112
  }
113
+ return resolved;
88
114
  }
89
115
  /**
90
116
  * @param {import('#types').TaskEntry} task
@@ -1 +1 @@
1
- {"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../../src/core/task-runner.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../../src/core/task-runner.js"],"names":[],"mappings":"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"}
@@ -46,6 +46,22 @@ export class LocalTransport {
46
46
  * @returns {Promise<void>}
47
47
  */
48
48
  writeFile(filePath: string, content: string): Promise<void>;
49
+ /**
50
+ * @param {string} filePath
51
+ * @param {string} content
52
+ * @returns {Promise<boolean>}
53
+ */
54
+ writeFileExclusive(filePath: string, content: string): Promise<boolean>;
55
+ /**
56
+ * Removes a file only while it still contains the exact expected content.
57
+ * Conditional removers are serialized by a kernel-owned advisory lock, which
58
+ * is released if the remover is interrupted.
59
+ *
60
+ * @param {string} filePath
61
+ * @param {string} expectedContent
62
+ * @returns {Promise<boolean>}
63
+ */
64
+ removeFileIfContent(filePath: string, expectedContent: string): Promise<boolean>;
49
65
  /**
50
66
  * @param {string} filePath
51
67
  * @returns {Promise<string>}
@@ -64,12 +80,13 @@ export class LocalTransport {
64
80
  copyDir(from: string, to: string): Promise<void>;
65
81
  /**
66
82
  * @param {string} command
67
- * @param {{cwd?: string, env?: Record<string, string>}} [opts]
83
+ * @param {{cwd?: string, env?: Record<string, string>, secretEnv?: Record<string, string>}} [opts]
68
84
  * @returns {Promise<import('#types').SpawnResult>}
69
85
  */
70
- run(command: string, { cwd, env }?: {
86
+ run(command: string, { cwd, env, secretEnv }?: {
71
87
  cwd?: string;
72
88
  env?: Record<string, string>;
89
+ secretEnv?: Record<string, string>;
73
90
  }): Promise<import("#types").SpawnResult>;
74
91
  }
75
92
  //# sourceMappingURL=local-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-transport.d.ts","sourceRoot":"","sources":["../../../src/transports/local-transport.js"],"names":[],"mappings":"AAOA;IACE;;OAEG;IACH,2BAFW;QAAC,QAAQ,CAAC,EAAE,OAAO,qBAAqB,EAAE,QAAQ,CAAA;KAAC,EAK7D;IAFC,qDAAqD;IACrD,UADW,OAAO,qBAAqB,EAAE,QAAQ,CACzB;IAG1B;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAW5B;IAED;;;;;OAKG;IACH,gBALW,MAAM,YACN,MAAM,SACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACH,eAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,aAJW,MAAM,MACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,oBAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAU7B;IAED;;;;OAIG;IACH,cAJW,MAAM,MACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,aAJW,MAAM,iBACN;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,GAC1C,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAqCjD;CACF"}
1
+ {"version":3,"file":"local-transport.d.ts","sourceRoot":"","sources":["../../../src/transports/local-transport.js"],"names":[],"mappings":"AAOA;IACE;;OAEG;IACH,2BAFW;QAAC,QAAQ,CAAC,EAAE,OAAO,qBAAqB,EAAE,QAAQ,CAAA;KAAC,EAK7D;IAFC,qDAAqD;IACrD,UADW,OAAO,qBAAqB,EAAE,QAAQ,CACzB;IAG1B;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAW5B;IAED;;;;;OAKG;IACH,gBALW,MAAM,YACN,MAAM,SACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACH,eAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,aAJW,MAAM,MACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,oBAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAKzB;IAED;;;;OAIG;IACH,6BAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAY5B;IAED;;;;;;;;OAQG;IACH,8BAJW,MAAM,mBACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAc5B;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAU7B;IAED;;;;OAIG;IACH,cAJW,MAAM,MACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,aAJW,MAAM,4BACN;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,GAC9E,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAuCjD;CACF"}
@@ -2,7 +2,7 @@
2
2
  import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { spawn } from "node:child_process";
5
- import { redactText, StreamingRedactor } from "../core/redaction.js";
5
+ import { isValidEnvironmentName, redactText, StreamingRedactor } from "../core/redaction.js";
6
6
  import { Reporter } from "../core/reporter.js";
7
7
  export class LocalTransport {
8
8
  /**
@@ -75,6 +75,45 @@ export class LocalTransport {
75
75
  await fs.mkdir(path.dirname(filePath), { recursive: true });
76
76
  await fs.writeFile(filePath, content);
77
77
  }
78
+ /**
79
+ * @param {string} filePath
80
+ * @param {string} content
81
+ * @returns {Promise<boolean>}
82
+ */
83
+ async writeFileExclusive(filePath, content) {
84
+ await fs.mkdir(path.dirname(filePath), { recursive: true });
85
+ try {
86
+ await fs.writeFile(filePath, content, { flag: "wx" });
87
+ return true;
88
+ }
89
+ catch (error) {
90
+ const err = /** @type {{code?: string}} */ (error);
91
+ if (err.code === "EEXIST")
92
+ return false;
93
+ throw error;
94
+ }
95
+ }
96
+ /**
97
+ * Removes a file only while it still contains the exact expected content.
98
+ * Conditional removers are serialized by a kernel-owned advisory lock, which
99
+ * is released if the remover is interrupted.
100
+ *
101
+ * @param {string} filePath
102
+ * @param {string} expectedContent
103
+ * @returns {Promise<boolean>}
104
+ */
105
+ async removeFileIfContent(filePath, expectedContent) {
106
+ const guardPath = `${filePath}.rampway-remove`;
107
+ await fs.mkdir(guardPath, { recursive: true });
108
+ const exitCode = await runConditionalRemove(path.join(guardPath, "guard.lock"), filePath, expectedContent);
109
+ if (exitCode === 0)
110
+ return true;
111
+ if (exitCode === 75)
112
+ throw new Error(`File ownership removal is already in progress: ${filePath}`);
113
+ if (exitCode === 76)
114
+ return false;
115
+ throw new Error(`Conditional file removal failed with exit ${exitCode ?? "unknown"}: ${filePath}`);
116
+ }
78
117
  /**
79
118
  * @param {string} filePath
80
119
  * @returns {Promise<string>}
@@ -107,19 +146,21 @@ export class LocalTransport {
107
146
  }
108
147
  /**
109
148
  * @param {string} command
110
- * @param {{cwd?: string, env?: Record<string, string>}} [opts]
149
+ * @param {{cwd?: string, env?: Record<string, string>, secretEnv?: Record<string, string>}} [opts]
111
150
  * @returns {Promise<import('#types').SpawnResult>}
112
151
  */
113
- async run(command, { cwd, env = {} } = {}) {
114
- const shouldStream = this.reporter.streamsCommands;
152
+ async run(command, { cwd, env = {}, secretEnv = {} } = {}) {
153
+ validateEnvironment(env, secretEnv);
154
+ const knownSecrets = Object.values(secretEnv);
155
+ const shouldCapture = this.reporter.capturesCommands;
115
156
  return await new Promise((resolve, reject) => {
116
- const child = spawn(command, { cwd, env: { ...process.env, ...env }, shell: true });
157
+ const child = spawn(command, { cwd, env: { ...process.env, ...env, ...secretEnv }, shell: true });
117
158
  let output = "";
118
- const redactor = new StreamingRedactor();
159
+ const redactor = new StreamingRedactor({ knownSecrets });
119
160
  const emit = /** @param {Buffer|string} chunk */ /** @param {Buffer|string} chunk */ chunk => {
120
161
  const text = chunk.toString();
121
162
  output += text;
122
- if (!shouldStream)
163
+ if (!shouldCapture)
123
164
  return;
124
165
  const safe = redactor.push(text);
125
166
  if (safe && !this.reporter.writeCommandOutput(safe)) {
@@ -132,7 +173,7 @@ export class LocalTransport {
132
173
  }
133
174
  };
134
175
  const flush = () => {
135
- if (!shouldStream)
176
+ if (!shouldCapture)
136
177
  return;
137
178
  const rest = redactor.flush();
138
179
  if (rest)
@@ -140,16 +181,63 @@ export class LocalTransport {
140
181
  };
141
182
  child.stdout.on("data", emit);
142
183
  child.stderr.on("data", emit);
143
- child.on("error", /** @param {Error} error */ /** @param {Error} error */ error => { flush(); reject(error); });
184
+ child.on("error", /** @param {Error} error */ /** @param {Error} error */ error => { flush(); reject(new Error(redactText(error.message, knownSecrets))); });
144
185
  child.on("close", /** @param {number|null} code */ /** @param {number|null} code */ code => {
145
186
  flush();
146
187
  if (code === 0)
147
- resolve({ code, output: redactText(output) });
188
+ resolve({ code, output: redactText(output, knownSecrets) });
148
189
  else
149
- reject(new Error(`Command failed with exit ${code}: ${redactText(command)}
150
- ${redactText(output)}`));
190
+ reject(new Error(`Command failed with exit ${code}: ${redactText(command, knownSecrets)}
191
+ ${redactText(output, knownSecrets)}`));
151
192
  });
152
193
  });
153
194
  }
154
195
  }
196
+ /**
197
+ * @param {string} guardLockPath
198
+ * @param {string} filePath
199
+ * @param {string} expectedContent
200
+ * @returns {Promise<number|null>}
201
+ */
202
+ async function runConditionalRemove(guardLockPath, filePath, expectedContent) {
203
+ const script = 'if ! test -f "$1"; then exit 76; fi; cmp -s "$1" -; status=$?; if test "$status" -eq 1; then exit 76; elif test "$status" -ne 0; then exit 74; fi; rm -f "$1" || exit 74';
204
+ return await new Promise((resolve, reject) => {
205
+ const child = spawn("flock", ["-n", "-E", "75", "--", guardLockPath, "sh", "-c", script, "rampway-remove", filePath]);
206
+ let settled = false;
207
+ const fail = /** @param {Error} error */ /** @param {Error} error */ error => {
208
+ if (settled)
209
+ return;
210
+ settled = true;
211
+ reject(error);
212
+ };
213
+ child.on("error", fail);
214
+ child.stdin.on("error", error => {
215
+ if ( /** @type {{code?: string}} */(error).code !== "EPIPE")
216
+ fail(error);
217
+ });
218
+ child.stderr.resume();
219
+ child.on("close", code => {
220
+ if (settled)
221
+ return;
222
+ settled = true;
223
+ resolve(code);
224
+ });
225
+ child.stdin.end(expectedContent);
226
+ });
227
+ }
228
+ /**
229
+ * @param {Record<string, string>} env
230
+ * @param {Record<string, string>} secretEnv
231
+ * @returns {void}
232
+ */
233
+ function validateEnvironment(env, secretEnv) {
234
+ for (const name of [...Object.keys(env), ...Object.keys(secretEnv)]) {
235
+ if (!isValidEnvironmentName(name))
236
+ throw new Error(`Invalid environment variable name: ${name}`);
237
+ }
238
+ for (const [name, value] of Object.entries(secretEnv)) {
239
+ if (value.includes("\0"))
240
+ throw new Error(`Secret environment variable '${name}' contains NUL and cannot be transported.`);
241
+ }
242
+ }
155
243
  //# sourceMappingURL=local-transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-transport.js","sourceRoot":"","sources":["../../../src/transports/local-transport.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-transport.js","sourceRoot":"","sources":["../../../src/transports/local-transport.js"],"names":[],"mappings":"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"}