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
package/README.md CHANGED
@@ -40,6 +40,8 @@ rampway production deploy <revision>
40
40
  rampway production status
41
41
  rampway production releases
42
42
  rampway production releases --json
43
+ rampway production task cache:warm
44
+ rampway production task cache:warm --json
43
45
  rampway production tasks
44
46
  rampway production tasks --json
45
47
  rampway production rollback
@@ -124,6 +126,14 @@ export default {
124
126
  {command: "npm run assets:verify", cwd: "app", env: {NODE_ENV: "production"}}
125
127
  ]
126
128
  },
129
+ operationalTasks: {
130
+ "cache:warm": {
131
+ command: "npm run cache:warm",
132
+ cwd: "backend",
133
+ env: {NODE_ENV: "production"},
134
+ forwardEnv: ["CACHE_WARM_CREDENTIAL"]
135
+ }
136
+ },
127
137
  runtime: {
128
138
  type: "rollbridge",
129
139
  command: "npx rollbridge",
@@ -157,6 +167,8 @@ Task entries can be strings or objects.
157
167
 
158
168
  Task groups run in config order. Required task failures stop the deploy before publish. Deploy failures include whether `current` changed and recovery hints for the affected stage, such as rerunning a before-publish failure, inspecting a newly created failed release directory, or inspecting `rampway status`, `rampway releases`, and `rampway rollback` after a failure that happened after publish. Existing release-id collisions do not suggest deleting the release directory.
159
169
 
170
+ Standalone operational tasks are configured separately under `operationalTasks` and run only when explicitly selected with `rampway <stage> task <exact-name>`. Rampway acquires the shared deploy lock, strictly resolves the active release, and runs every required entry against that immutable release path. `forwardEnv` names caller-supplied environment variables that must be present; their values are transported separately from ordinary `env` and redacted from output and errors. Operational tasks do not run during deploy, accept no command arguments or `--force`, and are not included in the plural `tasks` deploy-task inventory.
171
+
160
172
  ## Deployment reports
161
173
 
162
174
  Every successful deploy or rollback appends one JSON object per line to `shared/log/rampway-deployments.jsonl`. Deploy events include:
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.js"],"names":[],"mappings":";AA2CA;;;GAGG;AACH,2BAHW,MAAM,EAAE,GACN,OAAO,CAAC,IAAI,CAAC,CAUzB;AAED;;;;;;;GAOG;AACH,wCAHW,MAAM,EAAE,GACN;IAAC,OAAO,EAAE,MAAM,GAAC,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,GAAC,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,QAAQ,EAAE,cAAc,CAAA;CAAC,CAgB9G"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.js"],"names":[],"mappings":";AA8CA;;;GAGG;AACH,2BAHW,MAAM,EAAE,GACN,OAAO,CAAC,IAAI,CAAC,CAUzB;AAED;;;;;;;GAOG;AACH,wCAHW,MAAM,EAAE,GACN;IAAC,OAAO,EAAE,MAAM,GAAC,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,GAAC,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,QAAQ,EAAE,cAAc,CAAA;CAAC,CA2B9G"}
package/build/src/cli.js CHANGED
@@ -9,7 +9,9 @@ import { releasesCommand, statusCommand } from "./commands/releases.js";
9
9
  import { rollbackCommand } from "./commands/rollback.js";
10
10
  import { rollbridgeValidateCommand, rollbridgeStatusCommand, rollbridgeLogsCommand, rollbridgeRecoverCommand } from "./commands/rollbridge.js";
11
11
  import { tasksCommand } from "./commands/tasks.js";
12
+ import { taskCommand } from "./commands/task.js";
12
13
  import { initCommand } from "./commands/init.js";
14
+ import { isValidOperationalTaskName } from "./config/validate-config.js";
13
15
  /** @type {Record<string, Function>} */
14
16
  const COMMANDS = {
15
17
  init: initCommand,
@@ -18,6 +20,7 @@ const COMMANDS = {
18
20
  deploy: deployCommand,
19
21
  releases: releasesCommand,
20
22
  status: statusCommand,
23
+ task: taskCommand,
21
24
  tasks: tasksCommand,
22
25
  rollback: rollbackCommand,
23
26
  "rollbridge-validate": rollbridgeValidateCommand,
@@ -34,7 +37,7 @@ const COMMANDS = {
34
37
  const STAGELESS_COMMANDS = new Set(["init"]);
35
38
  /** @type {string[]} */
36
39
  const BOOLEAN_FLAGS = ["yes", "dry-run", "force", "allow-dirty", "json"];
37
- const USAGE = "Usage: rampway <environment> <command> [revision] [--config path] (for example: rampway production deploy) OR rampway init";
40
+ const USAGE = "Usage: rampway <environment> <command> [operand] [--config path] (for example: rampway production deploy) OR rampway init";
38
41
  /**
39
42
  * @param {string[]} argv
40
43
  * @returns {Promise<void>}
@@ -61,14 +64,32 @@ function resolveInvocation(argv) {
61
64
  const { positional, options } = parseArgs(argv);
62
65
  // Command-only form: `rampway init`.
63
66
  if (STAGELESS_COMMANDS.has(positional[0])) {
67
+ if (positional.length !== 1)
68
+ throw new Error(`Command '${positional[0]}' does not accept positional operands.`);
64
69
  return { command: positional[0], stageName: undefined, options };
65
70
  }
66
- // Stage-first form: `rampway <environment> <command> [revision]`.
67
- const [stageName, command, revision] = positional;
68
- // An explicit positional revision overrides every other source; otherwise the
69
- // precedence in deployCommand (--revision, --branch, configured values) stands.
70
- if (revision !== undefined)
71
- options.revision = revision;
71
+ const [stageName, command, ...operands] = positional;
72
+ if (command === "deploy") {
73
+ if (operands.length > 1)
74
+ throw new Error("Command 'deploy' accepts at most one revision.");
75
+ // An explicit positional revision overrides every other source; otherwise
76
+ // deployCommand's --revision/--branch/config precedence stands.
77
+ if (operands[0] !== undefined)
78
+ options.revision = operands[0];
79
+ }
80
+ else if (command === "task") {
81
+ if (operands.length !== 1)
82
+ throw new Error("Command 'task' requires exactly one task name.");
83
+ if (!isValidOperationalTaskName(operands[0]))
84
+ throw new Error(`Invalid operational task name '${operands[0]}'.`);
85
+ const unsupported = Object.keys(options).filter(option => !["config", "json"].includes(option));
86
+ if (unsupported.length > 0)
87
+ throw new Error(`Command 'task' does not support option --${toKebab(unsupported[0])}.`);
88
+ options.task = operands[0];
89
+ }
90
+ else if (operands.length > 0) {
91
+ throw new Error(`Command '${command}' does not accept positional operands.`);
92
+ }
72
93
  return { command, stageName, options };
73
94
  }
74
95
  /**
@@ -102,6 +123,13 @@ function parseArgs(argv) {
102
123
  function toCamel(name) {
103
124
  return name.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
104
125
  }
126
+ /**
127
+ * @param {string} name
128
+ * @returns {string}
129
+ */
130
+ function toKebab(name) {
131
+ return name.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);
132
+ }
105
133
  const invokedPath = process.argv[1] ? pathToFileURL(realpathSync(process.argv[1])).href : null;
106
134
  if (invokedPath && import.meta.url === invokedPath) {
107
135
  main(process.argv.slice(2)).catch(error => {
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.js"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,sEAHW,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,IAAI,CAAC,CAczB"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,sEAHW,OAAO,QAAQ,EAAE,WAAW,GAC1B,OAAO,CAAC,IAAI,CAAC,CAgCzB"}
@@ -1,6 +1,7 @@
1
1
  // @ts-check
2
2
  import { commandContext as defaultCommandContext } from "./context.js";
3
3
  import { deploy } from "../core/deploy-runner.js";
4
+ import { openDeployLog } from "../core/deploy-log.js";
4
5
  import { humanReporter, jsonReporter } from "../core/reporter.js";
5
6
  /**
6
7
  * @param {import('#types').CommandArgs} args
@@ -8,22 +9,43 @@ import { humanReporter, jsonReporter } from "../core/reporter.js";
8
9
  */
9
10
  export async function deployCommand({ stageName, options, commandContext = defaultCommandContext }) {
10
11
  const reporter = options.json ? jsonReporter() : humanReporter();
11
- const { stage, transport } = await commandContext(options, stageName, { reporter });
12
+ const { config, stage, transport } = await commandContext(options, stageName, { reporter });
12
13
  const resolvedStage = options.branch && !options.revision ? { ...stage, revision: undefined } : stage;
13
- const report = await deploy({ transport, stage: resolvedStage, sourcePath: options.source ?? process.cwd(), revision: options.revision, branch: options.branch ?? stage.branch, dryRun: options.dryRun, force: options.force, reporter });
14
- if (options.json || "plan" in report) {
15
- console.log(JSON.stringify(report, null, 2));
16
- return;
14
+ const sourcePath = options.source ?? process.cwd();
15
+ // A dry run only prints a plan, so there is no deploy transcript worth keeping.
16
+ const deployLog = options.dryRun ? null : openDeployLog({ config, sourcePath, stageName });
17
+ if (deployLog) {
18
+ reporter.attachLogStream(deployLog.stream);
19
+ // Emitted through the reporter so it records its own path as the log's first
20
+ // line and stays off stdout in `--json` mode.
21
+ reporter.line(`Logging deploy output to ${deployLog.path}`);
22
+ }
23
+ try {
24
+ const report = await deploy({ transport, stage: resolvedStage, sourcePath, revision: options.revision, branch: options.branch ?? stage.branch, dryRun: options.dryRun, force: options.force, reporter });
25
+ if (options.json || "plan" in report) {
26
+ console.log(JSON.stringify(report, null, 2));
27
+ return;
28
+ }
29
+ printSummary(/** @type {import('#types').DeployReport} */ (report), deployLog?.path);
30
+ }
31
+ catch (error) {
32
+ if (deployLog)
33
+ deployLog.stream.write(`\nDeploy failed: ${ /** @type {Error} */(error).message}\n`);
34
+ throw error;
35
+ }
36
+ finally {
37
+ if (deployLog)
38
+ await deployLog.close();
17
39
  }
18
- printSummary(/** @type {import('#types').DeployReport} */ (report));
19
40
  }
20
41
  /**
21
42
  * Prints a concise Capistrano-style final summary of a successful deploy.
22
43
  *
23
44
  * @param {import('#types').DeployReport} report
45
+ * @param {string} [logPath] Path of the persistent per-deploy log, when written.
24
46
  * @returns {void}
25
47
  */
26
- function printSummary(report) {
48
+ function printSummary(report, logPath) {
27
49
  const seconds = report.durationMs === undefined ? undefined : (report.durationMs / 1000).toFixed(1);
28
50
  console.log(`✔ Deployed ${report.application}/${report.stage} revision ${report.revision} as release ${report.releaseId}${seconds === undefined ? "" : ` in ${seconds}s`}`);
29
51
  if (report.previousRelease)
@@ -31,5 +53,7 @@ function printSummary(report) {
31
53
  console.log(` Health checks: ${report.healthChecks ?? "n/a"}`);
32
54
  const removed = report.cleanupRemoved ?? [];
33
55
  console.log(` Cleaned up: ${removed.length} old release${removed.length === 1 ? "" : "s"}`);
56
+ if (logPath)
57
+ console.log(` Deploy log: ${logPath}`);
34
58
  }
35
59
  //# sourceMappingURL=deploy.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/deploy.js"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EAAC,cAAc,IAAI,qBAAqB,EAAC,MAAM,cAAc,CAAA;AACpE,OAAO,EAAC,MAAM,EAAC,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,qBAAqB,CAAA;AAE/D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAC,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,qBAAqB,EAAC;IAC9F,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IAChE,MAAM,EAAC,KAAK,EAAE,SAAS,EAAC,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAA;IAC/E,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACnG,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAC,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAC,CAAC,CAAA;IAEvO,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,OAAM;IACR,CAAC;IAED,YAAY,CAAC,4CAA4C,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AACrE,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CAAC,MAAM;IAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACnG,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,KAAK,aAAa,MAAM,CAAC,QAAQ,eAAe,MAAM,CAAC,SAAS,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,OAAO,GAAG,EAAE,CAAC,CAAA;IAC3K,IAAI,MAAM,CAAC,eAAe;QAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAA;IACxF,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,CAAA;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,MAAM,eAAe,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;AAC9F,CAAC"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/deploy.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @param {import('#types').CommandArgs & {operationalTaskRunner?: typeof runOperationalTask}} args
3
+ * @returns {Promise<void>}
4
+ */
5
+ export function taskCommand({ stageName, options, commandContext, operationalTaskRunner }: import("#types").CommandArgs & {
6
+ operationalTaskRunner?: typeof runOperationalTask;
7
+ }): Promise<void>;
8
+ import { runOperationalTask } from "../core/operational-task-runner.js";
9
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/commands/task.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,2FAHW,OAAO,QAAQ,EAAE,WAAW,GAAG;IAAC,qBAAqB,CAAC,EAAE,OAAO,kBAAkB,CAAA;CAAC,GAChF,OAAO,CAAC,IAAI,CAAC,CAkBzB;mCAvBgC,oCAAoC"}
@@ -0,0 +1,23 @@
1
+ // @ts-check
2
+ import { commandContext as defaultCommandContext } from "./context.js";
3
+ import { runOperationalTask } from "../core/operational-task-runner.js";
4
+ import { humanReporter, jsonReporter } from "../core/reporter.js";
5
+ /**
6
+ * @param {import('#types').CommandArgs & {operationalTaskRunner?: typeof runOperationalTask}} args
7
+ * @returns {Promise<void>}
8
+ */
9
+ export async function taskCommand({ stageName, options, commandContext = defaultCommandContext, operationalTaskRunner = runOperationalTask }) {
10
+ if (!options.task)
11
+ throw new Error("Command 'task' requires exactly one task name.");
12
+ const reporter = options.json ? jsonReporter() : humanReporter();
13
+ const { stage, transport } = await commandContext(options, stageName, { reporter });
14
+ const report = await operationalTaskRunner({
15
+ transport,
16
+ stage,
17
+ taskName: options.task,
18
+ reporter
19
+ });
20
+ if (options.json)
21
+ console.log(JSON.stringify(report));
22
+ }
23
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../../src/commands/task.js"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EAAC,cAAc,IAAI,qBAAqB,EAAC,MAAM,cAAc,CAAA;AACpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,oCAAoC,CAAA;AACrE,OAAO,EAAC,aAAa,EAAE,YAAY,EAAC,MAAM,qBAAqB,CAAA;AAE/D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAChC,SAAS,EACT,OAAO,EACP,cAAc,GAAG,qBAAqB,EACtC,qBAAqB,GAAG,kBAAkB,EAC3C;IACC,IAAI,CAAC,OAAO,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;IACpF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IAChE,MAAM,EAAC,KAAK,EAAE,SAAS,EAAC,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAC,QAAQ,EAAC,CAAC,CAAA;IAC/E,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC;QACzC,SAAS;QACT,KAAK;QACL,QAAQ,EAAE,OAAO,CAAC,IAAI;QACtB,QAAQ;KACT,CAAC,CAAA;IACF,IAAI,OAAO,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AACvD,CAAC"}
@@ -4,4 +4,9 @@
4
4
  * @returns {import('#types').StageConfig}
5
5
  */
6
6
  export function validateConfig(config: Record<string, unknown>, stageName: string): import("#types").StageConfig;
7
+ /**
8
+ * @param {unknown} name
9
+ * @returns {boolean}
10
+ */
11
+ export function isValidOperationalTaskName(name: unknown): boolean;
7
12
  //# sourceMappingURL=validate-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../../src/config/validate-config.js"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,uCAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aACvB,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAcxC"}
1
+ {"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../../src/config/validate-config.js"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,uCAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aACvB,MAAM,GACJ,OAAO,QAAQ,EAAE,WAAW,CAcxC;AAmED;;;GAGG;AACH,iDAHW,OAAO,GACL,OAAO,CAInB"}
@@ -1,7 +1,12 @@
1
+ import path from "node:path";
1
2
  import { runtimeTypeNames } from "../runtimes/index.js";
2
3
  import { isGitRevision } from "../core/git-source.js";
4
+ import { isSecretKey, isValidEnvironmentName } from "../core/redaction.js";
5
+ import { commandsForEntries } from "../core/task-runner.js";
3
6
  const SUPPORTED_TRANSPORTS = new Set(["local", "ssh"]);
4
7
  const SUPPORTED_STRATEGIES = new Set(["local-copy", "remote-git", "archive-upload"]);
8
+ const OPERATIONAL_TASK_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9:_-]*$/u;
9
+ const OPERATIONAL_TASK_FIELDS = new Set(["command", "cwd", "env", "forwardEnv"]);
5
10
  /**
6
11
  * @param {Record<string, unknown>} config
7
12
  * @param {string} stageName
@@ -56,6 +61,7 @@ function validateStage(stage, errors) {
56
61
  errors.push("stage.linkedDirs must be an array");
57
62
  if (stage.tasks && typeof stage.tasks !== "object")
58
63
  errors.push("stage.tasks must be an object");
64
+ validateOperationalTasks(stage, errors);
59
65
  const runtimeType = String(/** @type {{type?: string}|undefined} */ (stage.runtime)?.type ?? (stage.rollbridge ? "rollbridge" : "none"));
60
66
  const supportedRuntimes = runtimeTypeNames();
61
67
  if (!supportedRuntimes.includes(runtimeType))
@@ -93,11 +99,144 @@ function normalizedStage(config, stageName) {
93
99
  linkedFiles: normalizeLinkedEntries(/** @type {Array<string|{path: string, required?: boolean}>} */ (stage.linkedFiles ?? [])),
94
100
  linkedDirs: normalizeLinkedEntries(/** @type {Array<string|{path: string, required?: boolean}>} */ (stage.linkedDirs ?? [])),
95
101
  tasks: /** @type {Record<string, import('#types').TaskEntry[]>} */ (stage.tasks ?? {}),
102
+ operationalTasks: normalizeOperationalTasks(Object.hasOwn(stage, "operationalTasks") ? stage.operationalTasks : undefined),
96
103
  hooks: /** @type {Record<string, import('#types').TaskEntry[]>} */ (stage.hooks ?? {}),
97
104
  healthChecks: /** @type {import('#types').HealthCheckEntry[]} */ (stage.healthChecks ?? []),
98
105
  runtime: /** @type {import('#types').RuntimeConfig} */ (stage.runtime ?? (rollbridgeObj ? { type: "rollbridge", ...rollbridgeObj } : { type: "none" }))
99
106
  };
100
107
  }
108
+ /**
109
+ * @param {unknown} name
110
+ * @returns {boolean}
111
+ */
112
+ export function isValidOperationalTaskName(name) {
113
+ return typeof name === "string" && name.length >= 1 && name.length <= 128 && OPERATIONAL_TASK_NAME_PATTERN.test(name);
114
+ }
115
+ /**
116
+ * @param {Record<string, unknown>} stage
117
+ * @param {string[]} errors
118
+ * @returns {void}
119
+ */
120
+ function validateOperationalTasks(stage, errors) {
121
+ if (!Object.hasOwn(stage, "operationalTasks"))
122
+ return;
123
+ if (!isRecord(stage.operationalTasks)) {
124
+ errors.push("stage.operationalTasks must be an object");
125
+ return;
126
+ }
127
+ for (const [name, configured] of Object.entries(stage.operationalTasks)) {
128
+ const taskPath = `stage.operationalTasks.${name}`;
129
+ if (!isValidOperationalTaskName(name))
130
+ errors.push(`${taskPath}: Invalid operational task name '${name}'`);
131
+ if (Array.isArray(configured) && configured.length === 0) {
132
+ errors.push(`${taskPath} must not be an empty array`);
133
+ continue;
134
+ }
135
+ const entries = Array.isArray(configured) ? configured : [configured];
136
+ for (const [index, rawEntry] of entries.entries()) {
137
+ const entryPath = entries.length === 1 ? taskPath : `${taskPath}[${index}]`;
138
+ validateOperationalTaskEntry(name, rawEntry, entryPath, errors);
139
+ }
140
+ }
141
+ }
142
+ /**
143
+ * @param {string} name
144
+ * @param {unknown} rawEntry
145
+ * @param {string} entryPath
146
+ * @param {string[]} errors
147
+ * @returns {void}
148
+ */
149
+ function validateOperationalTaskEntry(name, rawEntry, entryPath, errors) {
150
+ if (typeof rawEntry !== "string" && !isRecord(rawEntry)) {
151
+ errors.push(`${entryPath} must be a string or operational task object`);
152
+ return;
153
+ }
154
+ if (isRecord(rawEntry)) {
155
+ for (const field of Object.keys(rawEntry)) {
156
+ if (!OPERATIONAL_TASK_FIELDS.has(field))
157
+ errors.push(`${entryPath} has unknown field '${field}'`);
158
+ }
159
+ }
160
+ let entry;
161
+ try {
162
+ entry = commandsForEntries(name, /** @type {string|import('#types').TaskEntry} */ (rawEntry))[0];
163
+ }
164
+ catch (error) {
165
+ errors.push(`${entryPath}: ${ /** @type {Error} */(error).message}`);
166
+ return;
167
+ }
168
+ if (entry.command.trim().length === 0)
169
+ errors.push(`${entryPath}.command must be a non-empty string`);
170
+ if (entry.cwd !== undefined && !isReleaseRelativeCwd(entry.cwd))
171
+ errors.push(`${entryPath}.cwd must be a non-empty release-relative path that does not escape the release`);
172
+ const rawEnv = /** @type {{env?: unknown}} */ (rawEntry).env;
173
+ if (rawEnv !== undefined && !isRecord(rawEnv)) {
174
+ errors.push(`${entryPath}.env must be an object`);
175
+ }
176
+ else if (isRecord(rawEnv)) {
177
+ for (const [key, value] of Object.entries(rawEnv)) {
178
+ if (!isValidEnvironmentName(key))
179
+ errors.push(`${entryPath}.env: Invalid environment variable name '${key}'`);
180
+ if (typeof value !== "string")
181
+ errors.push(`${entryPath}.env.${key} must be a string`);
182
+ if (isSecretKey(key))
183
+ errors.push(`${entryPath}.env.${key} is secret-like; use forwardEnv instead`);
184
+ }
185
+ }
186
+ const rawForwardEnv = /** @type {{forwardEnv?: unknown}} */ (rawEntry).forwardEnv;
187
+ if (rawForwardEnv !== undefined && !Array.isArray(rawForwardEnv)) {
188
+ errors.push(`${entryPath}.forwardEnv must be an array`);
189
+ }
190
+ else if (Array.isArray(rawForwardEnv)) {
191
+ const seen = new Set();
192
+ for (const value of rawForwardEnv) {
193
+ if (!isValidEnvironmentName(value)) {
194
+ errors.push(`${entryPath}.forwardEnv: Invalid environment variable name '${String(value)}'`);
195
+ continue;
196
+ }
197
+ if (seen.has(value))
198
+ errors.push(`${entryPath} has duplicate forwardEnv '${value}'`);
199
+ seen.add(value);
200
+ if (isRecord(rawEnv) && Object.hasOwn(rawEnv, value))
201
+ errors.push(`${entryPath}.${value} cannot be in both env and forwardEnv`);
202
+ }
203
+ }
204
+ }
205
+ /**
206
+ * @param {unknown} configured
207
+ * @returns {Record<string, import('#types').OperationalTaskEntry[]>}
208
+ */
209
+ function normalizeOperationalTasks(configured) {
210
+ if (!isRecord(configured))
211
+ return {};
212
+ /** @type {Record<string, import('#types').OperationalTaskEntry[]>} */
213
+ const normalized = {};
214
+ for (const [name, entries] of Object.entries(configured)) {
215
+ normalized[name] = /** @type {import('#types').OperationalTaskEntry[]} */ (commandsForEntries(name, /** @type {string|import('#types').TaskEntry|Array<string|import('#types').TaskEntry>} */ (entries)));
216
+ }
217
+ return normalized;
218
+ }
219
+ /**
220
+ * @param {unknown} value
221
+ * @returns {value is Record<string, unknown>}
222
+ */
223
+ function isRecord(value) {
224
+ if (value === null || typeof value !== "object" || Array.isArray(value))
225
+ return false;
226
+ const prototype = Object.getPrototypeOf(value);
227
+ return prototype === Object.prototype || prototype === null;
228
+ }
229
+ /**
230
+ * @param {unknown} cwd
231
+ * @returns {cwd is string}
232
+ */
233
+ function isReleaseRelativeCwd(cwd) {
234
+ if (typeof cwd !== "string" || cwd.trim().length === 0 || cwd.includes("\0"))
235
+ return false;
236
+ if (path.posix.isAbsolute(cwd) || path.win32.isAbsolute(cwd))
237
+ return false;
238
+ return !cwd.split(/[\\/]+/u).includes("..");
239
+ }
101
240
  /**
102
241
  * @param {Array<string|{path: string, required?: boolean}>} entries
103
242
  * @returns {import('#types').LinkedEntry[]}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-config.js","sourceRoot":"","sources":["../../../src/config/validate-config.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-config.js","sourceRoot":"","sources":["../../../src/config/validate-config.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @name DeployLogSettings
3
+ * @typedef {object} DeployLogSettings
4
+ * @property {boolean} enabled Whether a per-deploy log file is written.
5
+ * @property {string} dir Log directory; relative paths resolve against the deploy source.
6
+ * @property {number} keep Number of most-recent deploy logs to retain.
7
+ */
8
+ /**
9
+ * Resolves the per-deploy log settings from the loaded Rampway config, applying
10
+ * defaults. `deployLog: false` (or `{enabled: false}`) disables logging.
11
+ *
12
+ * @param {unknown} rawConfig Full loaded Rampway config object.
13
+ * @returns {DeployLogSettings}
14
+ */
15
+ export function resolveDeployLogConfig(rawConfig: unknown): DeployLogSettings;
16
+ /**
17
+ * @name DeployLog
18
+ * @typedef {object} DeployLog
19
+ * @property {string} path Absolute path of the log file being written.
20
+ * @property {import('node:fs').WriteStream} stream Append stream to tee reporter output into.
21
+ * @property {() => Promise<void>} close Flushes and closes the log stream.
22
+ */
23
+ /**
24
+ * Opens the per-deploy log for a run: resolves the directory relative to the
25
+ * deploy source, creates a timestamped file, prunes old logs to the configured
26
+ * keep count, and returns an append stream. Returns `null` when logging is
27
+ * disabled.
28
+ *
29
+ * @param {{config: unknown, sourcePath: string, stageName: string, now?: Date}} args
30
+ * @returns {DeployLog | null}
31
+ */
32
+ export function openDeployLog({ config, sourcePath, stageName, now }: {
33
+ config: unknown;
34
+ sourcePath: string;
35
+ stageName: string;
36
+ now?: Date;
37
+ }): DeployLog | null;
38
+ export type DeployLogSettings = {
39
+ /**
40
+ * Whether a per-deploy log file is written.
41
+ */
42
+ enabled: boolean;
43
+ /**
44
+ * Log directory; relative paths resolve against the deploy source.
45
+ */
46
+ dir: string;
47
+ /**
48
+ * Number of most-recent deploy logs to retain.
49
+ */
50
+ keep: number;
51
+ };
52
+ export type DeployLog = {
53
+ /**
54
+ * Absolute path of the log file being written.
55
+ */
56
+ path: string;
57
+ /**
58
+ * Append stream to tee reporter output into.
59
+ */
60
+ stream: import("node:fs").WriteStream;
61
+ /**
62
+ * Flushes and closes the log stream.
63
+ */
64
+ close: () => Promise<void>;
65
+ };
66
+ //# sourceMappingURL=deploy-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-log.d.ts","sourceRoot":"","sources":["../../../src/core/deploy-log.js"],"names":[],"mappings":"AAqBA;;;;;;GAMG;AAEH;;;;;;GAMG;AACH,kDAHW,OAAO,GACL,iBAAiB,CAiB7B;AAED;;;;;;GAMG;AAEH;;;;;;;;GAQG;AACH,sEAHW;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAC,GAClE,SAAS,GAAG,IAAI,CAmB5B;;;;;aA/Da,OAAO;;;;SACP,MAAM;;;;UACN,MAAM;;;;;;UA8BN,MAAM;;;;YACN,OAAO,SAAS,EAAE,WAAW;;;;WAC7B,MAAM,OAAO,CAAC,IAAI,CAAC"}