rampway 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -19
- package/build/src/cli.d.ts +18 -1
- package/build/src/cli.d.ts.map +1 -1
- package/build/src/cli.js +46 -39
- package/build/src/cli.js.map +1 -1
- package/build/src/commands/context.d.ts +4 -1
- package/build/src/commands/context.d.ts.map +1 -1
- package/build/src/commands/context.js +4 -2
- package/build/src/commands/context.js.map +1 -1
- package/build/src/commands/deploy.d.ts.map +1 -1
- package/build/src/commands/deploy.js +25 -5
- package/build/src/commands/deploy.js.map +1 -1
- package/build/src/core/deploy-runner.d.ts +1 -1
- package/build/src/core/deploy-runner.d.ts.map +1 -1
- package/build/src/core/deploy-runner.js +19 -7
- package/build/src/core/deploy-runner.js.map +1 -1
- package/build/src/core/redaction.d.ts +46 -0
- package/build/src/core/redaction.d.ts.map +1 -1
- package/build/src/core/redaction.js +106 -0
- package/build/src/core/redaction.js.map +1 -1
- package/build/src/core/reporter.d.ts +68 -0
- package/build/src/core/reporter.d.ts.map +1 -0
- package/build/src/core/reporter.js +76 -0
- package/build/src/core/reporter.js.map +1 -0
- package/build/src/core/task-runner.d.ts +7 -4
- package/build/src/core/task-runner.d.ts.map +1 -1
- package/build/src/core/task-runner.js +12 -7
- package/build/src/core/task-runner.js.map +1 -1
- package/build/src/runtimes/rollbridge-runtime.d.ts +8 -0
- package/build/src/runtimes/rollbridge-runtime.d.ts.map +1 -1
- package/build/src/runtimes/rollbridge-runtime.js +14 -7
- package/build/src/runtimes/rollbridge-runtime.js.map +1 -1
- package/build/src/transports/local-transport.d.ts +8 -0
- package/build/src/transports/local-transport.d.ts.map +1 -1
- package/build/src/transports/local-transport.js +38 -4
- package/build/src/transports/local-transport.js.map +1 -1
- package/build/src/transports/ssh-transport.d.ts +7 -3
- package/build/src/transports/ssh-transport.d.ts.map +1 -1
- package/build/src/transports/ssh-transport.js +59 -25
- package/build/src/transports/ssh-transport.js.map +1 -1
- package/build/src/types.d.ts +2 -0
- package/build/src/types.d.ts.map +1 -1
- package/build/src/types.js +1 -0
- package/build/src/types.js.map +1 -1
- package/docs/migration-from-capistrano.md +7 -7
- package/package.json +4 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
const SECRET_KEY_PATTERN = /(token|password|secret|key|cookie|authorization)/iu;
|
|
2
3
|
const SECRET_ASSIGNMENT_PATTERN = /((?:token|password|secret|key|cookie|authorization)[A-Z0-9_\-]*\s*=\s*)([^\s]+)/giu;
|
|
3
4
|
const HTTPS_USERINFO_PATTERN = /(https?:\/\/)[^/@\s]+@/giu;
|
|
@@ -36,4 +37,109 @@ export function redactEnv(env = {}) {
|
|
|
36
37
|
export function redactText(text) {
|
|
37
38
|
return String(text).replace(SECRET_ASSIGNMENT_PATTERN, "$1[REDACTED]").replace(HTTPS_USERINFO_PATTERN, "$1[REDACTED]@");
|
|
38
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Incrementally redacts a command output stream without ever emitting a
|
|
42
|
+
* possibly-incomplete sensitive tail.
|
|
43
|
+
*
|
|
44
|
+
* Secret assignments (`KEY=value`) and credential URLs
|
|
45
|
+
* (`https://user:pass@host`) are always terminated by whitespace and contain no
|
|
46
|
+
* internal whitespace, so any token preceding the final whitespace in the
|
|
47
|
+
* buffer is complete and safe to redact and emit. The unterminated trailing
|
|
48
|
+
* token is held back until more input (or {@link StreamingRedactor#flush})
|
|
49
|
+
* arrives. Notably `https://user:pass` without a terminating `@host` is not a
|
|
50
|
+
* credential URL at all, so holding it back until whitespace guarantees the
|
|
51
|
+
* `@host` half has arrived before anything is emitted.
|
|
52
|
+
*
|
|
53
|
+
* The held-back tail is bounded. An over-long non-sensitive token is trimmed to
|
|
54
|
+
* its trailing `maxHold` characters. An over-long secret assignment is redacted
|
|
55
|
+
* once and then discarded until its terminating whitespace, so no suffix can
|
|
56
|
+
* escape and memory remains bounded.
|
|
57
|
+
*/
|
|
58
|
+
export class StreamingRedactor {
|
|
59
|
+
/**
|
|
60
|
+
* @param {{maxHold?: number}} [opts]
|
|
61
|
+
*/
|
|
62
|
+
constructor({ maxHold = 8192 } = {}) {
|
|
63
|
+
/** @type {string} */
|
|
64
|
+
this.pending = "";
|
|
65
|
+
/** @type {number} */
|
|
66
|
+
this.maxHold = maxHold;
|
|
67
|
+
/** @type {boolean} */
|
|
68
|
+
this.discardingSecretValue = false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Appends a chunk and returns the redacted text that is safe to emit now.
|
|
72
|
+
*
|
|
73
|
+
* @param {string} chunk
|
|
74
|
+
* @returns {string}
|
|
75
|
+
*/
|
|
76
|
+
push(chunk) {
|
|
77
|
+
if (this.discardingSecretValue) {
|
|
78
|
+
const whitespaceIndex = firstWhitespaceIndex(chunk);
|
|
79
|
+
if (whitespaceIndex < 0)
|
|
80
|
+
return "";
|
|
81
|
+
this.discardingSecretValue = false;
|
|
82
|
+
chunk = chunk.slice(whitespaceIndex);
|
|
83
|
+
}
|
|
84
|
+
this.pending += chunk;
|
|
85
|
+
let cut = lastWhitespaceIndex(this.pending) + 1;
|
|
86
|
+
if (this.pending.length - cut > this.maxHold) {
|
|
87
|
+
const tail = this.pending.slice(cut);
|
|
88
|
+
const secretPrefix = secretAssignmentPrefix(tail);
|
|
89
|
+
if (secretPrefix) {
|
|
90
|
+
const leading = this.pending.slice(0, cut);
|
|
91
|
+
this.pending = "";
|
|
92
|
+
this.discardingSecretValue = true;
|
|
93
|
+
return leading + secretPrefix + "[REDACTED]";
|
|
94
|
+
}
|
|
95
|
+
const scheme = tail.search(/https?:\/\/(?![^\s]*@)/u);
|
|
96
|
+
cut = scheme >= 0 ? cut + scheme : this.pending.length - this.maxHold;
|
|
97
|
+
}
|
|
98
|
+
if (cut <= 0)
|
|
99
|
+
return "";
|
|
100
|
+
const emit = this.pending.slice(0, cut);
|
|
101
|
+
this.pending = this.pending.slice(cut);
|
|
102
|
+
return redactText(emit);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Emits and clears any buffered tail. At end of stream the final token is
|
|
106
|
+
* complete, so redactText fully masks any secret it contains.
|
|
107
|
+
*
|
|
108
|
+
* @returns {string}
|
|
109
|
+
*/
|
|
110
|
+
flush() {
|
|
111
|
+
const rest = this.pending;
|
|
112
|
+
this.pending = "";
|
|
113
|
+
return redactText(rest);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* @param {string} text
|
|
118
|
+
* @returns {number}
|
|
119
|
+
*/
|
|
120
|
+
function lastWhitespaceIndex(text) {
|
|
121
|
+
for (let index = text.length - 1; index >= 0; index -= 1) {
|
|
122
|
+
if (/\s/u.test(text[index]))
|
|
123
|
+
return index;
|
|
124
|
+
}
|
|
125
|
+
return -1;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* @param {string} text
|
|
129
|
+
* @returns {number}
|
|
130
|
+
*/
|
|
131
|
+
function firstWhitespaceIndex(text) {
|
|
132
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
133
|
+
if (/\s/u.test(text[index]))
|
|
134
|
+
return index;
|
|
135
|
+
}
|
|
136
|
+
return -1;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* @param {string} token
|
|
140
|
+
* @returns {string|null}
|
|
141
|
+
*/
|
|
142
|
+
function secretAssignmentPrefix(token) {
|
|
143
|
+
return token.match(/^(?:token|password|secret|key|cookie|authorization)[A-Z0-9_\-]*\s*=\s*/iu)?.[0] ?? null;
|
|
144
|
+
}
|
|
39
145
|
//# sourceMappingURL=redaction.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/core/redaction.js"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,oDAAoD,CAAA;AAC/E,MAAM,yBAAyB,GAAG,oFAAoF,CAAA;AACtH,MAAM,sBAAsB,GAAG,2BAA2B,CAAA;AAE1D;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG;IAC7B,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,EAAE,KAAK;IACpC,IAAI,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAA;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,GAAG,EAAE;IAChC,qCAAqC;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACvF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAI;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAA;AACzH,CAAC"}
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/core/redaction.js"],"names":[],"mappings":"AAAA,YAAY;AAEZ,MAAM,kBAAkB,GAAG,oDAAoD,CAAA;AAC/E,MAAM,yBAAyB,GAAG,oFAAoF,CAAA;AACtH,MAAM,sBAAsB,GAAG,2BAA2B,CAAA;AAE1D;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG;IAC7B,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAG,EAAE,KAAK;IACpC,IAAI,WAAW,CAAC,GAAG,CAAC;QAAE,OAAO,YAAY,CAAA;IACzC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAG,GAAG,EAAE;IAChC,qCAAqC;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACvF,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAI;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAA;AACzH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;OAEG;IACH,YAAY,EAAC,OAAO,GAAG,IAAI,EAAC,GAAG,EAAE;QAC/B,qBAAqB;QACrB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,qBAAqB;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,sBAAsB;QACtB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAA;IACpC,CAAC;IAED;;;;;OAKG;IACH,IAAI,CAAC,KAAK;QACR,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAA;YACnD,IAAI,eAAe,GAAG,CAAC;gBAAE,OAAO,EAAE,CAAA;YAClC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAA;YAClC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,CAAC,OAAO,IAAI,KAAK,CAAA;QACrB,IAAI,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACpC,MAAM,YAAY,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAA;YACjD,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;gBAC1C,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;gBACjB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAA;gBACjC,OAAO,OAAO,GAAG,YAAY,GAAG,YAAY,CAAA;YAC9C,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAA;YACrD,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAA;QACvE,CAAC;QACD,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO,EAAE,CAAA;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACtC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;QACjB,OAAO,UAAU,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,IAAI;IAC/B,KAAK,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACzD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IAC3C,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,IAAI;IAChC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IAC3C,CAAC;IACD,OAAO,CAAC,CAAC,CAAA;AACX,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,KAAK;IACnC,OAAO,KAAK,CAAC,KAAK,CAAC,0EAA0E,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC7G,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human reporter: Capistrano-style lifecycle lines and live command streaming.
|
|
3
|
+
*
|
|
4
|
+
* @returns {Reporter}
|
|
5
|
+
*/
|
|
6
|
+
export function humanReporter(): Reporter;
|
|
7
|
+
/**
|
|
8
|
+
* JSON/automation reporter: no lifecycle lines and no streamed command output,
|
|
9
|
+
* so the only thing a caller writes is the final JSON payload.
|
|
10
|
+
*
|
|
11
|
+
* @returns {Reporter}
|
|
12
|
+
*/
|
|
13
|
+
export function jsonReporter(): Reporter;
|
|
14
|
+
/**
|
|
15
|
+
* @file Explicit deploy output-mode reporter.
|
|
16
|
+
*
|
|
17
|
+
* A reporter is threaded through the deploy path so that command lifecycle
|
|
18
|
+
* progress and live command output are printed in human ("Capistrano") mode and
|
|
19
|
+
* fully suppressed in `--json` automation mode. It is passed explicitly instead
|
|
20
|
+
* of relying on any global output flag, so callers stay in control of their own
|
|
21
|
+
* stdout/stderr contract.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* @name Reporter
|
|
25
|
+
* @description Output-mode object controlling lifecycle and streamed output.
|
|
26
|
+
*/
|
|
27
|
+
export class Reporter {
|
|
28
|
+
/**
|
|
29
|
+
* @param {{lifecycle?: boolean, streamCommands?: boolean, out?: import('node:stream').Writable, err?: import('node:stream').Writable}} [opts]
|
|
30
|
+
*/
|
|
31
|
+
constructor({ lifecycle, streamCommands, out, err }?: {
|
|
32
|
+
lifecycle?: boolean;
|
|
33
|
+
streamCommands?: boolean;
|
|
34
|
+
out?: import("node:stream").Writable;
|
|
35
|
+
err?: import("node:stream").Writable;
|
|
36
|
+
});
|
|
37
|
+
/** @type {boolean} */
|
|
38
|
+
lifecycleEnabled: boolean;
|
|
39
|
+
/** @type {boolean} */
|
|
40
|
+
streamCommands: boolean;
|
|
41
|
+
/** @type {import('node:stream').Writable} */
|
|
42
|
+
out: import("node:stream").Writable;
|
|
43
|
+
/** @type {import('node:stream').Writable} */
|
|
44
|
+
err: import("node:stream").Writable;
|
|
45
|
+
/**
|
|
46
|
+
* Whether live command stdout/stderr should be streamed as it arrives.
|
|
47
|
+
*
|
|
48
|
+
* @returns {boolean}
|
|
49
|
+
*/
|
|
50
|
+
get streamsCommands(): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Prints a Capistrano-style lifecycle line in human mode; no-op otherwise.
|
|
53
|
+
*
|
|
54
|
+
* @param {string} message
|
|
55
|
+
* @returns {void}
|
|
56
|
+
*/
|
|
57
|
+
line(message: string): void;
|
|
58
|
+
/**
|
|
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.
|
|
62
|
+
*
|
|
63
|
+
* @param {string} text
|
|
64
|
+
* @returns {boolean}
|
|
65
|
+
*/
|
|
66
|
+
writeCommandOutput(text: string): boolean;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=reporter.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
/**
|
|
3
|
+
* @file Explicit deploy output-mode reporter.
|
|
4
|
+
*
|
|
5
|
+
* A reporter is threaded through the deploy path so that command lifecycle
|
|
6
|
+
* progress and live command output are printed in human ("Capistrano") mode and
|
|
7
|
+
* fully suppressed in `--json` automation mode. It is passed explicitly instead
|
|
8
|
+
* of relying on any global output flag, so callers stay in control of their own
|
|
9
|
+
* stdout/stderr contract.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @name Reporter
|
|
13
|
+
* @description Output-mode object controlling lifecycle and streamed output.
|
|
14
|
+
*/
|
|
15
|
+
export class Reporter {
|
|
16
|
+
/**
|
|
17
|
+
* @param {{lifecycle?: boolean, streamCommands?: boolean, out?: import('node:stream').Writable, err?: import('node:stream').Writable}} [opts]
|
|
18
|
+
*/
|
|
19
|
+
constructor({ lifecycle = true, streamCommands = true, out = process.stdout, err = process.stderr } = {}) {
|
|
20
|
+
/** @type {boolean} */
|
|
21
|
+
this.lifecycleEnabled = lifecycle;
|
|
22
|
+
/** @type {boolean} */
|
|
23
|
+
this.streamCommands = streamCommands;
|
|
24
|
+
/** @type {import('node:stream').Writable} */
|
|
25
|
+
this.out = out;
|
|
26
|
+
/** @type {import('node:stream').Writable} */
|
|
27
|
+
this.err = err;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Whether live command stdout/stderr should be streamed as it arrives.
|
|
31
|
+
*
|
|
32
|
+
* @returns {boolean}
|
|
33
|
+
*/
|
|
34
|
+
get streamsCommands() {
|
|
35
|
+
return this.streamCommands;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Prints a Capistrano-style lifecycle line in human mode; no-op otherwise.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} message
|
|
41
|
+
* @returns {void}
|
|
42
|
+
*/
|
|
43
|
+
line(message) {
|
|
44
|
+
if (this.lifecycleEnabled)
|
|
45
|
+
this.out.write(`${message}\n`);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
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.
|
|
51
|
+
*
|
|
52
|
+
* @param {string} text
|
|
53
|
+
* @returns {boolean}
|
|
54
|
+
*/
|
|
55
|
+
writeCommandOutput(text) {
|
|
56
|
+
return this.err.write(text);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Human reporter: Capistrano-style lifecycle lines and live command streaming.
|
|
61
|
+
*
|
|
62
|
+
* @returns {Reporter}
|
|
63
|
+
*/
|
|
64
|
+
export function humanReporter() {
|
|
65
|
+
return new Reporter({ lifecycle: true, streamCommands: true });
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* JSON/automation reporter: no lifecycle lines and no streamed command output,
|
|
69
|
+
* so the only thing a caller writes is the final JSON payload.
|
|
70
|
+
*
|
|
71
|
+
* @returns {Reporter}
|
|
72
|
+
*/
|
|
73
|
+
export function jsonReporter() {
|
|
74
|
+
return new Reporter({ lifecycle: false, streamCommands: false });
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=reporter.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -7,11 +7,12 @@ export function taskCommands(stage: import("#types").StageConfig): import("#type
|
|
|
7
7
|
* @param {import('#types').Transport} transport
|
|
8
8
|
* @param {import('#types').StageConfig} stage
|
|
9
9
|
* @param {string} releasePath
|
|
10
|
-
* @param {{previousReleasePath?: string|null}} [opts]
|
|
10
|
+
* @param {{previousReleasePath?: string|null, reporter?: Reporter}} [opts]
|
|
11
11
|
* @returns {Promise<import('#types').TaskResult[]>}
|
|
12
12
|
*/
|
|
13
|
-
export function runTasks(transport: import("#types").Transport, stage: import("#types").StageConfig, releasePath: string, { previousReleasePath }?: {
|
|
13
|
+
export function runTasks(transport: import("#types").Transport, stage: import("#types").StageConfig, releasePath: string, { previousReleasePath, reporter }?: {
|
|
14
14
|
previousReleasePath?: string | null;
|
|
15
|
+
reporter?: Reporter;
|
|
15
16
|
}): Promise<import("#types").TaskResult[]>;
|
|
16
17
|
/**
|
|
17
18
|
* @param {string} name
|
|
@@ -29,10 +30,12 @@ export function normalizeTask(name: string, entry: string | import("#types").Tas
|
|
|
29
30
|
* @param {import('#types').Transport} transport
|
|
30
31
|
* @param {import('#types').TaskEntry} task
|
|
31
32
|
* @param {string} cwd
|
|
32
|
-
* @param {{previousReleasePath?: string|null}} [opts]
|
|
33
|
+
* @param {{previousReleasePath?: string|null, reporter?: Reporter}} [opts]
|
|
33
34
|
* @returns {Promise<import('#types').TaskResult>}
|
|
34
35
|
*/
|
|
35
|
-
export function runTask(transport: import("#types").Transport, task: import("#types").TaskEntry, cwd: string, { previousReleasePath }?: {
|
|
36
|
+
export function runTask(transport: import("#types").Transport, task: import("#types").TaskEntry, cwd: string, { previousReleasePath, reporter }?: {
|
|
36
37
|
previousReleasePath?: string | null;
|
|
38
|
+
reporter?: Reporter;
|
|
37
39
|
}): Promise<import("#types").TaskResult>;
|
|
40
|
+
import { Reporter } from "./reporter.js";
|
|
38
41
|
//# 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":"
|
|
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,4 +1,6 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import { redactText } from "./redaction.js";
|
|
3
|
+
import { Reporter } from "./reporter.js";
|
|
2
4
|
import { pathsChanged } from "./path-change-gate.js";
|
|
3
5
|
/**
|
|
4
6
|
* @param {import('#types').StageConfig} stage
|
|
@@ -15,13 +17,13 @@ export function taskCommands(stage) {
|
|
|
15
17
|
* @param {import('#types').Transport} transport
|
|
16
18
|
* @param {import('#types').StageConfig} stage
|
|
17
19
|
* @param {string} releasePath
|
|
18
|
-
* @param {{previousReleasePath?: string|null}} [opts]
|
|
20
|
+
* @param {{previousReleasePath?: string|null, reporter?: Reporter}} [opts]
|
|
19
21
|
* @returns {Promise<import('#types').TaskResult[]>}
|
|
20
22
|
*/
|
|
21
|
-
export async function runTasks(transport, stage, releasePath, { previousReleasePath } = {}) {
|
|
23
|
+
export async function runTasks(transport, stage, releasePath, { previousReleasePath, reporter = new Reporter({ lifecycle: false }) } = {}) {
|
|
22
24
|
const results = [];
|
|
23
25
|
for (const task of taskCommands(stage)) {
|
|
24
|
-
results.push(await runTask(transport, task, releasePath, { previousReleasePath }));
|
|
26
|
+
results.push(await runTask(transport, task, releasePath, { previousReleasePath, reporter }));
|
|
25
27
|
}
|
|
26
28
|
return results;
|
|
27
29
|
}
|
|
@@ -56,17 +58,20 @@ export function normalizeTask(name, entry) {
|
|
|
56
58
|
* @param {import('#types').Transport} transport
|
|
57
59
|
* @param {import('#types').TaskEntry} task
|
|
58
60
|
* @param {string} cwd
|
|
59
|
-
* @param {{previousReleasePath?: string|null}} [opts]
|
|
61
|
+
* @param {{previousReleasePath?: string|null, reporter?: Reporter}} [opts]
|
|
60
62
|
* @returns {Promise<import('#types').TaskResult>}
|
|
61
63
|
*/
|
|
62
|
-
export async function runTask(transport, task, cwd, { previousReleasePath } = {}) {
|
|
64
|
+
export async function runTask(transport, task, cwd, { previousReleasePath, reporter = new Reporter({ lifecycle: false }) } = {}) {
|
|
63
65
|
if (task.onlyIfChanged && previousReleasePath) {
|
|
64
66
|
const changed = await pathsChanged(transport, previousReleasePath, cwd, task.onlyIfChanged);
|
|
65
|
-
if (!changed)
|
|
67
|
+
if (!changed) {
|
|
68
|
+
reporter.line(` * Skipping task ${task.name} (no paths changed)`);
|
|
66
69
|
return taskResult(task, task.optional === true, "skipped", undefined, "no paths changed");
|
|
70
|
+
}
|
|
67
71
|
}
|
|
68
72
|
const taskCwd = task.cwd ? `${cwd}/${task.cwd}` : cwd;
|
|
69
73
|
const optional = task.optional === true;
|
|
74
|
+
reporter.line(` * Running task ${task.name}: ${redactText(task.command)}`);
|
|
70
75
|
try {
|
|
71
76
|
await transport.run(task.command, { cwd: taskCwd, env: task.env ?? {} });
|
|
72
77
|
return taskResult(task, optional, "passed", undefined);
|
|
@@ -74,7 +79,7 @@ export async function runTask(transport, task, cwd, { previousReleasePath } = {}
|
|
|
74
79
|
catch (error) {
|
|
75
80
|
if (optional) {
|
|
76
81
|
const err = /** @type {Error} */ (error);
|
|
77
|
-
|
|
82
|
+
reporter.line(` * Optional task '${task.name}' failed: ${err.message}`);
|
|
78
83
|
return taskResult(task, optional, "failed", err);
|
|
79
84
|
}
|
|
80
85
|
const err = /** @type {Error} */ (error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../../src/core/task-runner.js"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAC,YAAY,EAAC,MAAM,uBAAuB,CAAA;AAElD;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAK;IAChC,MAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;IACrD,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,EAAC,mBAAmB,EAAC,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../../src/core/task-runner.js"],"names":[],"mappings":"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"}
|
|
@@ -133,5 +133,13 @@ export class RollbridgeRuntime {
|
|
|
133
133
|
releasePath: string;
|
|
134
134
|
force?: boolean;
|
|
135
135
|
}): Promise<import("#types").SpawnResult>;
|
|
136
|
+
/**
|
|
137
|
+
* @param {string} cwd
|
|
138
|
+
* @returns {{cwd: string, env?: Record<string, string>}}
|
|
139
|
+
*/
|
|
140
|
+
runOptions(cwd: string): {
|
|
141
|
+
cwd: string;
|
|
142
|
+
env?: Record<string, string>;
|
|
143
|
+
};
|
|
136
144
|
}
|
|
137
145
|
//# sourceMappingURL=rollbridge-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollbridge-runtime.d.ts","sourceRoot":"","sources":["../../../src/runtimes/rollbridge-runtime.js"],"names":[],"mappings":"AAEA;IACE,2BAA2B;IAC3B,aADW,YAAY,CACG;IAE1B;;OAEG;IACH,qBAFW,OAAO,CAAC,OAAO,QAAQ,EAAE,uBAAuB,CAAC,EAU3D;IAPC,uDAAuD;IACvD,QADW,OAAO,QAAQ,EAAE,uBAAuB,CAMlD;IAGH;;OAEG;IACH,QAFa,MAAM,EAAE,CAQpB;IAED;;;OAGG;IACH,oDAHW;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAC,GACxD,MAAM,CAalB;IAED;;OAEG;IACH,mBAFa,MAAM,CAIlB;IAED;;OAEG;IACH,iBAFa,MAAM,CAIlB;IAED;;OAEG;IACH,eAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,2BAHW;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC,GACf,MAAM,CAMlB;IAED;;OAEG;IACH,mBAFa,MAAM,CAIlB;IAED;;OAEG;IACH,kBAFa,MAAM,CAIlB;IAED;;OAEG;IACH,+BAFa,MAAM,CAUlB;IAED;;;;OAIG;IACH,8BAJW,MAAM,SACN,MAAM,EAAE,GACN,MAAM,CAQlB;IAED;;;;OAIG;IACH,kBAJW,OAAO,QAAQ,EAAE,SAAS,qDAC1B;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,GAC9E,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAqBrC;IAED;;;;OAIG;IACH,uBAJW,OAAO,QAAQ,EAAE,SAAS,mBAC1B;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GACnB,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAIjD;IAED;;;;OAIG;IACH,gCAJW,OAAO,QAAQ,EAAE,SAAS,gCAC1B;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAC,GACzC,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CASrC;IAED;;;OAGG;IACH,2BAHW,OAAO,QAAQ,EAAE,SAAS,GACxB,OAAO,CAAC,MAAM,GAAC,SAAS,CAAC,CAKrC;IAED;;;;OAIG;IACH,kCAJW,OAAO,QAAQ,EAAE,SAAS,mBAC1B;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GACnB,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED;;;;OAIG;IACH,oBAJW,OAAO,QAAQ,EAAE,SAAS,mBAC1B;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GACnB,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAIjD;IAED;;;;OAIG;IACH,kBAJW,OAAO,QAAQ,EAAE,SAAS,mBAC1B;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GACnB,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAIjD;IAED;;;;OAIG;IACH,gBAJW,OAAO,QAAQ,EAAE,SAAS,mBAC1B;QAAC,WAAW,EAAE,MAAM,CAAA;KAAC,GACnB,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAIjD;IAED;;;;OAIG;IACH,mBAJW,OAAO,QAAQ,EAAE,SAAS,0BAC1B;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAC,GACpC,OAAO,CAAC,OAAO,QAAQ,EAAE,WAAW,CAAC,CAIjD;CACF"}
|
|
1
|
+
{"version":3,"file":"rollbridge-runtime.d.ts","sourceRoot":"","sources":["../../../src/runtimes/rollbridge-runtime.js"],"names":[],"mappings":"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"}
|
|
@@ -123,7 +123,7 @@ export class RollbridgeRuntime {
|
|
|
123
123
|
}
|
|
124
124
|
const releaseVersion = await this.prepareVersionChange(transport, { releasePath, currentPath });
|
|
125
125
|
try {
|
|
126
|
-
await transport.run(this.deployCommand({ releasePath, releaseId, revision }),
|
|
126
|
+
await transport.run(this.deployCommand({ releasePath, releaseId, revision }), this.runOptions(releasePath));
|
|
127
127
|
}
|
|
128
128
|
catch (error) {
|
|
129
129
|
throw new Error(`Rollbridge deploy failed: ${ /** @type {Error} */(error).message}`);
|
|
@@ -154,7 +154,7 @@ export class RollbridgeRuntime {
|
|
|
154
154
|
async prepareVersionChange(transport, { releasePath, currentPath }) {
|
|
155
155
|
if (!this.config.versionPath)
|
|
156
156
|
return undefined;
|
|
157
|
-
const releaseVersion = (await transport.run(this.versionCommand(),
|
|
157
|
+
const releaseVersion = (await transport.run(this.versionCommand(), this.runOptions(releasePath))).output.trim();
|
|
158
158
|
if (!releaseVersion)
|
|
159
159
|
return undefined;
|
|
160
160
|
const deployedVersion = await this.deployedVersion(transport);
|
|
@@ -183,7 +183,7 @@ export class RollbridgeRuntime {
|
|
|
183
183
|
catch {
|
|
184
184
|
return;
|
|
185
185
|
}
|
|
186
|
-
await transport.run(this.shutdownCommand(),
|
|
186
|
+
await transport.run(this.shutdownCommand(), this.runOptions(currentPath));
|
|
187
187
|
const terminateCommand = this.terminateStuckDaemonCommand();
|
|
188
188
|
if (terminateCommand)
|
|
189
189
|
await transport.run(terminateCommand, { cwd: currentPath });
|
|
@@ -194,7 +194,7 @@ export class RollbridgeRuntime {
|
|
|
194
194
|
* @returns {Promise<import('#types').SpawnResult>}
|
|
195
195
|
*/
|
|
196
196
|
async validate(transport, { releasePath }) {
|
|
197
|
-
return await transport.run(this.validateCommand(),
|
|
197
|
+
return await transport.run(this.validateCommand(), this.runOptions(releasePath));
|
|
198
198
|
}
|
|
199
199
|
/**
|
|
200
200
|
* @param {import('#types').Transport} transport
|
|
@@ -202,7 +202,7 @@ export class RollbridgeRuntime {
|
|
|
202
202
|
* @returns {Promise<import('#types').SpawnResult>}
|
|
203
203
|
*/
|
|
204
204
|
async status(transport, { releasePath }) {
|
|
205
|
-
return await transport.run(this.statusCommand(),
|
|
205
|
+
return await transport.run(this.statusCommand(), this.runOptions(releasePath));
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
208
208
|
* @param {import('#types').Transport} transport
|
|
@@ -210,7 +210,7 @@ export class RollbridgeRuntime {
|
|
|
210
210
|
* @returns {Promise<import('#types').SpawnResult>}
|
|
211
211
|
*/
|
|
212
212
|
async logs(transport, { releasePath }) {
|
|
213
|
-
return await transport.run(this.logsCommand(),
|
|
213
|
+
return await transport.run(this.logsCommand(), this.runOptions(releasePath));
|
|
214
214
|
}
|
|
215
215
|
/**
|
|
216
216
|
* @param {import('#types').Transport} transport
|
|
@@ -218,7 +218,14 @@ export class RollbridgeRuntime {
|
|
|
218
218
|
* @returns {Promise<import('#types').SpawnResult>}
|
|
219
219
|
*/
|
|
220
220
|
async recover(transport, { releasePath, force = true }) {
|
|
221
|
-
return await transport.run(this.recoverCommand({ force }),
|
|
221
|
+
return await transport.run(this.recoverCommand({ force }), this.runOptions(releasePath));
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* @param {string} cwd
|
|
225
|
+
* @returns {{cwd: string, env?: Record<string, string>}}
|
|
226
|
+
*/
|
|
227
|
+
runOptions(cwd) {
|
|
228
|
+
return this.config.env ? { cwd, env: this.config.env } : { cwd };
|
|
222
229
|
}
|
|
223
230
|
}
|
|
224
231
|
//# sourceMappingURL=rollbridge-runtime.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollbridge-runtime.js","sourceRoot":"","sources":["../../../src/runtimes/rollbridge-runtime.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rollbridge-runtime.js","sourceRoot":"","sources":["../../../src/runtimes/rollbridge-runtime.js"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
export class LocalTransport {
|
|
2
|
+
/**
|
|
3
|
+
* @param {{reporter?: import('../core/reporter.js').Reporter}} [opts]
|
|
4
|
+
*/
|
|
5
|
+
constructor({ reporter }?: {
|
|
6
|
+
reporter?: import("../core/reporter.js").Reporter;
|
|
7
|
+
});
|
|
8
|
+
/** @type {import('../core/reporter.js').Reporter} */
|
|
9
|
+
reporter: import("../core/reporter.js").Reporter;
|
|
2
10
|
/**
|
|
3
11
|
* @param {string} targetPath
|
|
4
12
|
* @returns {Promise<void>}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-transport.d.ts","sourceRoot":"","sources":["../../../src/transports/local-transport.js"],"names":[],"mappings":"
|
|
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,8 +1,17 @@
|
|
|
1
|
+
// @ts-check
|
|
1
2
|
import fs from "node:fs/promises";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import { spawn } from "node:child_process";
|
|
4
|
-
import { redactText } from "../core/redaction.js";
|
|
5
|
+
import { redactText, StreamingRedactor } from "../core/redaction.js";
|
|
6
|
+
import { Reporter } from "../core/reporter.js";
|
|
5
7
|
export class LocalTransport {
|
|
8
|
+
/**
|
|
9
|
+
* @param {{reporter?: import('../core/reporter.js').Reporter}} [opts]
|
|
10
|
+
*/
|
|
11
|
+
constructor({ reporter = new Reporter() } = {}) {
|
|
12
|
+
/** @type {import('../core/reporter.js').Reporter} */
|
|
13
|
+
this.reporter = reporter;
|
|
14
|
+
}
|
|
6
15
|
/**
|
|
7
16
|
* @param {string} targetPath
|
|
8
17
|
* @returns {Promise<void>}
|
|
@@ -102,13 +111,38 @@ export class LocalTransport {
|
|
|
102
111
|
* @returns {Promise<import('#types').SpawnResult>}
|
|
103
112
|
*/
|
|
104
113
|
async run(command, { cwd, env = {} } = {}) {
|
|
114
|
+
const shouldStream = this.reporter.streamsCommands;
|
|
105
115
|
return await new Promise((resolve, reject) => {
|
|
106
116
|
const child = spawn(command, { cwd, env: { ...process.env, ...env }, shell: true });
|
|
107
117
|
let output = "";
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
118
|
+
const redactor = new StreamingRedactor();
|
|
119
|
+
const emit = /** @param {Buffer|string} chunk */ /** @param {Buffer|string} chunk */ chunk => {
|
|
120
|
+
const text = chunk.toString();
|
|
121
|
+
output += text;
|
|
122
|
+
if (!shouldStream)
|
|
123
|
+
return;
|
|
124
|
+
const safe = redactor.push(text);
|
|
125
|
+
if (safe && !this.reporter.writeCommandOutput(safe)) {
|
|
126
|
+
child.stdout.pause();
|
|
127
|
+
child.stderr.pause();
|
|
128
|
+
this.reporter.err.once("drain", () => {
|
|
129
|
+
child.stdout.resume();
|
|
130
|
+
child.stderr.resume();
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
const flush = () => {
|
|
135
|
+
if (!shouldStream)
|
|
136
|
+
return;
|
|
137
|
+
const rest = redactor.flush();
|
|
138
|
+
if (rest)
|
|
139
|
+
this.reporter.writeCommandOutput(rest);
|
|
140
|
+
};
|
|
141
|
+
child.stdout.on("data", emit);
|
|
142
|
+
child.stderr.on("data", emit);
|
|
143
|
+
child.on("error", /** @param {Error} error */ /** @param {Error} error */ error => { flush(); reject(error); });
|
|
111
144
|
child.on("close", /** @param {number|null} code */ /** @param {number|null} code */ code => {
|
|
145
|
+
flush();
|
|
112
146
|
if (code === 0)
|
|
113
147
|
resolve({ code, output: redactText(output) });
|
|
114
148
|
else
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-transport.js","sourceRoot":"","sources":["../../../src/transports/local-transport.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAA;AACjC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"local-transport.js","sourceRoot":"","sources":["../../../src/transports/local-transport.js"],"names":[],"mappings":"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"}
|