@ticatec/omniflow-core 0.1.1 → 0.2.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.
- package/LICENSE +21 -0
- package/README.md +112 -54
- package/README_CN.md +113 -55
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/plugin/PluginContext.d.ts +39 -0
- package/dist/plugin/PluginContext.d.ts.map +1 -0
- package/dist/plugin/PluginContext.js +8 -0
- package/dist/plugin/PluginContext.js.map +1 -0
- package/dist/primitives/docker.d.ts.map +1 -1
- package/dist/primitives/docker.js +9 -0
- package/dist/primitives/docker.js.map +1 -1
- package/dist/primitives/git.d.ts +58 -16
- package/dist/primitives/git.d.ts.map +1 -1
- package/dist/primitives/git.js +91 -33
- package/dist/primitives/git.js.map +1 -1
- package/dist/primitives/shell.d.ts +4 -0
- package/dist/primitives/shell.d.ts.map +1 -1
- package/dist/primitives/shell.js +20 -60
- package/dist/primitives/shell.js.map +1 -1
- package/dist/primitives/ssh.d.ts +8 -5
- package/dist/primitives/ssh.d.ts.map +1 -1
- package/dist/primitives/ssh.js +49 -14
- package/dist/primitives/ssh.js.map +1 -1
- package/dist/primitives/subprocess.d.ts +52 -0
- package/dist/primitives/subprocess.d.ts.map +1 -0
- package/dist/primitives/subprocess.js +353 -0
- package/dist/primitives/subprocess.js.map +1 -0
- package/dist/toolchain/providers/GradleToolchain.d.ts +1 -1
- package/dist/toolchain/providers/GradleToolchain.d.ts.map +1 -1
- package/dist/toolchain/providers/GradleToolchain.js +4 -3
- package/dist/toolchain/providers/GradleToolchain.js.map +1 -1
- package/dist/toolchain/providers/MavenToolchain.d.ts +1 -1
- package/dist/toolchain/providers/MavenToolchain.d.ts.map +1 -1
- package/dist/toolchain/providers/MavenToolchain.js +3 -3
- package/dist/toolchain/providers/MavenToolchain.js.map +1 -1
- package/dist/toolchain/providers/NodeToolchain.d.ts +1 -1
- package/dist/toolchain/providers/NodeToolchain.d.ts.map +1 -1
- package/dist/toolchain/providers/NodeToolchain.js +61 -0
- package/dist/toolchain/providers/NodeToolchain.js.map +1 -1
- package/dist/toolchain/providers/pom.d.ts.map +1 -1
- package/dist/toolchain/providers/pom.js +13 -0
- package/dist/toolchain/providers/pom.js.map +1 -1
- package/dist/toolchain/registry.d.ts +11 -3
- package/dist/toolchain/registry.d.ts.map +1 -1
- package/dist/toolchain/registry.js +33 -8
- package/dist/toolchain/registry.js.map +1 -1
- package/dist/utils/mask.d.ts.map +1 -1
- package/dist/utils/mask.js +30 -5
- package/dist/utils/mask.js.map +1 -1
- package/docs/toolchain-extension.md +301 -0
- package/docs/toolchain-extension_CN.md +304 -0
- package/package.json +23 -1
- package/src/context/index.ts +74 -0
- package/src/context/storage.ts +8 -0
- package/src/context/types.ts +69 -0
- package/src/index.ts +97 -0
- package/src/plugin/PluginContext.ts +57 -0
- package/src/primitives/docker.ts +164 -0
- package/src/primitives/git.ts +172 -0
- package/src/primitives/index.ts +4 -0
- package/src/primitives/shell.ts +157 -0
- package/src/primitives/ssh.ts +249 -0
- package/src/primitives/subprocess.ts +389 -0
- package/src/toolchain/index.ts +6 -0
- package/src/toolchain/providers/GradleToolchain.ts +137 -0
- package/src/toolchain/providers/MavenToolchain.ts +64 -0
- package/src/toolchain/providers/NodeToolchain.ts +172 -0
- package/src/toolchain/providers/pom.ts +145 -0
- package/src/toolchain/registry.ts +161 -0
- package/src/toolchain/types.ts +40 -0
- package/src/utils/mask.ts +73 -0
- package/src/utils/template.ts +62 -0
package/dist/primitives/ssh.d.ts
CHANGED
|
@@ -2,9 +2,11 @@ export interface SshServerConfig {
|
|
|
2
2
|
host?: string;
|
|
3
3
|
server?: string;
|
|
4
4
|
user: string;
|
|
5
|
-
|
|
5
|
+
privateKeyFile?: string;
|
|
6
|
+
privateKey?: string;
|
|
6
7
|
port?: number;
|
|
7
8
|
tty?: boolean;
|
|
9
|
+
connectTimeout?: number;
|
|
8
10
|
}
|
|
9
11
|
export interface SshAuthConfig {
|
|
10
12
|
user: string;
|
|
@@ -22,10 +24,8 @@ export interface SshResult {
|
|
|
22
24
|
stdout: string;
|
|
23
25
|
stderr: string;
|
|
24
26
|
exitCode: number;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
keyFile?: string;
|
|
28
|
-
remoteDir?: string;
|
|
27
|
+
failed?: boolean;
|
|
28
|
+
signal?: string;
|
|
29
29
|
}
|
|
30
30
|
export declare class SshClient {
|
|
31
31
|
private readonly configMap;
|
|
@@ -37,5 +37,8 @@ export declare const ssh: {
|
|
|
37
37
|
exec: (target: SshTarget, command: string, remoteDir?: string) => Promise<SshResult>;
|
|
38
38
|
cp: (target: SshTarget, srcFile: string, targetFolder: string) => Promise<void>;
|
|
39
39
|
createClient: (configMap: Record<string, SshServerConfig>) => SshClient;
|
|
40
|
+
configure: (nameOrMap: string | Record<string, SshServerConfig>, config?: SshServerConfig) => void;
|
|
41
|
+
/** Reset/clear all configured SSH targets on the singleton instance */
|
|
42
|
+
reset: () => void;
|
|
40
43
|
};
|
|
41
44
|
//# sourceMappingURL=ssh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssh.d.ts","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAEpD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAmED,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;gBAE/C,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAM;IAIrD,IAAI,CACR,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,SAAS,CAAC;IAoDf,EAAE,CACN,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;CAyCjB;AAMD,eAAO,MAAM,GAAG;mBACC,SAAS,WAAW,MAAM,cAAc,MAAM;iBAEhD,SAAS,WAAW,MAAM,gBAAgB,MAAM;8BAEnC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;2BAG5C,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,WAC1C,eAAe;IAQ1B,uEAAuE;;CAMxE,CAAA"}
|
package/dist/primitives/ssh.js
CHANGED
|
@@ -3,6 +3,8 @@ import * as path from 'node:path';
|
|
|
3
3
|
import { tmpdir } from 'node:os';
|
|
4
4
|
import { execa } from 'execa';
|
|
5
5
|
import { tryGetContext } from '../context/index.js';
|
|
6
|
+
import { maskString } from '../utils/mask.js';
|
|
7
|
+
import { getSecretValues, resolveEnv, runSubprocess } from './subprocess.js';
|
|
6
8
|
function resolveTarget(target, configMap = {}) {
|
|
7
9
|
if (typeof target !== 'string') {
|
|
8
10
|
if (!target.host || !target.user) {
|
|
@@ -23,8 +25,10 @@ function resolveTarget(target, configMap = {}) {
|
|
|
23
25
|
return {
|
|
24
26
|
host,
|
|
25
27
|
user: config.user,
|
|
26
|
-
privateKeyFile: config.
|
|
28
|
+
privateKeyFile: config.privateKeyFile,
|
|
29
|
+
privateKey: config.privateKey,
|
|
27
30
|
port: config.port,
|
|
31
|
+
connectTimeout: config.connectTimeout,
|
|
28
32
|
tty: config.tty
|
|
29
33
|
};
|
|
30
34
|
}
|
|
@@ -59,9 +63,11 @@ export class SshClient {
|
|
|
59
63
|
async exec(target, remoteCommand, remoteDir) {
|
|
60
64
|
const ctx = tryGetContext();
|
|
61
65
|
const config = resolveTarget(target, this.configMap);
|
|
66
|
+
const secrets = getSecretValues();
|
|
67
|
+
const maskedCmd = maskString(remoteCommand, secrets);
|
|
62
68
|
if (ctx?.dryRun) {
|
|
63
|
-
ctx.logger.info(`[DRY-RUN] SSH to ${config.user}@${config.host}: ${
|
|
64
|
-
return { stdout: '
|
|
69
|
+
ctx.logger.info(`[DRY-RUN] SSH to ${config.user}@${config.host}: ${maskedCmd} (remoteDir: ${remoteDir ?? '~'})`);
|
|
70
|
+
return { stdout: '', stderr: '', exitCode: 0, failed: false };
|
|
65
71
|
}
|
|
66
72
|
let tempKeyFile;
|
|
67
73
|
try {
|
|
@@ -78,13 +84,17 @@ export class SshClient {
|
|
|
78
84
|
? `cd ${shellQuote(remoteDir)} || exit 1\n${remoteCommand}`
|
|
79
85
|
: remoteCommand;
|
|
80
86
|
args.push(script);
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
87
|
+
const displayCmd = `SSH (${config.user}@${config.host}) $ ${maskedCmd}`;
|
|
88
|
+
ctx?.logger?.info?.(displayCmd);
|
|
89
|
+
const subprocess = execa('ssh', args, { reject: true, env: resolveEnv() });
|
|
90
|
+
return await runSubprocess({
|
|
91
|
+
subprocess,
|
|
92
|
+
displayCmd,
|
|
93
|
+
cmdText: maskedCmd,
|
|
94
|
+
errorPrefix: 'SSH command',
|
|
95
|
+
reject: true,
|
|
96
|
+
secrets
|
|
97
|
+
});
|
|
88
98
|
}
|
|
89
99
|
finally {
|
|
90
100
|
if (tempKeyFile) {
|
|
@@ -95,6 +105,7 @@ export class SshClient {
|
|
|
95
105
|
async cp(target, srcFile, targetFolder) {
|
|
96
106
|
const ctx = tryGetContext();
|
|
97
107
|
const config = resolveTarget(target, this.configMap);
|
|
108
|
+
const secrets = getSecretValues();
|
|
98
109
|
if (ctx?.dryRun) {
|
|
99
110
|
ctx.logger.info(`[DRY-RUN] SCP: Copy ${srcFile} -> ${config.user}@${config.host}:${targetFolder}`);
|
|
100
111
|
return;
|
|
@@ -108,8 +119,17 @@ export class SshClient {
|
|
|
108
119
|
const args = connectionArgs(config, keyFile, '-P');
|
|
109
120
|
args.push(srcFile);
|
|
110
121
|
args.push(`${config.user}@${config.host}:${targetFolder}`);
|
|
111
|
-
|
|
112
|
-
|
|
122
|
+
const displayCmd = `SCP ${srcFile} -> ${config.user}@${config.host}:${targetFolder}`;
|
|
123
|
+
ctx?.logger?.info?.(displayCmd);
|
|
124
|
+
const subprocess = execa('scp', args, { reject: true, env: resolveEnv() });
|
|
125
|
+
await runSubprocess({
|
|
126
|
+
subprocess,
|
|
127
|
+
displayCmd,
|
|
128
|
+
cmdText: displayCmd,
|
|
129
|
+
errorPrefix: 'SCP',
|
|
130
|
+
reject: true,
|
|
131
|
+
secrets
|
|
132
|
+
});
|
|
113
133
|
}
|
|
114
134
|
finally {
|
|
115
135
|
if (tempKeyFile) {
|
|
@@ -119,10 +139,25 @@ export class SshClient {
|
|
|
119
139
|
}
|
|
120
140
|
}
|
|
121
141
|
/** Default singleton instance helper */
|
|
122
|
-
const
|
|
142
|
+
const defaultClientConfigMap = {};
|
|
143
|
+
const defaultClient = new SshClient(defaultClientConfigMap);
|
|
123
144
|
export const ssh = {
|
|
124
145
|
exec: (target, command, remoteDir) => defaultClient.exec(target, command, remoteDir),
|
|
125
146
|
cp: (target, srcFile, targetFolder) => defaultClient.cp(target, srcFile, targetFolder),
|
|
126
|
-
createClient: (configMap) => new SshClient(configMap)
|
|
147
|
+
createClient: (configMap) => new SshClient(configMap),
|
|
148
|
+
configure: (nameOrMap, config) => {
|
|
149
|
+
if (typeof nameOrMap === 'string' && config) {
|
|
150
|
+
defaultClientConfigMap[nameOrMap] = config;
|
|
151
|
+
}
|
|
152
|
+
else if (typeof nameOrMap === 'object' && nameOrMap !== null) {
|
|
153
|
+
Object.assign(defaultClientConfigMap, nameOrMap);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
/** Reset/clear all configured SSH targets on the singleton instance */
|
|
157
|
+
reset: () => {
|
|
158
|
+
for (const key of Object.keys(defaultClientConfigMap)) {
|
|
159
|
+
delete defaultClientConfigMap[key];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
127
162
|
};
|
|
128
163
|
//# sourceMappingURL=ssh.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"ssh.js","sourceRoot":"","sources":["../../src/primitives/ssh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { Transform } from 'node:stream';
|
|
3
|
+
import type { execa } from 'execa';
|
|
4
|
+
export interface SubprocessResult {
|
|
5
|
+
stdout: string;
|
|
6
|
+
stderr: string;
|
|
7
|
+
exitCode: number;
|
|
8
|
+
failed: boolean;
|
|
9
|
+
signal?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SubprocessRunOptions {
|
|
12
|
+
subprocess: ReturnType<typeof execa>;
|
|
13
|
+
displayCmd: string;
|
|
14
|
+
cmdText?: string;
|
|
15
|
+
errorPrefix?: string;
|
|
16
|
+
reject?: boolean;
|
|
17
|
+
secrets?: string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve process.env merged with context.env and any explicit overrides.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveEnv(explicitEnv?: Record<string, string>): Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* Extract active secret values from execution context.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getSecretValues(): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Create a stateful Transform stream that masks secrets across chunk boundaries.
|
|
29
|
+
* Retains up to maxSecretLen - 1 bytes in tail buffer to prevent boundary leaks.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createMaskTransform(secrets: string[]): Transform;
|
|
32
|
+
/**
|
|
33
|
+
* Prefix every line in the stream with a tag (e.g. PID).
|
|
34
|
+
*/
|
|
35
|
+
export declare function createLinePrefixTransform(prefix: string): Transform;
|
|
36
|
+
/**
|
|
37
|
+
* Open appendable write stream to the log file, auto-creating directories.
|
|
38
|
+
*/
|
|
39
|
+
export declare function openLogStream(logFile: string, logger?: {
|
|
40
|
+
warn?: (msg: string) => void;
|
|
41
|
+
}): fs.WriteStream | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Mask all known string and stdio properties on an ExecaError.
|
|
44
|
+
*/
|
|
45
|
+
export declare function maskExecaError(thrownError: any, secrets: string[]): any;
|
|
46
|
+
export declare function resetCmdCounter(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Unified subprocess runner: pipes stdout/stderr to logFile with PID prefix and masking,
|
|
49
|
+
* manages stream flushing, exit code logging, failure log level downgrade, and ExecaError masking.
|
|
50
|
+
*/
|
|
51
|
+
export declare function runSubprocess(options: SubprocessRunOptions): Promise<SubprocessResult>;
|
|
52
|
+
//# sourceMappingURL=subprocess.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess.d.ts","sourceRoot":"","sources":["../../src/primitives/subprocess.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAIlC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAA;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUvF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAU1C;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAS,CA6ChE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CA0BnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,GAAG,EAAE,CAAC,WAAW,GAAG,SAAS,CAmBpH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAG,CAsBvE;AAID,wBAAgB,eAAe,IAAI,IAAI,CAEtC;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+L5F"}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import { Transform } from 'node:stream';
|
|
4
|
+
import { tryGetContext } from '../context/index.js';
|
|
5
|
+
import { isSecretKey, maskString } from '../utils/mask.js';
|
|
6
|
+
/**
|
|
7
|
+
* Resolve process.env merged with context.env and any explicit overrides.
|
|
8
|
+
*/
|
|
9
|
+
export function resolveEnv(explicitEnv) {
|
|
10
|
+
const ctx = tryGetContext();
|
|
11
|
+
const base = { ...process.env };
|
|
12
|
+
if (ctx?.env) {
|
|
13
|
+
Object.assign(base, ctx.env);
|
|
14
|
+
}
|
|
15
|
+
if (explicitEnv) {
|
|
16
|
+
Object.assign(base, explicitEnv);
|
|
17
|
+
}
|
|
18
|
+
return base;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Extract active secret values from execution context.
|
|
22
|
+
*/
|
|
23
|
+
export function getSecretValues() {
|
|
24
|
+
const ctx = tryGetContext();
|
|
25
|
+
if (!ctx?.env)
|
|
26
|
+
return [];
|
|
27
|
+
const secrets = [];
|
|
28
|
+
for (const [k, v] of Object.entries(ctx.env)) {
|
|
29
|
+
if (isSecretKey(k) && typeof v === 'string' && v.length >= 3) {
|
|
30
|
+
secrets.push(v);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return secrets;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Create a stateful Transform stream that masks secrets across chunk boundaries.
|
|
37
|
+
* Retains up to maxSecretLen - 1 bytes in tail buffer to prevent boundary leaks.
|
|
38
|
+
*/
|
|
39
|
+
export function createMaskTransform(secrets) {
|
|
40
|
+
const activeSecrets = secrets
|
|
41
|
+
.filter(s => typeof s === 'string' && s.length >= 3)
|
|
42
|
+
.flatMap(s => s.includes('\n') ? s.split(/\r?\n/).map(l => l.trim()).filter(l => l.length >= 3) : [s]);
|
|
43
|
+
if (activeSecrets.length === 0) {
|
|
44
|
+
return new Transform({
|
|
45
|
+
transform(chunk, _encoding, callback) {
|
|
46
|
+
callback(null, chunk);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
// Sort descending by length so longer matches are prioritized
|
|
51
|
+
activeSecrets.sort((a, b) => b.length - a.length);
|
|
52
|
+
const maxSecretLen = Math.max(...activeSecrets.map(s => s.length));
|
|
53
|
+
const keepLen = Math.max(0, maxSecretLen - 1);
|
|
54
|
+
let tail = '';
|
|
55
|
+
return new Transform({
|
|
56
|
+
transform(chunk, _encoding, callback) {
|
|
57
|
+
const text = tail + chunk.toString('utf8');
|
|
58
|
+
const masked = maskString(text, activeSecrets);
|
|
59
|
+
if (masked.length > keepLen) {
|
|
60
|
+
const emitLen = masked.length - keepLen;
|
|
61
|
+
const toEmit = masked.slice(0, emitLen);
|
|
62
|
+
tail = masked.slice(emitLen);
|
|
63
|
+
callback(null, Buffer.from(toEmit, 'utf8'));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
tail = masked;
|
|
67
|
+
callback();
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
flush(callback) {
|
|
71
|
+
if (tail.length > 0) {
|
|
72
|
+
const finalMasked = maskString(tail, activeSecrets);
|
|
73
|
+
tail = '';
|
|
74
|
+
callback(null, Buffer.from(finalMasked, 'utf8'));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
callback();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Prefix every line in the stream with a tag (e.g. PID).
|
|
84
|
+
*/
|
|
85
|
+
export function createLinePrefixTransform(prefix) {
|
|
86
|
+
if (!prefix) {
|
|
87
|
+
return new Transform({
|
|
88
|
+
transform(chunk, _encoding, callback) {
|
|
89
|
+
callback(null, chunk);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
let remainder = '';
|
|
94
|
+
return new Transform({
|
|
95
|
+
transform(chunk, _encoding, callback) {
|
|
96
|
+
const text = remainder + chunk.toString('utf8');
|
|
97
|
+
const lines = text.split('\n');
|
|
98
|
+
remainder = lines.pop() ?? '';
|
|
99
|
+
const out = lines.map(l => `${prefix}${l}\n`).join('');
|
|
100
|
+
callback(null, Buffer.from(out, 'utf8'));
|
|
101
|
+
},
|
|
102
|
+
flush(callback) {
|
|
103
|
+
if (remainder.length > 0) {
|
|
104
|
+
callback(null, Buffer.from(`${prefix}${remainder}\n`, 'utf8'));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
callback();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Open appendable write stream to the log file, auto-creating directories.
|
|
114
|
+
*/
|
|
115
|
+
export function openLogStream(logFile, logger) {
|
|
116
|
+
try {
|
|
117
|
+
const logDir = path.dirname(logFile);
|
|
118
|
+
if (!fs.existsSync(logDir)) {
|
|
119
|
+
fs.mkdirSync(logDir, { recursive: true });
|
|
120
|
+
}
|
|
121
|
+
if (fs.existsSync(logFile) && fs.statSync(logFile).isDirectory()) {
|
|
122
|
+
logger?.warn?.(`Failed to open logFile ${logFile}: path is a directory`);
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
const logStream = fs.createWriteStream(logFile, { flags: 'a' });
|
|
126
|
+
logStream.on('error', (err) => {
|
|
127
|
+
logger?.warn?.(`Failed to write to logFile ${logFile}: ${err.message}`);
|
|
128
|
+
});
|
|
129
|
+
return logStream;
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
logger?.warn?.(`Failed to open logFile ${logFile}: ${err?.message}`);
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Mask all known string and stdio properties on an ExecaError.
|
|
138
|
+
*/
|
|
139
|
+
export function maskExecaError(thrownError, secrets) {
|
|
140
|
+
if (!thrownError)
|
|
141
|
+
return thrownError;
|
|
142
|
+
if (secrets.length > 0) {
|
|
143
|
+
const props = ['message', 'shortMessage', 'originalMessage', 'command', 'escapedCommand', 'stack', 'all'];
|
|
144
|
+
for (const prop of props) {
|
|
145
|
+
if (typeof thrownError[prop] === 'string') {
|
|
146
|
+
thrownError[prop] = maskString(thrownError[prop], secrets);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (Array.isArray(thrownError.stdio)) {
|
|
150
|
+
thrownError.stdio = thrownError.stdio.map((item) => {
|
|
151
|
+
if (typeof item === 'string') {
|
|
152
|
+
return maskString(item, secrets);
|
|
153
|
+
}
|
|
154
|
+
if (item && typeof item.toString === 'function' && Buffer.isBuffer(item)) {
|
|
155
|
+
return Buffer.from(maskString(item.toString('utf-8'), secrets));
|
|
156
|
+
}
|
|
157
|
+
return item;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return thrownError;
|
|
162
|
+
}
|
|
163
|
+
let cmdCounter = 0;
|
|
164
|
+
export function resetCmdCounter() {
|
|
165
|
+
cmdCounter = 0;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Unified subprocess runner: pipes stdout/stderr to logFile with PID prefix and masking,
|
|
169
|
+
* manages stream flushing, exit code logging, failure log level downgrade, and ExecaError masking.
|
|
170
|
+
*/
|
|
171
|
+
export async function runSubprocess(options) {
|
|
172
|
+
const { subprocess, displayCmd, reject = true } = options;
|
|
173
|
+
const ctx = tryGetContext();
|
|
174
|
+
const secrets = options.secrets ?? getSecretValues();
|
|
175
|
+
const pid = subprocess.pid;
|
|
176
|
+
const pidTag = pid ? `[PID ${pid}] ` : `[CMD ${++cmdCounter}] `;
|
|
177
|
+
const cmdText = options.cmdText ?? displayCmd;
|
|
178
|
+
const errorPrefix = options.errorPrefix ?? 'Command';
|
|
179
|
+
let logStream;
|
|
180
|
+
if (ctx?.logFile) {
|
|
181
|
+
logStream = openLogStream(ctx.logFile, ctx.logger);
|
|
182
|
+
}
|
|
183
|
+
if (logStream && !logStream.destroyed && logStream.writable) {
|
|
184
|
+
try {
|
|
185
|
+
logStream.write(`${pidTag}${displayCmd}\n`);
|
|
186
|
+
}
|
|
187
|
+
catch { }
|
|
188
|
+
}
|
|
189
|
+
let lineStdout;
|
|
190
|
+
let lineStderr;
|
|
191
|
+
const streamDone = [];
|
|
192
|
+
const unpipeAndDrain = () => {
|
|
193
|
+
if (lineStdout && logStream) {
|
|
194
|
+
try {
|
|
195
|
+
lineStdout.unpipe(logStream);
|
|
196
|
+
lineStdout.resume();
|
|
197
|
+
}
|
|
198
|
+
catch { }
|
|
199
|
+
}
|
|
200
|
+
if (lineStderr && logStream) {
|
|
201
|
+
try {
|
|
202
|
+
lineStderr.unpipe(logStream);
|
|
203
|
+
lineStderr.resume();
|
|
204
|
+
}
|
|
205
|
+
catch { }
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
if (logStream) {
|
|
209
|
+
logStream.on('error', unpipeAndDrain);
|
|
210
|
+
logStream.on('close', unpipeAndDrain);
|
|
211
|
+
}
|
|
212
|
+
if (subprocess.stdout && logStream) {
|
|
213
|
+
const maskStdout = createMaskTransform(secrets);
|
|
214
|
+
lineStdout = createLinePrefixTransform(pidTag);
|
|
215
|
+
maskStdout.pipe(lineStdout).pipe(logStream, { end: false });
|
|
216
|
+
subprocess.stdout.pipe(maskStdout);
|
|
217
|
+
streamDone.push(new Promise(resolve => {
|
|
218
|
+
let resolved = false;
|
|
219
|
+
const done = () => {
|
|
220
|
+
if (!resolved) {
|
|
221
|
+
resolved = true;
|
|
222
|
+
resolve();
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
lineStdout.once('end', done);
|
|
226
|
+
lineStdout.once('close', done);
|
|
227
|
+
lineStdout.once('error', done);
|
|
228
|
+
if (logStream) {
|
|
229
|
+
logStream.once('error', done);
|
|
230
|
+
logStream.once('close', done);
|
|
231
|
+
}
|
|
232
|
+
}));
|
|
233
|
+
}
|
|
234
|
+
if (subprocess.stderr && logStream) {
|
|
235
|
+
const maskStderr = createMaskTransform(secrets);
|
|
236
|
+
lineStderr = createLinePrefixTransform(pidTag);
|
|
237
|
+
maskStderr.pipe(lineStderr).pipe(logStream, { end: false });
|
|
238
|
+
subprocess.stderr.pipe(maskStderr);
|
|
239
|
+
streamDone.push(new Promise(resolve => {
|
|
240
|
+
let resolved = false;
|
|
241
|
+
const done = () => {
|
|
242
|
+
if (!resolved) {
|
|
243
|
+
resolved = true;
|
|
244
|
+
resolve();
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
lineStderr.once('end', done);
|
|
248
|
+
lineStderr.once('close', done);
|
|
249
|
+
lineStderr.once('error', done);
|
|
250
|
+
if (logStream) {
|
|
251
|
+
logStream.once('error', done);
|
|
252
|
+
logStream.once('close', done);
|
|
253
|
+
}
|
|
254
|
+
}));
|
|
255
|
+
}
|
|
256
|
+
let execResult;
|
|
257
|
+
let thrownError;
|
|
258
|
+
try {
|
|
259
|
+
execResult = await subprocess;
|
|
260
|
+
}
|
|
261
|
+
catch (err) {
|
|
262
|
+
thrownError = err;
|
|
263
|
+
execResult = err;
|
|
264
|
+
}
|
|
265
|
+
// Always wait for stream completion regardless of subprocess exit status, with timeout safety
|
|
266
|
+
if (streamDone.length > 0) {
|
|
267
|
+
let timeoutId;
|
|
268
|
+
const drainTimeout = new Promise(resolve => {
|
|
269
|
+
timeoutId = setTimeout(resolve, 3000);
|
|
270
|
+
timeoutId.unref?.();
|
|
271
|
+
});
|
|
272
|
+
await Promise.race([Promise.all(streamDone), drainTimeout]);
|
|
273
|
+
if (timeoutId) {
|
|
274
|
+
clearTimeout(timeoutId);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
const isFailed = Boolean(execResult.failed || (execResult.exitCode !== undefined && execResult.exitCode !== 0));
|
|
279
|
+
let exitCode = execResult.exitCode;
|
|
280
|
+
if (exitCode === undefined) {
|
|
281
|
+
exitCode = isFailed ? -1 : 0;
|
|
282
|
+
}
|
|
283
|
+
if (logStream && !logStream.destroyed && logStream.writable) {
|
|
284
|
+
try {
|
|
285
|
+
logStream.write(`${pidTag}[Process exited with code ${exitCode}]\n`);
|
|
286
|
+
}
|
|
287
|
+
catch { }
|
|
288
|
+
}
|
|
289
|
+
if (isFailed) {
|
|
290
|
+
if (reject === false) {
|
|
291
|
+
ctx?.logger?.debug?.(`${errorPrefix} exited with code ${exitCode} (reject: false): ${cmdText}`);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
ctx?.logger?.error?.(`${errorPrefix} failed with exit code ${exitCode}: ${cmdText}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const rawStdout = typeof execResult.stdout === 'string' ? execResult.stdout : (execResult.stdout ? String(execResult.stdout) : '');
|
|
298
|
+
const rawStderr = typeof execResult.stderr === 'string' ? execResult.stderr : (execResult.stderr ? String(execResult.stderr) : '');
|
|
299
|
+
const stdout = secrets.length > 0 ? maskString(rawStdout, secrets) : rawStdout;
|
|
300
|
+
const stderr = secrets.length > 0 ? maskString(rawStderr, secrets) : rawStderr;
|
|
301
|
+
if (thrownError) {
|
|
302
|
+
maskExecaError(thrownError, secrets);
|
|
303
|
+
thrownError.stdout = stdout;
|
|
304
|
+
thrownError.stderr = stderr;
|
|
305
|
+
thrownError.exitCode = exitCode;
|
|
306
|
+
thrownError.failed = true;
|
|
307
|
+
if (reject === false) {
|
|
308
|
+
return {
|
|
309
|
+
stdout,
|
|
310
|
+
stderr,
|
|
311
|
+
exitCode,
|
|
312
|
+
failed: true,
|
|
313
|
+
signal: execResult.signal
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
throw thrownError;
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
stdout,
|
|
320
|
+
stderr,
|
|
321
|
+
exitCode,
|
|
322
|
+
failed: isFailed,
|
|
323
|
+
signal: execResult.signal
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
if (logStream) {
|
|
328
|
+
await new Promise(resolve => {
|
|
329
|
+
if (logStream.destroyed || logStream.closed || !logStream.writable) {
|
|
330
|
+
resolve();
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
let settled = false;
|
|
334
|
+
let timer;
|
|
335
|
+
const done = () => {
|
|
336
|
+
if (!settled) {
|
|
337
|
+
settled = true;
|
|
338
|
+
if (timer) {
|
|
339
|
+
clearTimeout(timer);
|
|
340
|
+
}
|
|
341
|
+
resolve();
|
|
342
|
+
}
|
|
343
|
+
};
|
|
344
|
+
timer = setTimeout(done, 1000);
|
|
345
|
+
timer.unref?.();
|
|
346
|
+
logStream.once('error', done);
|
|
347
|
+
logStream.once('close', done);
|
|
348
|
+
logStream.end(done);
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=subprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subprocess.js","sourceRoot":"","sources":["../../src/primitives/subprocess.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ToolchainProvider, DetectionResult, ProjectInfo } from '../types.js';
|
|
2
2
|
export declare class GradleToolchain implements ToolchainProvider {
|
|
3
3
|
readonly name = "gradle";
|
|
4
|
-
readonly priority
|
|
4
|
+
readonly priority: number;
|
|
5
5
|
detect(projectDir: string): Promise<DetectionResult | null>;
|
|
6
6
|
projectInfo(projectDir: string): Promise<ProjectInfo>;
|
|
7
7
|
install(projectDir: string, _flags?: string[]): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GradleToolchain.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/GradleToolchain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA8BlF,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"GradleToolchain.d.ts","sourceRoot":"","sources":["../../../src/toolchain/providers/GradleToolchain.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA8BlF,qBAAa,eAAgB,YAAW,iBAAiB;IACvD,QAAQ,CAAC,IAAI,YAAW;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAK;IAExB,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAY3D,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqBrD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9D,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAKlE,UAAU;YAUV,aAAa;YAgBb,WAAW;YAgBX,UAAU;CAUzB"}
|