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
@@ -19,6 +19,11 @@ export function shellQuote(value: unknown): string;
19
19
  * @returns {string}
20
20
  */
21
21
  export function shellEnvKey(key: unknown): string;
22
+ /**
23
+ * @param {unknown} key
24
+ * @returns {string}
25
+ */
26
+ export function shellEnvName(key: unknown): string;
22
27
  /**
23
28
  * @param {unknown} value
24
29
  * @returns {string}
@@ -80,6 +85,18 @@ export class SshTransport {
80
85
  * @returns {Promise<void>}
81
86
  */
82
87
  writeFile(filePath: string, content: string): Promise<void>;
88
+ /**
89
+ * @param {string} filePath
90
+ * @param {string} content
91
+ * @returns {Promise<boolean>}
92
+ */
93
+ writeFileExclusive(filePath: string, content: string): Promise<boolean>;
94
+ /**
95
+ * @param {string} filePath
96
+ * @param {string} expectedContent
97
+ * @returns {Promise<boolean>}
98
+ */
99
+ removeFileIfContent(filePath: string, expectedContent: string): Promise<boolean>;
83
100
  /**
84
101
  * @param {string} filePath
85
102
  * @returns {Promise<string>}
@@ -98,12 +115,13 @@ export class SshTransport {
98
115
  copyDir(from: string, to: string): Promise<void>;
99
116
  /**
100
117
  * @param {string} command
101
- * @param {{cwd?: string, env?: Record<string, string>}} [opts]
118
+ * @param {{cwd?: string, env?: Record<string, string>, secretEnv?: Record<string, string>}} [opts]
102
119
  * @returns {Promise<import('#types').SpawnResult>}
103
120
  */
104
- run(command: string, { cwd, env }?: {
121
+ run(command: string, { cwd, env, secretEnv }?: {
105
122
  cwd?: string;
106
123
  env?: Record<string, string>;
124
+ secretEnv?: Record<string, string>;
107
125
  }): Promise<import("#types").SpawnResult>;
108
126
  /**
109
127
  * @param {string} targetPath
@@ -142,6 +160,16 @@ export class SshTransport {
142
160
  * @returns {import('#types').CommandPlan}
143
161
  */
144
162
  commandPlanForWriteFile(filePath: string): import("#types").CommandPlan;
163
+ /**
164
+ * @param {string} filePath
165
+ * @returns {import('#types').CommandPlan}
166
+ */
167
+ commandPlanForWriteFileExclusive(filePath: string): import("#types").CommandPlan;
168
+ /**
169
+ * @param {string} filePath
170
+ * @returns {import('#types').CommandPlan}
171
+ */
172
+ commandPlanForRemoveFileIfContent(filePath: string): import("#types").CommandPlan;
145
173
  /**
146
174
  * @param {string} filePath
147
175
  * @returns {import('#types').CommandPlan}
@@ -167,6 +195,16 @@ export class SshTransport {
167
195
  cwd?: string;
168
196
  env?: Record<string, string>;
169
197
  }): import("#types").CommandPlan;
198
+ /**
199
+ * @param {string} command
200
+ * @param {{cwd?: string, env?: Record<string, string>, secretEnv: Record<string, string>}} opts
201
+ * @returns {string}
202
+ */
203
+ scriptForSecretRun(command: string, { cwd, env, secretEnv }: {
204
+ cwd?: string;
205
+ env?: Record<string, string>;
206
+ secretEnv: Record<string, string>;
207
+ }): string;
170
208
  /**
171
209
  * @param {string} command
172
210
  * @returns {import('#types').CommandPlan}
@@ -174,12 +212,13 @@ export class SshTransport {
174
212
  remoteCommandPlan(command: string): import("#types").CommandPlan;
175
213
  /**
176
214
  * @param {import('#types').CommandPlan} plan
177
- * @param {{input?: string, stream?: boolean}} [opts]
215
+ * @param {{input?: string, stream?: boolean, knownSecrets?: string[]}} [opts]
178
216
  * @returns {Promise<import('#types').SpawnResult>}
179
217
  */
180
- runCommandPlan(plan: import("#types").CommandPlan, { input, stream }?: {
218
+ runCommandPlan(plan: import("#types").CommandPlan, { input, stream, knownSecrets }?: {
181
219
  input?: string;
182
220
  stream?: boolean;
221
+ knownSecrets?: string[];
183
222
  }): Promise<import("#types").SpawnResult>;
184
223
  /**
185
224
  * @param {import('#types').CommandPlan} plan
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-transport.d.ts","sourceRoot":"","sources":["../../../src/transports/ssh-transport.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh-transport.d.ts","sourceRoot":"","sources":["../../../src/transports/ssh-transport.js"],"names":[],"mappings":"AA2bA;;;GAGG;AACH,qCAHW,OAAO,QAAQ,EAAE,eAAe,GAC9B,MAAM,CAKlB;AAED;;;;GAIG;AACH,8BAJW,OAAO,QAAQ,EAAE,eAAe,WAChC,MAAM,GACJ,MAAM,EAAE,CASpB;AAED;;;GAGG;AACH,kCAHW,OAAO,GACL,MAAM,CAMlB;AAED;;;GAGG;AACH,iCAHW,OAAO,GACL,MAAM,CAMlB;AAED;;;GAGG;AACH,kCAHW,OAAO,GACL,MAAM,CAMlB;AAED;;;GAGG;AACH,kCAHW,OAAO,GACL,MAAM,CAIlB;AAhfD;IAWE;;;;OAIG;IACH,wBAJW,OAAO,QAAQ,EAAE,WAAW,aAC5B,OAAO,qBAAqB,EAAE,QAAQ,GACpC,YAAY,CAIxB;IAjBD;;OAEG;IACH,gCAFW;QAAC,IAAI,EAAE,OAAO,QAAQ,EAAE,eAAe,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,qBAAqB,EAAE,QAAQ,CAAA;KAAC,EAOrG;IAJC,+CAA+C;IAC/C,MADW,OAAO,QAAQ,EAAE,eAAe,CAC3B;IAChB,qDAAqD;IACrD,UADW,OAAO,qBAAqB,EAAE,QAAQ,CACzB;IAY1B;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAU5B;IAED;;;;OAIG;IACH,gBAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAK3B;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,CAIzB;IAED;;;;OAIG;IACH,6BAJW,MAAM,WACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAU5B;IAED;;;;OAIG;IACH,8BAJW,MAAM,mBACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAY5B;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAK3B;IAED;;;OAGG;IACH,iBAHW,MAAM,GACJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAK7B;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,CAajD;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;;OAIG;IACH,8BAJW,MAAM,YACN,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;OAGG;IACH,6BAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;;OAIG;IACH,2BAJW,MAAM,MACN,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;OAGG;IACH,kCAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAKxC;IAED;;;OAGG;IACH,2CAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAMxC;IAED;;;OAGG;IACH,4CAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAWxC;IAED;;;OAGG;IACH,iCAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;OAGG;IACH,+BAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAKxC;IAED;;;;OAIG;IACH,4BAJW,MAAM,MACN,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAQxC;IAED;;;;OAIG;IACH,2BAJW,MAAM,iBACN;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,GAC1C,OAAO,QAAQ,EAAE,WAAW,CASxC;IAED;;;;OAIG;IACH,4BAJW,MAAM,2BACN;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAC,GAC7E,MAAM,CASlB;IAED;;;OAGG;IACH,2BAHW,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAIxC;IAED;;;;OAIG;IACH,qBAJW,OAAO,QAAQ,EAAE,WAAW,oCAC5B;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;KAAC,GACzD,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAiDjD;IAED;;;;OAIG;IACH,0BAJW,OAAO,QAAQ,EAAE,WAAW,eAC5B;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAC,GAChB,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAgEjD;CACF"}
@@ -1,7 +1,7 @@
1
1
  // @ts-check
2
2
  import { spawn } from "node:child_process";
3
3
  import path from "node:path";
4
- import { isSecretKey, redactText, StreamingRedactor } from "../core/redaction.js";
4
+ import { isSecretKey, isValidEnvironmentName, redactText, StreamingRedactor } from "../core/redaction.js";
5
5
  import { Reporter } from "../core/reporter.js";
6
6
  export class SshTransport {
7
7
  /**
@@ -82,6 +82,41 @@ export class SshTransport {
82
82
  async writeFile(filePath, content) {
83
83
  await this.runCommandPlan(this.commandPlanForWriteFile(filePath), { input: content });
84
84
  }
85
+ /**
86
+ * @param {string} filePath
87
+ * @param {string} content
88
+ * @returns {Promise<boolean>}
89
+ */
90
+ async writeFileExclusive(filePath, content) {
91
+ try {
92
+ await this.runCommandPlan(this.commandPlanForWriteFileExclusive(filePath), { input: content });
93
+ return true;
94
+ }
95
+ catch (error) {
96
+ if ( /** @type {{exitCode?: number}} */(error).exitCode === 73)
97
+ return false;
98
+ throw error;
99
+ }
100
+ }
101
+ /**
102
+ * @param {string} filePath
103
+ * @param {string} expectedContent
104
+ * @returns {Promise<boolean>}
105
+ */
106
+ async removeFileIfContent(filePath, expectedContent) {
107
+ try {
108
+ await this.runCommandPlan(this.commandPlanForRemoveFileIfContent(filePath), { input: expectedContent });
109
+ return true;
110
+ }
111
+ catch (error) {
112
+ const exitCode = /** @type {{exitCode?: number}} */ (error).exitCode;
113
+ if (exitCode === 75)
114
+ throw new Error(`File ownership removal is already in progress: ${filePath}`);
115
+ if (exitCode === 76)
116
+ return false;
117
+ throw error;
118
+ }
119
+ }
85
120
  /**
86
121
  * @param {string} filePath
87
122
  * @returns {Promise<string>}
@@ -108,11 +143,22 @@ export class SshTransport {
108
143
  }
109
144
  /**
110
145
  * @param {string} command
111
- * @param {{cwd?: string, env?: Record<string, string>}} [opts]
146
+ * @param {{cwd?: string, env?: Record<string, string>, secretEnv?: Record<string, string>}} [opts]
112
147
  * @returns {Promise<import('#types').SpawnResult>}
113
148
  */
114
- async run(command, { cwd, env = {} } = {}) {
115
- return await this.runCommandPlan(this.commandPlanForRun(command, { cwd, env }));
149
+ async run(command, { cwd, env = {}, secretEnv = {} } = {}) {
150
+ const secretNames = Object.keys(secretEnv);
151
+ if (secretNames.length === 0)
152
+ return await this.runCommandPlan(this.commandPlanForRun(command, { cwd, env }));
153
+ for (const key of Object.keys(env))
154
+ shellEnvKey(key);
155
+ for (const [key, value] of Object.entries(secretEnv)) {
156
+ shellEnvName(key);
157
+ if (value.includes("\0"))
158
+ throw new Error(`Secret environment variable '${key}' contains NUL and cannot be transported.`);
159
+ }
160
+ const input = this.scriptForSecretRun(command, { cwd, env, secretEnv });
161
+ return await this.runCommandPlan(this.remoteCommandPlan("sh -s"), { input, knownSecrets: Object.values(secretEnv) });
116
162
  }
117
163
  /**
118
164
  * @param {string} targetPath
@@ -166,6 +212,29 @@ export class SshTransport {
166
212
  const normalizedPath = remotePath(filePath);
167
213
  return this.remoteCommandPlan(`mkdir -p ${shellQuote(path.posix.dirname(normalizedPath))} && cat > ${shellQuote(normalizedPath)}`);
168
214
  }
215
+ /**
216
+ * @param {string} filePath
217
+ * @returns {import('#types').CommandPlan}
218
+ */
219
+ commandPlanForWriteFileExclusive(filePath) {
220
+ const normalizedPath = remotePath(filePath);
221
+ const quotedPath = shellQuote(normalizedPath);
222
+ return this.remoteCommandPlan(`mkdir -p ${shellQuote(path.posix.dirname(normalizedPath))} && if (set -C; : > ${quotedPath}) 2>/dev/null; then cat > ${quotedPath}; elif test -e ${quotedPath}; then exit 73; else exit 74; fi`);
223
+ }
224
+ /**
225
+ * @param {string} filePath
226
+ * @returns {import('#types').CommandPlan}
227
+ */
228
+ commandPlanForRemoveFileIfContent(filePath) {
229
+ const normalizedPath = remotePath(filePath);
230
+ const guardPath = `${normalizedPath}.rampway-remove`;
231
+ const guardLockPath = path.posix.join(guardPath, "guard.lock");
232
+ const quotedPath = shellQuote(normalizedPath);
233
+ const quotedGuard = shellQuote(guardPath);
234
+ const quotedGuardLock = shellQuote(guardLockPath);
235
+ 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';
236
+ return this.remoteCommandPlan(`mkdir -p ${quotedGuard} && flock -n -E 75 -- ${quotedGuardLock} sh -c ${shellQuote(script)} rampway-remove ${quotedPath}`);
237
+ }
169
238
  /**
170
239
  * @param {string} filePath
171
240
  * @returns {import('#types').CommandPlan}
@@ -208,6 +277,22 @@ export class SshTransport {
208
277
  commandParts.push(command);
209
278
  return this.remoteCommandPlan(commandParts.join(" && "));
210
279
  }
280
+ /**
281
+ * @param {string} command
282
+ * @param {{cwd?: string, env?: Record<string, string>, secretEnv: Record<string, string>}} opts
283
+ * @returns {string}
284
+ */
285
+ scriptForSecretRun(command, { cwd, env = {}, secretEnv }) {
286
+ const lines = ["set -eu"];
287
+ if (cwd)
288
+ lines.push(`cd ${shellQuote(remotePath(cwd))}`);
289
+ for (const [key, value] of Object.entries(env))
290
+ lines.push(`export ${shellEnvKey(key)}=${shellQuote(value)}`);
291
+ for (const [key, value] of Object.entries(secretEnv))
292
+ lines.push(`export ${shellEnvName(key)}=${shellQuote(value)}`);
293
+ lines.push(`exec sh -c ${shellQuote(command)}`);
294
+ return `${lines.join("\n")}\n`;
295
+ }
211
296
  /**
212
297
  * @param {string} command
213
298
  * @returns {import('#types').CommandPlan}
@@ -217,23 +302,23 @@ export class SshTransport {
217
302
  }
218
303
  /**
219
304
  * @param {import('#types').CommandPlan} plan
220
- * @param {{input?: string, stream?: boolean}} [opts]
305
+ * @param {{input?: string, stream?: boolean, knownSecrets?: string[]}} [opts]
221
306
  * @returns {Promise<import('#types').SpawnResult>}
222
307
  */
223
- async runCommandPlan(plan, { input, stream = true } = {}) {
308
+ async runCommandPlan(plan, { input, stream = true, knownSecrets = [] } = {}) {
224
309
  if (plan.pipeTo)
225
310
  return await this.runPipedCommandPlan(plan, { stream });
226
- const shouldStream = stream && this.reporter.streamsCommands;
311
+ const shouldCapture = stream && this.reporter.capturesCommands;
227
312
  return await new Promise((resolve, reject) => {
228
313
  const child = spawn(plan.command, plan.args);
229
314
  let output = "";
230
- const redactor = new StreamingRedactor();
315
+ const redactor = new StreamingRedactor({ knownSecrets });
231
316
  // stdout and stderr share one redactor so a credential URL split across
232
317
  // the two streams is still masked before any part of it is emitted.
233
318
  const emit = /** @param {Buffer|string} chunk */ /** @param {Buffer|string} chunk */ chunk => {
234
319
  const text = chunk.toString();
235
320
  output += text;
236
- if (!shouldStream)
321
+ if (!shouldCapture)
237
322
  return;
238
323
  const safe = redactor.push(text);
239
324
  if (safe && !this.reporter.writeCommandOutput(safe)) {
@@ -246,7 +331,7 @@ export class SshTransport {
246
331
  }
247
332
  };
248
333
  const flush = () => {
249
- if (!shouldStream)
334
+ if (!shouldCapture)
250
335
  return;
251
336
  const rest = redactor.flush();
252
337
  if (rest)
@@ -256,15 +341,15 @@ export class SshTransport {
256
341
  child.stderr.on("data", emit);
257
342
  child.on("error", /** @param {Error} error */ /** @param {Error} error */ error => {
258
343
  flush();
259
- reject(error);
344
+ reject(new Error(redactText(error.message, knownSecrets)));
260
345
  });
261
346
  child.on("close", /** @param {number|null} code */ /** @param {number|null} code */ code => {
262
347
  flush();
263
348
  if (code === 0) {
264
- resolve({ code, output });
349
+ resolve({ code, output: knownSecrets.some(Boolean) ? redactText(output, knownSecrets) : output });
265
350
  }
266
351
  else {
267
- const error = /** @type {Error & {exitCode?: number}} */ (new Error(`Command failed with exit ${code}: ${redactText([plan.command, ...plan.args].join(" "))}\n${redactText(output)}`));
352
+ const error = /** @type {Error & {exitCode?: number}} */ (new Error(`Command failed with exit ${code}: ${redactText([plan.command, ...plan.args].join(" "), knownSecrets)}\n${redactText(output, knownSecrets)}`));
268
353
  error.exitCode = code ?? undefined;
269
354
  reject(error);
270
355
  }
@@ -279,14 +364,14 @@ export class SshTransport {
279
364
  */
280
365
  async runPipedCommandPlan(plan, { stream = true } = {}) {
281
366
  const pipeTo = /** @type {import('#types').CommandPlan} */ (plan.pipeTo);
282
- const shouldStream = stream && this.reporter.streamsCommands;
367
+ const shouldCapture = stream && this.reporter.capturesCommands;
283
368
  return await new Promise((resolve, reject) => {
284
369
  const source = spawn(plan.command, plan.args);
285
370
  const target = spawn(pipeTo.command, pipeTo.args);
286
371
  let output = "";
287
372
  const redactor = new StreamingRedactor();
288
373
  const flushOutput = () => {
289
- if (!shouldStream)
374
+ if (!shouldCapture)
290
375
  return;
291
376
  const rest = redactor.flush();
292
377
  if (rest)
@@ -303,7 +388,7 @@ export class SshTransport {
303
388
  const append = /** @param {Buffer|string} chunk */ /** @param {Buffer|string} chunk */ chunk => {
304
389
  const text = chunk.toString();
305
390
  output += text;
306
- if (!shouldStream)
391
+ if (!shouldCapture)
307
392
  return;
308
393
  const safe = redactor.push(text);
309
394
  if (safe && !this.reporter.writeCommandOutput(safe)) {
@@ -386,10 +471,18 @@ export function shellQuote(value) {
386
471
  * @returns {string}
387
472
  */
388
473
  export function shellEnvKey(key) {
389
- const text = String(key);
474
+ const text = shellEnvName(key);
390
475
  if (isSecretKey(text))
391
476
  throw new Error(`Secret-like environment variable cannot be passed through ssh command argv: ${text}`);
392
- if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(text))
477
+ return text;
478
+ }
479
+ /**
480
+ * @param {unknown} key
481
+ * @returns {string}
482
+ */
483
+ export function shellEnvName(key) {
484
+ const text = String(key);
485
+ if (isValidEnvironmentName(text))
393
486
  return text;
394
487
  throw new Error(`Invalid environment variable name for ssh command: ${text}`);
395
488
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ssh-transport.js","sourceRoot":"","sources":["../../../src/transports/ssh-transport.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssh-transport.js","sourceRoot":"","sources":["../../../src/transports/ssh-transport.js"],"names":[],"mappings":"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"}
@@ -35,6 +35,13 @@ export type TaskEntry = {
35
35
  optional?: boolean | undefined;
36
36
  onlyIfChanged?: string[] | undefined;
37
37
  };
38
+ export type OperationalTaskEntry = {
39
+ name: string;
40
+ command: string;
41
+ cwd?: string | undefined;
42
+ env?: Record<string, string> | undefined;
43
+ forwardEnv?: string[] | undefined;
44
+ };
38
45
  export type TaskResult = {
39
46
  name: string;
40
47
  command: string;
@@ -43,6 +50,13 @@ export type TaskResult = {
43
50
  error?: string | undefined;
44
51
  skipReason?: string | undefined;
45
52
  };
53
+ export type OperationalTaskReport = {
54
+ application: string;
55
+ stage: string;
56
+ task: string;
57
+ releaseId: string;
58
+ status: "passed";
59
+ };
46
60
  export type StageConfig = {
47
61
  application: string;
48
62
  stageName: string;
@@ -62,6 +76,7 @@ export type StageConfig = {
62
76
  linkedFiles: LinkedEntry[];
63
77
  linkedDirs: LinkedEntry[];
64
78
  tasks: Record<string, TaskEntry[]>;
79
+ operationalTasks: Record<string, OperationalTaskEntry[]>;
65
80
  hooks: Record<string, TaskEntry[]>;
66
81
  healthChecks: HealthCheckEntry[];
67
82
  runtime: RuntimeConfig;
@@ -181,6 +196,7 @@ export type ReleaseInfo = {
181
196
  rampwayVersion: string;
182
197
  };
183
198
  export type LockInfo = {
199
+ id: string;
184
200
  owner: string;
185
201
  host: string;
186
202
  pid: number;
@@ -190,6 +206,7 @@ export type CommandOptions = {
190
206
  config?: string | undefined;
191
207
  source?: string | undefined;
192
208
  revision?: string | undefined;
209
+ task?: string | undefined;
193
210
  branch?: string | undefined;
194
211
  yes?: boolean | undefined;
195
212
  dryRun?: boolean | undefined;
@@ -214,12 +231,15 @@ export type Transport = {
214
231
  rm: (targetPath: string) => Promise<void>;
215
232
  rename: (from: string, to: string) => Promise<void>;
216
233
  writeFile: (filePath: string, content: string) => Promise<void>;
234
+ writeFileExclusive: (filePath: string, content: string) => Promise<boolean>;
235
+ removeFileIfContent: (filePath: string, expectedContent: string) => Promise<boolean>;
217
236
  readFile: (filePath: string) => Promise<string>;
218
237
  list: (targetPath: string) => Promise<string[]>;
219
238
  copyDir: (from: string, to: string) => Promise<void>;
220
239
  run: (command: string, opts?: {
221
240
  cwd?: string;
222
241
  env?: Record<string, string>;
242
+ secretEnv?: Record<string, string>;
223
243
  }) => Promise<{
224
244
  code: number;
225
245
  output: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.js"],"names":[],"mappings":"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"}
@@ -8,6 +8,21 @@
8
8
  |-------|------|----------|-------------|
9
9
  | `application` | string | yes | Name of the application. Used in deploy metadata and reports. |
10
10
  | `stages` | object | yes | Map of stage names to stage configs. |
11
+ | `deployLog` | object \| boolean | no | Per-deploy log settings, or a boolean to enable/disable with defaults. See Deploy log below. |
12
+
13
+ ### Deploy log
14
+
15
+ Every `rampway <stage> deploy` writes a full transcript of its lifecycle steps and streamed command output (already redacted) to a timestamped file on the machine running the deploy — the kind of per-deploy log Capistrano keeps built in. The path is printed at the start of the run and in the final summary. Dry runs are not logged.
16
+
17
+ | Field | Type | Required | Default | Description |
18
+ |-------|------|----------|---------|-------------|
19
+ | `enabled` | boolean | no | `true` | Set to `false` (or set `deployLog: false`) to disable per-deploy logging. |
20
+ | `dir` | string | no | `"log/deploys"` | Log directory. Relative paths resolve against the deploy source; absolute paths are used as-is. |
21
+ | `keep` | number | no | `20` | Number of most-recent deploy logs to retain; older ones are pruned. |
22
+
23
+ Log files are named `<UTC-timestamp>-<stage>.log` (e.g. `20260722162000-production.log`). Only files matching that pattern are pruned, so unrelated files in the directory are never removed.
24
+
25
+ Malformed `deployLog` config fails loudly: `enabled` must be a boolean, `dir` a non-empty string, and `keep` a positive integer.
11
26
 
12
27
  ## Stage fields
13
28
 
@@ -23,6 +38,7 @@ Each stage under `stages` supports:
23
38
  | `linkedFiles` | array | no | `[]` | Files symlinked from `shared/` into each release. See Linked files below. |
24
39
  | `linkedDirs` | array | no | `[]` | Directories symlinked from `shared/` into each release. |
25
40
  | `tasks` | object | no | `{}` | Named task groups executed in order during deploy. See Tasks below. |
41
+ | `operationalTasks` | object | no | `{}` | Explicit standalone tasks that run against the active release. See Operational tasks below. |
26
42
  | `hooks` | object | no | `{}` | Lifecycle-phase hooks executed at specific points in the deploy pipeline. See Hooks below. |
27
43
  | `runtime` | object | no | `{type: "none"}` | Runtime adapter config. See Runtime below. |
28
44
  | `healthChecks` | array | no | `[]` | Checks run after tasks and before publish. See Health checks below. |
@@ -183,6 +199,47 @@ rampway production tasks --json
183
199
 
184
200
  Each entry shows its command plus any `cwd`, `env`, `optional`, and `onlyIfChanged` metadata. Secret-like env values and `KEY=value` assignments in commands are redacted in both the human and `--json` output.
185
201
 
202
+ ## Operational tasks
203
+
204
+ `operationalTasks` is a strict namespace for reusable standalone operations. It is separate from deploy lifecycle `tasks`: an operational task runs only when its exact configured name is invoked.
205
+
206
+ ```js
207
+ operationalTasks: {
208
+ "cache:warm": [
209
+ {
210
+ command: "npm run cache:warm",
211
+ cwd: "backend",
212
+ env: {NODE_ENV: "production"},
213
+ forwardEnv: ["CACHE_WARM_CREDENTIAL"]
214
+ }
215
+ ]
216
+ }
217
+ ```
218
+
219
+ Each value is a command string, one entry object, or a non-empty ordered array of strings and entry objects. Entry objects accept only:
220
+
221
+ - `command` — required non-empty shell command from trusted configuration.
222
+ - `cwd` — optional non-empty release-relative directory; absolute and escaping paths are rejected.
223
+ - `env` — optional string-valued environment literals with safe shell names. Secret-like keys are rejected; use `forwardEnv`.
224
+ - `forwardEnv` — optional unique allowlist of safe environment names. Every named value must exist in Rampway's invocation environment and is always treated as sensitive.
225
+
226
+ Task names are 1–128 characters and match `^[A-Za-z0-9][A-Za-z0-9:_-]*$`. Selection is an exact name lookup; command text and arbitrary trailing arguments cannot come from the CLI.
227
+
228
+ ```bash
229
+ CACHE_WARM_CREDENTIAL=... rampway production task cache:warm
230
+ CACHE_WARM_CREDENTIAL=... rampway production task cache:warm --json
231
+ ```
232
+
233
+ Rampway resolves all forwarded values before transport work, acquires the same exclusive lock used by deploy and rollback, then strictly resolves `current` to one existing direct child of `releases/`. Every entry is required and runs in order against that immutable release path. Missing configuration, forwarded values, lock ownership, active release, command failures, and transport failures all fail closed. There is no task `--force`.
234
+
235
+ For SSH, forwarded values are sent to a fixed remote shell through stdin rather than SSH argv. Known values are redacted from streamed output, returned output, and errors even when echoed without their variable name or split across chunks. Human output identifies the application, stage, task, and release. JSON mode emits only:
236
+
237
+ ```json
238
+ {"application":"demo","stage":"production","task":"cache:warm","releaseId":"20260728120000","status":"passed"}
239
+ ```
240
+
241
+ Standalone task runs are not appended to the deployment report. The plural `rampway <stage> tasks` command remains a read-only inventory of deploy task groups.
242
+
186
243
  ## Hooks
187
244
 
188
245
  Hooks are lifecycle-phase callbacks that run commands at specific points during the deploy pipeline, outside the fixed task-group slot. Each hook phase accepts an array of task entries (strings or objects, same format as tasks).
@@ -17,6 +17,7 @@ Rampway is a JS-native alternative to Capistrano for Node projects. This guide m
17
17
  | `SSHKit` | `transport: {type: "ssh"}` |
18
18
  | `after/before` hooks | `tasks` run in config order, or use lifecycle `hooks` for phase-specific callbacks |
19
19
  | `deploy:starting` … `deploy:finished` | task groups + runtime deploy |
20
+ | Explicit custom task against `current` | `operationalTasks` + `rampway production task <exact-name>` |
20
21
  | `cap production deploy` | `rampway production deploy` |
21
22
  | `cap -T` / `cap production -T` | `rampway production tasks` |
22
23
  | `cap production deploy:rollback` | `rampway production rollback` |
@@ -106,7 +107,27 @@ tasks: {
106
107
  }
107
108
  ```
108
109
 
109
- ### 5. Convert process management
110
+ ### 5. Convert standalone operational tasks
111
+
112
+ Keep operations that were invoked explicitly in Capistrano out of deploy task groups. Declare each one under the strict `operationalTasks` namespace and invoke its exact configured name:
113
+
114
+ ```js
115
+ operationalTasks: {
116
+ "cache:warm": {
117
+ command: "npm run cache:warm",
118
+ cwd: "backend",
119
+ forwardEnv: ["CACHE_WARM_CREDENTIAL"]
120
+ }
121
+ }
122
+ ```
123
+
124
+ ```bash
125
+ CACHE_WARM_CREDENTIAL=... rampway production task cache:warm
126
+ ```
127
+
128
+ Rampway owns the configured transport, shared deploy lock, active-release resolution, and secret-value redaction. Replace the former caller's direct SSH with the Rampway invocation; do not retain an SSH fallback. Operational tasks are explicit and never run as part of every deploy.
129
+
130
+ ### 6. Convert process management
110
131
 
111
132
  Capistrano relies on SSH-based process management (puma, sidekiq, etc.) or custom tasks:
112
133
 
@@ -136,7 +157,7 @@ Rollbridge handles zero-downtime restarts, health checks, and log access. Rampwa
136
157
 
137
158
  For simple setups without a process manager, use `runtime: {type: "none"}` and handle process restarts yourself via task commands.
138
159
 
139
- ### 6. Run the first deploy
160
+ ### 7. Run the first deploy
140
161
 
141
162
  ```bash
142
163
  # Validate
@@ -149,7 +170,7 @@ rampway production plan
149
170
  rampway production deploy
150
171
  ```
151
172
 
152
- ### 7. Verify and cleanup
173
+ ### 8. Verify and cleanup
153
174
 
154
175
  ```bash
155
176
  rampway production status
@@ -162,6 +183,7 @@ After verifying the first deploy works, remove your old Capistrano config files.
162
183
 
163
184
  - **No Ruby dependency.** Rampway runs on Node.js, matching your JS/TS stack.
164
185
  - **Task groups replace hooks.** Order task groups instead of registering `after`/`before` callbacks. For Capistrano-style lifecycle callbacks, use `hooks` with named phases like `before_publish` and `after_cleanup`.
186
+ - **Operational tasks replace explicitly invoked remote tasks.** Configure an exact name under `operationalTasks`; Rampway executes it against the locked active release and securely forwards allowlisted caller environment values.
165
187
  - **Runtime adapters replace process management tasks.** Rollbridge or a custom adapter handles zero-downtime handoff.
166
188
  - **ESM config.** `rampway.config.mjs` uses ES module syntax, not Ruby DSL.
167
189
  - **Health checks are built in.** Add `healthChecks` to verify deploy readiness before publishing.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rampway",
3
- "version": "0.2.5",
3
+ "version": "0.3.0",
4
4
  "description": "JS-native Capistrano-style release-directory deployments with Rollbridge integration.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -78,7 +78,8 @@
78
78
  "release:major": "npm version major && git push --follow-tags"
79
79
  },
80
80
  "dependencies": {
81
- "@types/node": "^26.1.1"
81
+ "@types/node": "^26.1.1",
82
+ "typanic": "^1.0.9"
82
83
  },
83
84
  "devDependencies": {
84
85
  "eslint": "^9.39.2",