@journeyapps/cloudcode-build-agent 0.0.0-dev.6fdb5b1 → 0.0.0-dev.90a9f01
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 +1 -7
- package/dist/builder.js +4 -105
- package/dist/builder.js.map +1 -1
- package/dist/cli.js +14 -15
- package/dist/cli.js.map +1 -1
- 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 +1 -0
- package/dist/installer.js +105 -0
- package/dist/installer.js.map +1 -0
- package/dist/utils.d.ts +1 -10
- package/dist/utils.js +28 -75
- package/dist/utils.js.map +1 -1
- package/package.json +2 -4
- package/src/builder.ts +4 -98
- package/src/cli.ts +24 -20
- package/src/index.ts +1 -0
- package/src/installer.ts +88 -0
- package/src/utils.ts +28 -78
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/defs.d.ts +0 -6
- package/dist/defs.js +0 -49
- package/dist/defs.js.map +0 -1
- package/dist/detect_tasks.d.ts +0 -8
- package/dist/detect_tasks.js +0 -91
- package/dist/detect_tasks.js.map +0 -1
- package/src/defs.ts +0 -45
- package/src/detect_tasks.ts +0 -74
package/dist/builder.d.ts
CHANGED
|
@@ -1,7 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
app_id: string;
|
|
3
|
-
env: string;
|
|
4
|
-
backend_id: string;
|
|
5
|
-
backend_url: string;
|
|
6
|
-
};
|
|
7
|
-
export declare function buildTasks(project_path: string, dest: string, config: GeneralTaskConfig, only?: string): Promise<void>;
|
|
1
|
+
export declare function buildTasks(src: string, dest: string, only?: string): Promise<void>;
|
package/dist/builder.js
CHANGED
|
@@ -1,110 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.buildTasks = void 0;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const semver = __importStar(require("semver"));
|
|
30
|
-
const utils = __importStar(require("./utils"));
|
|
31
|
-
const child_process_1 = require("child_process");
|
|
32
|
-
const detect_tasks_1 = require("./detect_tasks");
|
|
33
|
-
const _ = __importStar(require("lodash"));
|
|
34
|
-
async function buildTasks(project_path, dest, config, only) {
|
|
35
|
-
const tasks = await (0, detect_tasks_1.detectTasks)(project_path, only);
|
|
36
|
-
const required_node_versions = _.compact(tasks.map((t) => t.required_node_version));
|
|
37
|
-
const install_node_versions = _.uniq(required_node_versions);
|
|
38
|
-
// FIXME: Maybe refactor this section into an ensureNodeVersion (or something) that returns the relevant toolpaths?
|
|
39
|
-
const tool_paths = {};
|
|
40
|
-
// Use the version of nodejs that's running this script as the default.
|
|
41
|
-
const default_tool_paths = {
|
|
42
|
-
bin_path: path.dirname(process.execPath),
|
|
43
|
-
node_bin: process.execPath,
|
|
44
|
-
npm_bin: path.join(path.dirname(process.execPath), 'npm')
|
|
45
|
-
};
|
|
46
|
-
tool_paths[process.version] = default_tool_paths;
|
|
47
|
-
for (const required_node_version of install_node_versions) {
|
|
48
|
-
const custom_node_path = path.resolve(`node-${semver.major(required_node_version)}`);
|
|
49
|
-
if (!jetpack.exists(path.join(custom_node_path, 'bin/node'))) {
|
|
50
|
-
console.debug(`installing to ${custom_node_path}`);
|
|
51
|
-
await jetpack.dirAsync(custom_node_path);
|
|
52
|
-
await utils.downloadAndInstallNode(required_node_version, custom_node_path);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
console.debug(`already installed in ${custom_node_path}`);
|
|
56
|
-
}
|
|
57
|
-
tool_paths[required_node_version] = utils.nodePaths(custom_node_path);
|
|
58
|
-
}
|
|
59
|
-
console.debug('----');
|
|
60
|
-
for (const task of tasks) {
|
|
61
|
-
const node_version = task.required_node_version ?? process.version;
|
|
62
|
-
const builder_package = task.builder_package;
|
|
63
|
-
const builder_script = task.builder_script;
|
|
64
|
-
const { bin_path, node_bin, npm_bin } = tool_paths[node_version];
|
|
65
|
-
const builder_bin = path.resolve(bin_path, builder_script);
|
|
66
|
-
if (!jetpack.exists(node_bin)) {
|
|
67
|
-
throw new Error(`Node binary not found: ${node_bin}`);
|
|
68
|
-
}
|
|
69
|
-
console.debug(`[${task.task_name}] Installing builder script "${builder_package}" for node ${node_version}`);
|
|
70
|
-
// TODO: This may need to be replaced with the something like the spawn-stream stuff in build-agent? OR what to do with the stdout/stderr and errorhandling?
|
|
71
|
-
const spawnResult = (0, child_process_1.spawnSync)(node_bin, [npm_bin, '--global', 'install', builder_package], { cwd: project_path });
|
|
72
|
-
if (spawnResult.status != 0) {
|
|
73
|
-
console.error(`[${task.task_name}] failed to install ${builder_package}`);
|
|
74
|
-
console.debug(`[${task.task_name}] STDOUT: ${spawnResult.stdout}`);
|
|
75
|
-
console.debug(`[${task.task_name}] STDERR: ${spawnResult.stderr}`);
|
|
76
|
-
throw new Error(`Failed to install builder script for task ${task.task_name}`);
|
|
77
|
-
}
|
|
78
|
-
if (!jetpack.exists(builder_bin)) {
|
|
79
|
-
console.error(`[${task.task_name}] ${builder_bin} not found`);
|
|
80
|
-
throw new Error(`Builder script not found for task ${task.task_name}`);
|
|
81
|
-
}
|
|
82
|
-
const builder_args = [];
|
|
83
|
-
// --src ./ --out ./dist/echo --task echo --appId 'appid' --env 'testing' --backendId 'backendid' --backendUrl 'http://run.journeyapps.test'
|
|
84
|
-
builder_args.push(builder_bin);
|
|
85
|
-
builder_args.push('--src', project_path);
|
|
86
|
-
builder_args.push(`--out`, path.join(dest, task.task_name));
|
|
87
|
-
builder_args.push(`--task`, `${task.task_name}`);
|
|
88
|
-
builder_args.push(`--appId`, config.app_id);
|
|
89
|
-
builder_args.push(`--env`, config.env);
|
|
90
|
-
builder_args.push(`--backendId`, config.backend_id);
|
|
91
|
-
builder_args.push(`--backendUrl`, config.backend_url);
|
|
92
|
-
// builder_args.push(`--runInstallScripts`, 'true'); // TODO: handle this from feature flags somehow
|
|
93
|
-
console.debug(`[${task.task_name}] Trying: ${node_bin} ${builder_args.join(' ')}`);
|
|
94
|
-
const builderSpawnResult = (0, child_process_1.spawnSync)(node_bin, builder_args, { cwd: project_path });
|
|
95
|
-
if (builderSpawnResult.status !== 0) {
|
|
96
|
-
console.error(`[${task.task_name}] FAILED TO RUN BUILDER SCRIPT`);
|
|
97
|
-
console.debug(`[${task.task_name}] STDOUT: ${builderSpawnResult.stdout}`);
|
|
98
|
-
console.debug(`[${task.task_name}] STDERR: ${builderSpawnResult.stderr}`);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
// NOTE/FIXME?: a CLOUDCODE/BUILD/BUILD_FAILED build failure (eg. TS error in task) lands here, with the output in stderr.
|
|
102
|
-
console.debug(`[${task.task_name}] SCRIPT SUCCESS`);
|
|
103
|
-
console.debug(`[${task.task_name}] STDOUT: ${builderSpawnResult.stdout}`);
|
|
104
|
-
console.debug(`[${task.task_name}] STDERR: ${builderSpawnResult.stderr}`);
|
|
105
|
-
}
|
|
106
|
-
console.debug('----');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
4
|
+
// Detect tasks in given path and build them.
|
|
5
|
+
async function buildTasks(src, dest, only) { }
|
|
109
6
|
exports.buildTasks = buildTasks;
|
|
7
|
+
// Build a single task in the specified subdirectory.
|
|
8
|
+
async function buildTask(src, dest, config) { }
|
|
110
9
|
//# sourceMappingURL=builder.js.map
|
package/dist/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":";;;AAEA,6CAA6C;AACtC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,IAAY,EAAE,IAAa,IAAG,CAAC;AAA7E,gCAA6E;AAE7E,qDAAqD;AACrD,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,IAAY,EAAE,MAAW,IAAG,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -27,27 +27,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
27
27
|
const yargs = __importStar(require("yargs"));
|
|
28
28
|
const _1 = require("./");
|
|
29
29
|
const DEFAULT_SRC_PATH = './';
|
|
30
|
-
const DEFAULT_OUT_PATH = '
|
|
30
|
+
const DEFAULT_OUT_PATH = '';
|
|
31
31
|
yargs
|
|
32
32
|
.command(['build', '$0'], // $0 means this is the default command
|
|
33
33
|
'build tasks', (yargs) => {
|
|
34
|
-
return
|
|
34
|
+
return yargs
|
|
35
35
|
.option('only', { string: true })
|
|
36
36
|
.option('path', { default: DEFAULT_SRC_PATH })
|
|
37
|
-
.option('out', { default: DEFAULT_OUT_PATH })
|
|
38
|
-
// TODO: investigate yargs.config() for reading task config blob from a file. But how to ensure required args?
|
|
39
|
-
.option('appId', { string: true, demandOption: true, describe: "CloudCode's reference id" })
|
|
40
|
-
.option('env', { string: true, demandOption: true })
|
|
41
|
-
.option('backendId', { string: true, demandOption: true })
|
|
42
|
-
.option('backendUrl', { string: true, demandOption: true }));
|
|
37
|
+
.option('out', { default: DEFAULT_OUT_PATH });
|
|
43
38
|
}, handled(async (argv) => {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
};
|
|
50
|
-
|
|
39
|
+
// iterate over task directories and run: 'yarn cloudcode-build'.
|
|
40
|
+
// optionally filtered by `argv.only` to build a single task.
|
|
41
|
+
await (0, _1.buildTasks)(argv.path, argv.out, argv.only);
|
|
42
|
+
}))
|
|
43
|
+
.command('prepare-env', 'Install node environments and packages for each task', (yargs) => {
|
|
44
|
+
return yargs.option('only', { string: true }).option('path', { default: DEFAULT_SRC_PATH });
|
|
45
|
+
}, handled(async (argv) => {
|
|
46
|
+
// iterate over task directories:
|
|
47
|
+
// ensure required node version for task CC version is installed - What if too old - error?
|
|
48
|
+
// run yarn install
|
|
49
|
+
await (0, _1.prepareBuildEnvForTasks)(argv.path, argv.only);
|
|
51
50
|
}))
|
|
52
51
|
.option('verbose', {
|
|
53
52
|
alias: 'v',
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,6CAA+B;AAE/B,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,6CAA+B;AAE/B,yBAAuE;AAEvE,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,KAAK;KACF,OAAO,CACN,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,uCAAuC;AACxD,aAAa,EACb,CAAC,KAAK,EAAE,EAAE;IACR,OAAO,KAAK;SACT,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAChC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;SAC7C,MAAM,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAClD,CAAC,EACD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,iEAAiE;IACjE,6DAA6D;IAE7D,MAAM,IAAA,aAAU,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACnD,CAAC,CAAC,CACH;KACA,OAAO,CACN,aAAa,EACb,sDAAsD,EACtD,CAAC,KAAK,EAAE,EAAE;IACR,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC9F,CAAC,EACD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,iCAAiC;IACjC,6FAA6F;IAC7F,qBAAqB;IAErB,MAAM,IAAA,0BAAuB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC,CAAC,CACH;KACA,MAAM,CAAC,SAAS,EAAE;IACjB,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,KAAK;CACf,CAAC,CAAC,IAAI,CAAC;AAEV,SAAS,OAAO,CAAI,EAA8B;IAChD,OAAO,KAAK,EAAE,IAAO,EAAE,EAAE;QACvB,IAAI;YACF,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;SAChB;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,eAAY,EAAE;gBAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aAC1B;iBAAM;gBACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjB;SACF;IACH,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./errors"), exports);
|
|
18
18
|
__exportStar(require("./builder"), exports);
|
|
19
|
+
__exportStar(require("./installer"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4CAA0B;AAC1B,8CAA4B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function prepareBuildEnvForTasks(project_path: string, only?: string): Promise<void>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.prepareBuildEnvForTasks = void 0;
|
|
27
|
+
const fs = __importStar(require("node:fs"));
|
|
28
|
+
const path = __importStar(require("node:path"));
|
|
29
|
+
const jetpack = __importStar(require("fs-jetpack"));
|
|
30
|
+
const semver = __importStar(require("semver"));
|
|
31
|
+
const utils = __importStar(require("./utils"));
|
|
32
|
+
const SUPPORTED_VERSIONS = [
|
|
33
|
+
{
|
|
34
|
+
version: '1.12.0',
|
|
35
|
+
node: '16.19.1' // FIXME: this is maybe brittle?
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
version: '1.11.2',
|
|
39
|
+
node: '14.21.3'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
version: '1.11.1',
|
|
43
|
+
node: '14.21.3'
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
version: '1.11.0',
|
|
47
|
+
node: '14.21.3'
|
|
48
|
+
}
|
|
49
|
+
];
|
|
50
|
+
async function prepareBuildEnvForTasks(project_path, only) {
|
|
51
|
+
const package_files = await jetpack.findAsync(path.join(project_path, 'cloudcode'), { matching: '**/package.json' });
|
|
52
|
+
const filtered_package_files = package_files.filter((pkg_path) => {
|
|
53
|
+
// FIXME: this is kinda clunky.
|
|
54
|
+
const pm = /^\/?cloudcode\/([^\/]+)\/package\.json$/.exec(pkg_path);
|
|
55
|
+
if (!pm) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
const taskName = pm[1];
|
|
59
|
+
if (only != null && only != taskName) {
|
|
60
|
+
// !(only.indexOf(taskName) >= 0)
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return true;
|
|
64
|
+
});
|
|
65
|
+
// FIXME: Would it be better to map out required node_versions and subsequently install them, or is this in-line approach okay?
|
|
66
|
+
/* TODO:
|
|
67
|
+
How to install and execute custom node version in a portable way?
|
|
68
|
+
- install to predictable path inside project dir, which is writeable in the container.
|
|
69
|
+
But how to run it from inside task dirs? local bin? ENV?
|
|
70
|
+
What about yarn for each node version?
|
|
71
|
+
*/
|
|
72
|
+
for (const pkg_path of filtered_package_files) {
|
|
73
|
+
try {
|
|
74
|
+
const content = await fs.promises.readFile(pkg_path, { encoding: 'utf-8' });
|
|
75
|
+
const task_package = JSON.parse(content);
|
|
76
|
+
const task_version = task_package?.cloudcode?.runtime;
|
|
77
|
+
// check task version against supported versions, install relevant node version and yarn
|
|
78
|
+
console.log(`Detected task version ${task_version}`);
|
|
79
|
+
const matching = SUPPORTED_VERSIONS.find((v) => {
|
|
80
|
+
return semver.satisfies(v.version, task_version);
|
|
81
|
+
});
|
|
82
|
+
if (!matching) {
|
|
83
|
+
console.error('FIXME: unsupported version');
|
|
84
|
+
}
|
|
85
|
+
console.log(`Matching versions: ${JSON.stringify(matching)}`);
|
|
86
|
+
const running_node_version = process.versions.node;
|
|
87
|
+
if (matching?.node && semver.major(matching.node) !== semver.major(running_node_version)) {
|
|
88
|
+
console.log(`Task requires different node version: v${matching.node}`);
|
|
89
|
+
const NODE_VERSION = matching.node;
|
|
90
|
+
const custom_node_path = path.resolve(`node-${semver.major(NODE_VERSION)}`);
|
|
91
|
+
if (!jetpack.exists(custom_node_path)) {
|
|
92
|
+
await jetpack.dirAsync(custom_node_path);
|
|
93
|
+
await utils.downloadAndInstallNode(NODE_VERSION, custom_node_path);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.error(`ERROR: ${err}`);
|
|
99
|
+
// todo: check for enoent and skip?
|
|
100
|
+
// todo: if json error, throw a CC build error?
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.prepareBuildEnvForTasks = prepareBuildEnvForTasks;
|
|
105
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,11 +1,2 @@
|
|
|
1
|
-
export declare function downloadAndInstallNode(node_version: string, destination: string): Promise<
|
|
2
|
-
bin_path: string;
|
|
3
|
-
node_bin: string;
|
|
4
|
-
npm_bin: string;
|
|
5
|
-
}>;
|
|
6
|
-
export declare function nodePaths(destination: string): {
|
|
7
|
-
bin_path: string;
|
|
8
|
-
node_bin: string;
|
|
9
|
-
npm_bin: string;
|
|
10
|
-
};
|
|
1
|
+
export declare function downloadAndInstallNode(node_version: string, destination: string): Promise<void>;
|
|
11
2
|
export declare function downloadAndExtractTarball(url: string, dest: string): Promise<void>;
|
package/dist/utils.js
CHANGED
|
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
26
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.downloadAndExtractTarball = exports.
|
|
29
|
+
exports.downloadAndExtractTarball = exports.downloadAndInstallNode = void 0;
|
|
30
30
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
31
31
|
const path = __importStar(require("node:path"));
|
|
32
32
|
const fs = __importStar(require("node:fs"));
|
|
@@ -37,93 +37,46 @@ const tar = __importStar(require("tar"));
|
|
|
37
37
|
curl https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${PLATFORM}64.tar.gz -L | tar -xzC /node-dedicated && \
|
|
38
38
|
mv /node-dedicated/node-v${NODE_VERSION}-linux-${PLATFORM}64/bin/node /node-dedicated/node
|
|
39
39
|
*/
|
|
40
|
-
// TODO: feature to find the latest minor and patch for a given major version?
|
|
41
40
|
async function downloadAndInstallNode(node_version, destination) {
|
|
42
41
|
// eg. https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-x64.tar.xz
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
// TODO: this is just for dev for now. Find a better fix.
|
|
46
|
-
const ARCH = os.arch();
|
|
47
|
-
const PLATFORM = os.platform();
|
|
48
|
-
const node_download_url = `https://nodejs.org/dist/v${node_version}/node-v${node_version}-${PLATFORM}-${ARCH}.tar.gz`;
|
|
42
|
+
const PLATFORM = 'x';
|
|
43
|
+
const node_download_url = `https://nodejs.org/dist/v${node_version}/node-v${node_version}-linux-${PLATFORM}64.tar.gz`;
|
|
49
44
|
await downloadAndExtractTarball(node_download_url, destination);
|
|
50
45
|
// TODO: move binaries into local bin path?
|
|
51
|
-
return nodePaths(destination);
|
|
52
46
|
}
|
|
53
47
|
exports.downloadAndInstallNode = downloadAndInstallNode;
|
|
54
|
-
function nodePaths(destination) {
|
|
55
|
-
return {
|
|
56
|
-
bin_path: path.resolve(destination, 'bin'),
|
|
57
|
-
node_bin: path.resolve(destination, 'bin', 'node'),
|
|
58
|
-
npm_bin: path.resolve(destination, 'bin', 'npm')
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
exports.nodePaths = nodePaths;
|
|
62
48
|
async function downloadAndExtractTarball(url, dest) {
|
|
63
49
|
const tmpdir = os.tmpdir();
|
|
64
50
|
const filename = path.basename(URL.parse(url).pathname);
|
|
65
51
|
const base = path.basename(filename, '.tar.gz');
|
|
66
52
|
const download = path.join(tmpdir, filename);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
53
|
+
const file = fs.createWriteStream(download);
|
|
54
|
+
const response = await (0, node_fetch_1.default)(url);
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
const errorBody = await response.text();
|
|
57
|
+
throw new Error(`Failed to download: ${errorBody}`);
|
|
70
58
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
response.body.pipe(file);
|
|
81
|
-
file.on('finish', async () => {
|
|
82
|
-
try {
|
|
83
|
-
console.log('Extracting...', download);
|
|
84
|
-
// const comp = fs.createReadStream(download);
|
|
85
|
-
tar.extract({
|
|
86
|
-
cwd: tmpdir,
|
|
87
|
-
file: download,
|
|
88
|
-
sync: true
|
|
89
|
-
});
|
|
90
|
-
const uncomp = path.join(tmpdir, base);
|
|
91
|
-
const dist = path.resolve(dest);
|
|
92
|
-
// FIXME: dangerous. Add protection or replace.
|
|
93
|
-
// if (fs.existsSync(dist)) {
|
|
94
|
-
// fs.rmSync(dist, { recursive: true });
|
|
95
|
-
// }
|
|
96
|
-
if (fs.existsSync(uncomp)) {
|
|
97
|
-
console.log(`Moving extracted files from ${uncomp} to ${dist}`);
|
|
98
|
-
fs.renameSync(uncomp, dist);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
console.log(`Can't find extract dir ${uncomp}`);
|
|
102
|
-
}
|
|
103
|
-
// FIXME: this seems to sometimes cause errors
|
|
104
|
-
/*
|
|
105
|
-
----
|
|
106
|
-
node:events:505
|
|
107
|
-
throw er; // Unhandled 'error' event
|
|
108
|
-
^
|
|
109
|
-
|
|
110
|
-
Error: ENOENT: no such file or directory, open '/var/folders/kc/h6m4zpmd23v13s63mygvkslm0000gn/T/node-v16.19.1-darwin-arm64.tar.gz'
|
|
111
|
-
Emitted 'error' event on ReadStream instance at:
|
|
112
|
-
at emitErrorNT (node:internal/streams/destroy:157:8)
|
|
113
|
-
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
|
|
114
|
-
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
|
|
115
|
-
errno: -2,
|
|
116
|
-
code: 'ENOENT',
|
|
117
|
-
syscall: 'open',
|
|
118
|
-
path: '/var/folders/kc/h6m4zpmd23v13s63mygvkslm0000gn/T/node-v16.19.1-darwin-arm64.tar.gz'
|
|
119
|
-
*/
|
|
120
|
-
// fs.unlinkSync(file.path);
|
|
121
|
-
resolve(null);
|
|
122
|
-
}
|
|
123
|
-
catch (err) {
|
|
124
|
-
reject(err);
|
|
125
|
-
}
|
|
59
|
+
// FIXME: replace with webstreams?
|
|
60
|
+
response.body.pipe(file);
|
|
61
|
+
file.on('finish', async () => {
|
|
62
|
+
console.log('Extracting...', download);
|
|
63
|
+
const comp = fs.createReadStream(download);
|
|
64
|
+
tar.extract({
|
|
65
|
+
cwd: tmpdir,
|
|
66
|
+
file: comp.path,
|
|
67
|
+
sync: true
|
|
126
68
|
});
|
|
69
|
+
const uncomp = path.join(tmpdir, base);
|
|
70
|
+
const dist = path.resolve(dest);
|
|
71
|
+
// FIXME: dangerous. Add protection or replace.
|
|
72
|
+
// if (fs.existsSync(dist)) {
|
|
73
|
+
// fs.rmSync(dist, { recursive: true });
|
|
74
|
+
// }
|
|
75
|
+
if (fs.existsSync(uncomp)) {
|
|
76
|
+
console.log(`Moving extracted files from ${uncomp} to ${dist}`);
|
|
77
|
+
fs.renameSync(uncomp, dist);
|
|
78
|
+
}
|
|
79
|
+
fs.unlinkSync(file.path);
|
|
127
80
|
});
|
|
128
81
|
}
|
|
129
82
|
exports.downloadAndExtractTarball = downloadAndExtractTarball;
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAA+B;AAC/B,gDAAkC;AAClC,4CAA8B;AAC9B,4CAA8B;AAC9B,8CAAgC;AAChC,yCAA2B;AAE3B;;;EAGE;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAA+B;AAC/B,gDAAkC;AAClC,4CAA8B;AAC9B,4CAA8B;AAC9B,8CAAgC;AAChC,yCAA2B;AAE3B;;;EAGE;AACK,KAAK,UAAU,sBAAsB,CAAC,YAAoB,EAAE,WAAmB;IACpF,sEAAsE;IACtE,MAAM,QAAQ,GAAG,GAAG,CAAC;IACrB,MAAM,iBAAiB,GAAG,4BAA4B,YAAY,UAAU,YAAY,UAAU,QAAQ,WAAW,CAAC;IAEtH,MAAM,yBAAyB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;IAChE,2CAA2C;AAC7C,CAAC;AAPD,wDAOC;AAEM,KAAK,UAAU,yBAAyB,CAAC,GAAW,EAAE,IAAY;IACvE,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAkB,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,uBAAuB,SAAS,EAAE,CAAC,CAAC;KACrD;IAED,kCAAkC;IAClC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAE3C,GAAG,CAAC,OAAO,CAAC;YACV,GAAG,EAAE,MAAM;YACX,IAAI,EAAE,IAAI,CAAC,IAAc;YACzB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,+CAA+C;QAC/C,6BAA6B;QAC7B,0CAA0C;QAC1C,IAAI;QACJ,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,MAAM,OAAO,IAAI,EAAE,CAAC,CAAC;YAChE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAC7B;QAED,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AA1CD,8DA0CC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@journeyapps/cloudcode-build-agent",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.90a9f01",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/index",
|
|
6
6
|
"types": "./dist/index",
|
|
@@ -10,15 +10,13 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"fs-jetpack": "5.1.0",
|
|
13
|
-
"lodash": "4.17.21",
|
|
14
13
|
"node-fetch": "<3",
|
|
15
14
|
"semver": "7.3.8",
|
|
16
15
|
"tar": "6.1.13",
|
|
17
16
|
"yargs": "17.6.2"
|
|
18
17
|
},
|
|
19
18
|
"devDependencies": {
|
|
20
|
-
"@types/
|
|
21
|
-
"@types/node": "16.11.7",
|
|
19
|
+
"@types/node": "^18.6.3",
|
|
22
20
|
"@types/node-fetch": "2.6.2",
|
|
23
21
|
"@types/semver": "7.3.13",
|
|
24
22
|
"@types/tar": "6.1.4",
|
package/src/builder.ts
CHANGED
|
@@ -1,101 +1,7 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
import * as jetpack from 'fs-jetpack';
|
|
4
|
-
import * as semver from 'semver';
|
|
5
|
-
import * as utils from './utils';
|
|
6
1
|
import { spawnSync } from 'child_process';
|
|
7
|
-
import { detectTasks } from './detect_tasks';
|
|
8
2
|
|
|
9
|
-
|
|
3
|
+
// Detect tasks in given path and build them.
|
|
4
|
+
export async function buildTasks(src: string, dest: string, only?: string) {}
|
|
10
5
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
env: string;
|
|
14
|
-
backend_id: string;
|
|
15
|
-
backend_url: string;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export async function buildTasks(project_path: string, dest: string, config: GeneralTaskConfig, only?: string) {
|
|
19
|
-
const tasks = await detectTasks(project_path, only);
|
|
20
|
-
|
|
21
|
-
const required_node_versions = _.compact(tasks.map((t) => t.required_node_version));
|
|
22
|
-
const install_node_versions = _.uniq(required_node_versions);
|
|
23
|
-
|
|
24
|
-
// FIXME: Maybe refactor this section into an ensureNodeVersion (or something) that returns the relevant toolpaths?
|
|
25
|
-
const tool_paths: Record<string, { bin_path: string; node_bin: string; npm_bin: string }> = {};
|
|
26
|
-
// Use the version of nodejs that's running this script as the default.
|
|
27
|
-
const default_tool_paths = {
|
|
28
|
-
bin_path: path.dirname(process.execPath),
|
|
29
|
-
node_bin: process.execPath,
|
|
30
|
-
npm_bin: path.join(path.dirname(process.execPath), 'npm')
|
|
31
|
-
};
|
|
32
|
-
tool_paths[process.version] = default_tool_paths;
|
|
33
|
-
|
|
34
|
-
for (const required_node_version of install_node_versions) {
|
|
35
|
-
const custom_node_path = path.resolve(`node-${semver.major(required_node_version)}`);
|
|
36
|
-
|
|
37
|
-
if (!jetpack.exists(path.join(custom_node_path, 'bin/node'))) {
|
|
38
|
-
console.debug(`installing to ${custom_node_path}`);
|
|
39
|
-
await jetpack.dirAsync(custom_node_path);
|
|
40
|
-
await utils.downloadAndInstallNode(required_node_version, custom_node_path);
|
|
41
|
-
} else {
|
|
42
|
-
console.debug(`already installed in ${custom_node_path}`);
|
|
43
|
-
}
|
|
44
|
-
tool_paths[required_node_version] = utils.nodePaths(custom_node_path);
|
|
45
|
-
}
|
|
46
|
-
console.debug('----');
|
|
47
|
-
|
|
48
|
-
for (const task of tasks) {
|
|
49
|
-
const node_version = task.required_node_version ?? process.version;
|
|
50
|
-
const builder_package = task.builder_package;
|
|
51
|
-
const builder_script = task.builder_script;
|
|
52
|
-
const { bin_path, node_bin, npm_bin } = tool_paths[node_version];
|
|
53
|
-
const builder_bin = path.resolve(bin_path, builder_script);
|
|
54
|
-
|
|
55
|
-
if (!jetpack.exists(node_bin)) {
|
|
56
|
-
throw new Error(`Node binary not found: ${node_bin}`);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
console.debug(`[${task.task_name}] Installing builder script "${builder_package}" for node ${node_version}`);
|
|
60
|
-
// TODO: This may need to be replaced with the something like the spawn-stream stuff in build-agent? OR what to do with the stdout/stderr and errorhandling?
|
|
61
|
-
const spawnResult = spawnSync(node_bin, [npm_bin, '--global', 'install', builder_package], { cwd: project_path });
|
|
62
|
-
if (spawnResult.status != 0) {
|
|
63
|
-
console.error(`[${task.task_name}] failed to install ${builder_package}`);
|
|
64
|
-
console.debug(`[${task.task_name}] STDOUT: ${spawnResult.stdout}`);
|
|
65
|
-
console.debug(`[${task.task_name}] STDERR: ${spawnResult.stderr}`);
|
|
66
|
-
throw new Error(`Failed to install builder script for task ${task.task_name}`);
|
|
67
|
-
}
|
|
68
|
-
if (!jetpack.exists(builder_bin)) {
|
|
69
|
-
console.error(`[${task.task_name}] ${builder_bin} not found`);
|
|
70
|
-
throw new Error(`Builder script not found for task ${task.task_name}`);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const builder_args: string[] = [];
|
|
74
|
-
// --src ./ --out ./dist/echo --task echo --appId 'appid' --env 'testing' --backendId 'backendid' --backendUrl 'http://run.journeyapps.test'
|
|
75
|
-
builder_args.push(builder_bin);
|
|
76
|
-
builder_args.push('--src', project_path);
|
|
77
|
-
builder_args.push(`--out`, path.join(dest, task.task_name));
|
|
78
|
-
builder_args.push(`--task`, `${task.task_name}`);
|
|
79
|
-
builder_args.push(`--appId`, config.app_id);
|
|
80
|
-
builder_args.push(`--env`, config.env);
|
|
81
|
-
builder_args.push(`--backendId`, config.backend_id);
|
|
82
|
-
builder_args.push(`--backendUrl`, config.backend_url);
|
|
83
|
-
// builder_args.push(`--runInstallScripts`, 'true'); // TODO: handle this from feature flags somehow
|
|
84
|
-
|
|
85
|
-
console.debug(`[${task.task_name}] Trying: ${node_bin} ${builder_args.join(' ')}`);
|
|
86
|
-
|
|
87
|
-
const builderSpawnResult = spawnSync(node_bin, builder_args, { cwd: project_path });
|
|
88
|
-
|
|
89
|
-
if (builderSpawnResult.status !== 0) {
|
|
90
|
-
console.error(`[${task.task_name}] FAILED TO RUN BUILDER SCRIPT`);
|
|
91
|
-
console.debug(`[${task.task_name}] STDOUT: ${builderSpawnResult.stdout}`);
|
|
92
|
-
console.debug(`[${task.task_name}] STDERR: ${builderSpawnResult.stderr}`);
|
|
93
|
-
} else {
|
|
94
|
-
// NOTE/FIXME?: a CLOUDCODE/BUILD/BUILD_FAILED build failure (eg. TS error in task) lands here, with the output in stderr.
|
|
95
|
-
console.debug(`[${task.task_name}] SCRIPT SUCCESS`);
|
|
96
|
-
console.debug(`[${task.task_name}] STDOUT: ${builderSpawnResult.stdout}`);
|
|
97
|
-
console.debug(`[${task.task_name}] STDERR: ${builderSpawnResult.stderr}`);
|
|
98
|
-
}
|
|
99
|
-
console.debug('----');
|
|
100
|
-
}
|
|
101
|
-
}
|
|
6
|
+
// Build a single task in the specified subdirectory.
|
|
7
|
+
async function buildTask(src: string, dest: string, config: any) {}
|