@journeyapps/cloudcode-build-agent 0.0.0-dev.6530336 → 0.0.0-dev.6fdb5b1
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/dist/builder.d.ts +0 -10
- package/dist/builder.js +66 -60
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +8 -2
- package/dist/cli.js.map +1 -1
- package/dist/defs.d.ts +2 -7
- package/dist/defs.js +1 -1
- package/dist/defs.js.map +1 -1
- package/dist/detect_tasks.d.ts +5 -6
- package/dist/detect_tasks.js.map +1 -1
- package/dist/errors.d.ts +8 -0
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/{installer.d.ts → utils.d.ts} +0 -5
- package/dist/{installer.js → utils.js} +27 -35
- package/dist/utils.js.map +1 -0
- package/package.json +2 -4
- package/src/builder.ts +68 -75
- package/src/cli.ts +8 -3
- package/src/defs.ts +2 -2
- package/src/detect_tasks.ts +1 -10
- package/src/errors.ts +22 -0
- package/src/index.ts +1 -0
- package/src/{installer.ts → utils.ts} +29 -33
- package/tsconfig.json +2 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/installer.js.map +0 -1
- package/dist/run.d.ts +0 -4
- package/dist/run.js +0 -19
- package/dist/run.js.map +0 -1
- package/dist/spawn-stream.d.ts +0 -15
- package/dist/spawn-stream.js +0 -59
- package/dist/spawn-stream.js.map +0 -1
- package/src/run.ts +0 -23
- package/src/spawn-stream.ts +0 -73
package/dist/installer.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|
package/dist/run.d.ts
DELETED
package/dist/run.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.runCommand = void 0;
|
|
4
|
-
const spawn_stream_1 = require("./spawn-stream");
|
|
5
|
-
async function* runCommand(command, args, options) {
|
|
6
|
-
const { childProcess, stream } = (0, spawn_stream_1.spawnStream)(command, args, { cwd: options?.cwd, splitLines: true, ...options });
|
|
7
|
-
let exitCode = null;
|
|
8
|
-
for await (let event of stream) {
|
|
9
|
-
yield event;
|
|
10
|
-
if (event.exitCode != null) {
|
|
11
|
-
exitCode = event.exitCode;
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
if (exitCode != 0) {
|
|
15
|
-
throw new Error(`Command failed with code ${exitCode}`);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.runCommand = runCommand;
|
|
19
|
-
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":";;;AAAA,iDAA+D;AAGxD,KAAK,SAAS,CAAC,CAAC,UAAU,CAC/B,OAAe,EACf,IAAc,EACd,OAA+B;IAE/B,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAW,EAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IAEjH,IAAI,QAAQ,GAAkB,IAAI,CAAC;IAEnC,IAAI,KAAK,EAAE,IAAI,KAAK,IAAI,MAAM,EAAE;QAC9B,MAAM,KAAK,CAAC;QACZ,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE;YAC1B,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;SAC3B;KACF;IAED,IAAI,QAAQ,IAAI,CAAC,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;KACzD;AACH,CAAC;AAnBD,gCAmBC"}
|
package/dist/spawn-stream.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { SpawnOptions } from 'child_process';
|
|
3
|
-
export interface StreamOptions {
|
|
4
|
-
splitLines?: boolean;
|
|
5
|
-
}
|
|
6
|
-
export declare function spawnStream(command: string, args: string[], options: SpawnOptions & StreamOptions): {
|
|
7
|
-
childProcess: import("child_process").ChildProcessWithoutNullStreams;
|
|
8
|
-
stream: AsyncIterable<SpawnStreamEvent>;
|
|
9
|
-
};
|
|
10
|
-
export interface SpawnStreamEvent {
|
|
11
|
-
event: 'stdout' | 'stderr' | 'exit';
|
|
12
|
-
stdout?: string;
|
|
13
|
-
stderr?: string;
|
|
14
|
-
exitCode?: number;
|
|
15
|
-
}
|
package/dist/spawn-stream.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.spawnStream = void 0;
|
|
4
|
-
const child_process_1 = require("child_process");
|
|
5
|
-
const stream_1 = require("stream");
|
|
6
|
-
function spawnStream(command, args, options) {
|
|
7
|
-
const process = (0, child_process_1.spawn)(command, args, {
|
|
8
|
-
...options,
|
|
9
|
-
stdio: 'pipe'
|
|
10
|
-
});
|
|
11
|
-
return {
|
|
12
|
-
childProcess: process,
|
|
13
|
-
stream: processToStream(process, options)
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
exports.spawnStream = spawnStream;
|
|
17
|
-
function processToStream(process, options) {
|
|
18
|
-
const combinedStream = new stream_1.PassThrough({ objectMode: true });
|
|
19
|
-
async function* transform(stream, key) {
|
|
20
|
-
stream.setEncoding('utf-8');
|
|
21
|
-
let iterable = stream;
|
|
22
|
-
if (options.splitLines) {
|
|
23
|
-
iterable = splitLines(iterable);
|
|
24
|
-
}
|
|
25
|
-
for await (const chunk of iterable) {
|
|
26
|
-
yield {
|
|
27
|
-
event: key,
|
|
28
|
-
[key]: chunk
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (process.stdout) {
|
|
33
|
-
stream_1.Readable.from(transform(process.stdout, 'stdout')).pipe(combinedStream, { end: false });
|
|
34
|
-
}
|
|
35
|
-
if (process.stderr) {
|
|
36
|
-
stream_1.Readable.from(transform(process.stderr, 'stderr')).pipe(combinedStream, { end: false });
|
|
37
|
-
}
|
|
38
|
-
process.on('exit', (code) => {
|
|
39
|
-
combinedStream.write({ exitCode: code }, () => {
|
|
40
|
-
combinedStream.end();
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
return combinedStream;
|
|
44
|
-
}
|
|
45
|
-
async function* splitLines(stream) {
|
|
46
|
-
let buffer = '';
|
|
47
|
-
for await (const chunk of stream) {
|
|
48
|
-
buffer += chunk;
|
|
49
|
-
const lines = buffer.split('\n');
|
|
50
|
-
buffer = lines.pop();
|
|
51
|
-
for (let line of lines) {
|
|
52
|
-
yield `${line}\n`;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (buffer) {
|
|
56
|
-
yield buffer;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=spawn-stream.js.map
|
package/dist/spawn-stream.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spawn-stream.js","sourceRoot":"","sources":["../src/spawn-stream.ts"],"names":[],"mappings":";;;AAAA,iDAAkE;AAClE,mCAA+C;AAM/C,SAAgB,WAAW,CAAC,OAAe,EAAE,IAAc,EAAE,OAAqC;IAChG,MAAM,OAAO,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,IAAI,EAAE;QACnC,GAAG,OAAO;QACV,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;IAEH,OAAO;QACL,YAAY,EAAE,OAAO;QACrB,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC;KAC1C,CAAC;AACJ,CAAC;AAVD,kCAUC;AASD,SAAS,eAAe,CAAC,OAAqB,EAAE,OAAsB;IACpE,MAAM,cAAc,GAAG,IAAI,oBAAW,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,SAAS,CAAC,CAAC,SAAS,CAAC,MAAgB,EAAE,GAAwB;QAClE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,QAAQ,GAA0B,MAAM,CAAC;QAC7C,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;SACjC;QACD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,QAAQ,EAAE;YAClC,MAAM;gBACJ,KAAK,EAAE,GAAG;gBACV,CAAC,GAAG,CAAC,EAAE,KAAK;aACb,CAAC;SACH;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,iBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;KACzF;IACD,IAAI,OAAO,CAAC,MAAM,EAAE;QAClB,iBAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;KACzF;IAED,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAmB,EAAE,EAAE;QACzC,cAAc,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;YAC5C,cAAc,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,KAAK,SAAS,CAAC,CAAC,UAAU,CAAC,MAA6B;IACtD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAG,CAAC;QACtB,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;YACtB,MAAM,GAAG,IAAI,IAAI,CAAC;SACnB;KACF;IACD,IAAI,MAAM,EAAE;QACV,MAAM,MAAM,CAAC;KACd;AACH,CAAC"}
|
package/src/run.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { spawnStream, SpawnStreamEvent } from './spawn-stream';
|
|
2
|
-
import { SpawnOptions } from 'child_process';
|
|
3
|
-
|
|
4
|
-
export async function* runCommand(
|
|
5
|
-
command: string,
|
|
6
|
-
args: string[],
|
|
7
|
-
options?: Partial<SpawnOptions>
|
|
8
|
-
): AsyncIterable<SpawnStreamEvent> {
|
|
9
|
-
const { childProcess, stream } = spawnStream(command, args, { cwd: options?.cwd, splitLines: true, ...options });
|
|
10
|
-
|
|
11
|
-
let exitCode: number | null = null;
|
|
12
|
-
|
|
13
|
-
for await (let event of stream) {
|
|
14
|
-
yield event;
|
|
15
|
-
if (event.exitCode != null) {
|
|
16
|
-
exitCode = event.exitCode;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
if (exitCode != 0) {
|
|
21
|
-
throw new Error(`Command failed with code ${exitCode}`);
|
|
22
|
-
}
|
|
23
|
-
}
|
package/src/spawn-stream.ts
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { ChildProcess, spawn, SpawnOptions } from 'child_process';
|
|
2
|
-
import { PassThrough, Readable } from 'stream';
|
|
3
|
-
|
|
4
|
-
export interface StreamOptions {
|
|
5
|
-
splitLines?: boolean;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function spawnStream(command: string, args: string[], options: SpawnOptions & StreamOptions) {
|
|
9
|
-
const process = spawn(command, args, {
|
|
10
|
-
...options,
|
|
11
|
-
stdio: 'pipe'
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
return {
|
|
15
|
-
childProcess: process,
|
|
16
|
-
stream: processToStream(process, options)
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface SpawnStreamEvent {
|
|
21
|
-
event: 'stdout' | 'stderr' | 'exit';
|
|
22
|
-
stdout?: string;
|
|
23
|
-
stderr?: string;
|
|
24
|
-
exitCode?: number;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function processToStream(process: ChildProcess, options: StreamOptions): AsyncIterable<SpawnStreamEvent> {
|
|
28
|
-
const combinedStream = new PassThrough({ objectMode: true });
|
|
29
|
-
|
|
30
|
-
async function* transform(stream: Readable, key: 'stdout' | 'stderr'): AsyncIterable<SpawnStreamEvent> {
|
|
31
|
-
stream.setEncoding('utf-8');
|
|
32
|
-
let iterable: AsyncIterable<string> = stream;
|
|
33
|
-
if (options.splitLines) {
|
|
34
|
-
iterable = splitLines(iterable);
|
|
35
|
-
}
|
|
36
|
-
for await (const chunk of iterable) {
|
|
37
|
-
yield {
|
|
38
|
-
event: key,
|
|
39
|
-
[key]: chunk
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (process.stdout) {
|
|
45
|
-
Readable.from(transform(process.stdout, 'stdout')).pipe(combinedStream, { end: false });
|
|
46
|
-
}
|
|
47
|
-
if (process.stderr) {
|
|
48
|
-
Readable.from(transform(process.stderr, 'stderr')).pipe(combinedStream, { end: false });
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
process.on('exit', (code: number | null) => {
|
|
52
|
-
combinedStream.write({ exitCode: code }, () => {
|
|
53
|
-
combinedStream.end();
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
return combinedStream;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async function* splitLines(stream: AsyncIterable<string>): AsyncIterable<string> {
|
|
61
|
-
let buffer = '';
|
|
62
|
-
for await (const chunk of stream) {
|
|
63
|
-
buffer += chunk;
|
|
64
|
-
const lines = buffer.split('\n');
|
|
65
|
-
buffer = lines.pop()!;
|
|
66
|
-
for (let line of lines) {
|
|
67
|
-
yield `${line}\n`;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (buffer) {
|
|
71
|
-
yield buffer;
|
|
72
|
-
}
|
|
73
|
-
}
|