@journeyapps/cloudcode-build-agent 0.0.0-dev.00ebb6f

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/bin.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('./dist/cli');
@@ -0,0 +1,22 @@
1
+ import { DetectedTask } from './detect_tasks';
2
+ export type GeneralTaskConfig = {
3
+ app_id: string;
4
+ env: string;
5
+ backend_id: string;
6
+ backend_url: string;
7
+ };
8
+ export type BuildOptions = {
9
+ only?: string;
10
+ custom_node_installation_path?: string;
11
+ };
12
+ type ToolPaths = {
13
+ bin_path: string;
14
+ node_bin: string;
15
+ npm_bin: string;
16
+ npx_bin: string;
17
+ };
18
+ export declare function buildTasks(project_path: string, dest: string, config: GeneralTaskConfig, options?: BuildOptions): Promise<void>;
19
+ export declare function buildTask(task: DetectedTask, project_path: string, dest: string, config: GeneralTaskConfig, node_context: {
20
+ node_version: string;
21
+ } & ToolPaths): Promise<void>;
22
+ export {};
@@ -0,0 +1,111 @@
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.buildTask = exports.buildTasks = void 0;
27
+ const path = __importStar(require("node:path"));
28
+ const jetpack = __importStar(require("fs-jetpack"));
29
+ const semver = __importStar(require("semver"));
30
+ const installer_1 = require("./installer");
31
+ const detect_tasks_1 = require("./detect_tasks");
32
+ const run_1 = require("./run");
33
+ async function buildTasks(project_path, dest, config, options) {
34
+ const tasks = await (0, detect_tasks_1.detectTasks)(project_path, options?.only);
35
+ // Use the version of nodejs that's running this script as the default.
36
+ const default_tool_paths = {
37
+ bin_path: path.dirname(process.execPath),
38
+ node_bin: process.execPath,
39
+ npm_bin: path.join(path.dirname(process.execPath), 'npm'),
40
+ npx_bin: path.join(path.dirname(process.execPath), 'npx')
41
+ };
42
+ for (const task of tasks) {
43
+ let custom_tool_paths;
44
+ if (task.required_node_version) {
45
+ // FIXME: when defaulting to project_path, the custom node installation is copied into the builder's workdir as well.
46
+ const custom_node_installation_path = options?.custom_node_installation_path ?? project_path;
47
+ const custom_node_path = path.resolve(custom_node_installation_path, `node-${semver.major(task.required_node_version)}`);
48
+ custom_tool_paths = await (0, installer_1.ensureCustomNodeVersion)(task.required_node_version, custom_node_path);
49
+ }
50
+ const node_version = task.required_node_version ?? process.version;
51
+ await buildTask(task, project_path, dest, config, {
52
+ node_version,
53
+ ...(custom_tool_paths ?? default_tool_paths)
54
+ });
55
+ }
56
+ }
57
+ exports.buildTasks = buildTasks;
58
+ async function buildTask(task, project_path, dest, config, node_context) {
59
+ const builder_package = task.builder_package;
60
+ const builder_script = task.builder_script;
61
+ const { node_bin, npm_bin, npx_bin } = node_context;
62
+ if (!jetpack.exists(node_bin)) {
63
+ throw new Error(`Node binary not found: ${node_bin}`);
64
+ }
65
+ console.debug(`[${task.task_name}] Installing builder script "${builder_package}" for node ${node_context.node_version}`);
66
+ /*
67
+ * The builder package is installed locally so as to not require write access to the global node installation,
68
+ * and executed with npx to handle the path resoluton, etc.
69
+ */
70
+ const stream1 = (0, run_1.runCommand)(node_bin, [npm_bin, '--no-save', '--no-fund', '--no-audit', 'install', builder_package], {
71
+ cwd: project_path,
72
+ env: {
73
+ npm_config_loglevel: 'error',
74
+ ...process.env
75
+ }
76
+ });
77
+ for await (let event of stream1) {
78
+ const log = event.stdout ?? event.stderr;
79
+ if (log) {
80
+ console.log(`[${task.task_name} - install]`, log.trimRight());
81
+ }
82
+ }
83
+ const build_metadata = {
84
+ name: task.task_name,
85
+ version: task.task_version,
86
+ lambda_runtime: task.task_runtime,
87
+ user_config: task.user_task_config
88
+ };
89
+ await jetpack.writeAsync(path.join(dest, `${task.task_name}-metadata.json`), JSON.stringify(build_metadata));
90
+ const builder_args = [];
91
+ builder_args.push(builder_script);
92
+ builder_args.push('--src', project_path);
93
+ builder_args.push(`--out`, path.join(dest, task.task_name));
94
+ builder_args.push(`--zip`, path.join(dest, `${task.task_name}.zip`));
95
+ builder_args.push(`--task`, `${task.task_name}`);
96
+ builder_args.push(`--appId`, config.app_id);
97
+ builder_args.push(`--env`, config.env);
98
+ builder_args.push(`--backendId`, config.backend_id);
99
+ builder_args.push(`--backendUrl`, config.backend_url);
100
+ console.debug(`[${task.task_name}] Trying: ${node_bin} ${builder_args.join(' ')}`);
101
+ const stream2 = (0, run_1.runCommand)(npx_bin, ['--no-install', ...builder_args], { cwd: project_path, env: process.env });
102
+ for await (let event of stream2) {
103
+ const log = event.stdout ?? event.stderr;
104
+ if (log) {
105
+ console.log(`[${task.task_name} - build]`, log.trimRight());
106
+ }
107
+ }
108
+ console.log(`[${task.task_name} - build]`, `Finished.`);
109
+ }
110
+ exports.buildTask = buildTask;
111
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,72 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || function (mod) {
20
+ if (mod && mod.__esModule) return mod;
21
+ var result = {};
22
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
23
+ __setModuleDefault(result, mod);
24
+ return result;
25
+ };
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const yargs = __importStar(require("yargs"));
28
+ const _1 = require("./");
29
+ const DEFAULT_SRC_PATH = './';
30
+ const DEFAULT_OUT_PATH = './dist/cloudcode';
31
+ const DEFAULT_TMP_PATH = '/tmp/cloudcode-build-agent/node';
32
+ yargs
33
+ .command(['build', '$0'], // $0 means this is the default command
34
+ 'build tasks', (yargs) => {
35
+ return (yargs
36
+ .option('only', { string: true })
37
+ .option('path', { default: DEFAULT_SRC_PATH })
38
+ .option('out', { default: DEFAULT_OUT_PATH })
39
+ .option('node_work_dir', { default: DEFAULT_TMP_PATH })
40
+ // TODO: investigate yargs.config() for reading task config blob from a file. But how to ensure required args?
41
+ .option('appId', { string: true, demandOption: true, describe: "CloudCode's reference id" })
42
+ .option('env', { string: true, demandOption: true })
43
+ .option('backendId', { string: true, demandOption: true })
44
+ .option('backendUrl', { string: true, demandOption: true }));
45
+ }, handled(async (argv) => {
46
+ const config = {
47
+ app_id: argv.appId,
48
+ env: argv.env,
49
+ backend_id: argv.backendId,
50
+ backend_url: argv.backendUrl
51
+ };
52
+ await (0, _1.buildTasks)(argv.path, argv.out, config, {
53
+ only: argv.only,
54
+ custom_node_installation_path: argv.node_work_dir
55
+ });
56
+ }))
57
+ .option('verbose', {
58
+ alias: 'v',
59
+ default: false
60
+ }).argv;
61
+ function handled(fn) {
62
+ return async (argv) => {
63
+ try {
64
+ await fn(argv);
65
+ }
66
+ catch (err) {
67
+ console.error(err.stack);
68
+ process.exit(1);
69
+ }
70
+ };
71
+ }
72
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,6CAA+B;AAE/B,yBAAgC;AAEhC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAC5C,MAAM,gBAAgB,GAAG,iCAAiC,CAAC;AAE3D,KAAK;KACF,OAAO,CACN,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,uCAAuC;AACxD,aAAa,EACb,CAAC,KAAK,EAAE,EAAE;IACR,OAAO,CACL,KAAK;SACF,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;SAC5C,MAAM,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC;QACvD,8GAA8G;SAC7G,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CAAC;SAC3F,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACnD,MAAM,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;SACzD,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAC9D,CAAC;AACJ,CAAC,EACD,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,IAAI,CAAC,KAAK;QAClB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,UAAU,EAAE,IAAI,CAAC,SAAS;QAC1B,WAAW,EAAE,IAAI,CAAC,UAAU;KAC7B,CAAC;IACF,MAAM,IAAA,aAAU,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE;QAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,6BAA6B,EAAE,IAAI,CAAC,aAAa;KAClD,CAAC,CAAC;AACL,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,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC,CAAC;AACJ,CAAC"}
package/dist/defs.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export declare const SUPPORTED_VERSIONS: {
2
+ version: string;
3
+ node: string;
4
+ runtime: string;
5
+ builder_package: string;
6
+ builder_script: string;
7
+ }[];
package/dist/defs.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SUPPORTED_VERSIONS = void 0;
4
+ // TODO: maybe publish (some of) this from the CC service?
5
+ exports.SUPPORTED_VERSIONS = [
6
+ // {
7
+ // // proposed
8
+ // version: '1.13.0',
9
+ // node: '18.14.2',
10
+ // runtime: 'nodejs18.x',
11
+ // builder_package: '@journeyapps/cloudcode-build@1.13.0',
12
+ // builder_script: 'cloudcode-build'
13
+ // },
14
+ {
15
+ version: '1.12.0',
16
+ node: '16.19.1',
17
+ runtime: 'nodejs16.x',
18
+ builder_package: '@journeyapps/cloudcode-build-legacy@1.12.0-alpha.1',
19
+ builder_script: 'cloudcode-build-legacy'
20
+ },
21
+ {
22
+ version: '1.11.2',
23
+ node: '14.21.3',
24
+ runtime: 'nodejs14.x',
25
+ builder_package: '@journeyapps/cloudcode-build-legacy@1.12.0-alpha.1',
26
+ builder_script: 'cloudcode-build-legacy'
27
+ },
28
+ {
29
+ version: '1.11.1',
30
+ node: '14.21.3',
31
+ runtime: 'nodejs14.x',
32
+ builder_package: '@journeyapps/cloudcode-build-legacy@1.12.0-alpha.1',
33
+ builder_script: 'cloudcode-build-legacy'
34
+ },
35
+ {
36
+ version: '1.11.0',
37
+ node: '14.21.3',
38
+ runtime: 'nodejs14.x',
39
+ builder_package: '@journeyapps/cloudcode-build-legacy@1.12.0-alpha.1',
40
+ builder_script: 'cloudcode-build-legacy'
41
+ }
42
+ ];
43
+ //# sourceMappingURL=defs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defs.js","sourceRoot":"","sources":["../src/defs.ts"],"names":[],"mappings":";;;AAAA,0DAA0D;AAC7C,QAAA,kBAAkB,GAAG;IAChC,IAAI;IACJ,gBAAgB;IAChB,uBAAuB;IACvB,qBAAqB;IACrB,2BAA2B;IAC3B,4DAA4D;IAC5D,sCAAsC;IACtC,KAAK;IACL;QACE,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,oDAAoD;QACrE,cAAc,EAAE,wBAAwB;KACzC;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,oDAAoD;QACrE,cAAc,EAAE,wBAAwB;KACzC;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,oDAAoD;QACrE,cAAc,EAAE,wBAAwB;KACzC;IACD;QACE,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,YAAY;QACrB,eAAe,EAAE,oDAAoD;QACrE,cAAc,EAAE,wBAAwB;KACzC;CACF,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type DetectedTask = {
2
+ pkg_path: string;
3
+ task_name: string;
4
+ task_version: string;
5
+ task_runtime: string;
6
+ required_node_version?: string;
7
+ builder_package: string;
8
+ builder_script: string;
9
+ user_task_config: {
10
+ runtime: string;
11
+ enabled: boolean;
12
+ shared?: boolean;
13
+ serial?: boolean;
14
+ app?: boolean;
15
+ web?: boolean;
16
+ webhook?: boolean;
17
+ schedule?: any;
18
+ };
19
+ };
20
+ export declare function detectTasks(project_path: string, only?: string): Promise<DetectedTask[]>;
@@ -0,0 +1,106 @@
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.detectTasks = 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 defs = __importStar(require("./defs"));
32
+ async function readPackage(path) {
33
+ try {
34
+ const content = await fs.promises.readFile(path, { encoding: 'utf-8' });
35
+ return JSON.parse(content);
36
+ }
37
+ catch (err) {
38
+ console.error(`ERROR: ${err}`);
39
+ throw err;
40
+ // todo: check for enoent and skip?
41
+ // todo: if json error, throw a CC build error?
42
+ }
43
+ }
44
+ const UserTaskConfigDefaults = {
45
+ runtime: null,
46
+ enabled: true
47
+ };
48
+ async function detectTasks(project_path, only) {
49
+ const cloudcode_path = path.join(project_path, 'cloudcode');
50
+ if (!jetpack.exists(cloudcode_path)) {
51
+ return Promise.resolve([]);
52
+ }
53
+ const package_files = await jetpack.findAsync(cloudcode_path, { matching: '**/package.json' });
54
+ const filtered_package_files = package_files.filter((pkg_path) => {
55
+ // FIXME: this is kinda clunky.
56
+ const pm = /^\/?cloudcode\/([^\/]+)\/package\.json$/.exec(pkg_path);
57
+ if (!pm) {
58
+ return false;
59
+ }
60
+ const taskName = pm[1];
61
+ if (only != null && only != taskName) {
62
+ // !(only.indexOf(taskName) >= 0) // TODO: support a specific list of tasks to build?
63
+ return false;
64
+ }
65
+ return true;
66
+ });
67
+ return Promise.all(filtered_package_files.map(async (pkg_path) => {
68
+ const task_package = await readPackage(pkg_path);
69
+ const task_name = task_package.name; // CAVEAT: the pkg name _must_ match the dir.
70
+ const task_version = task_package.cloudcode.runtime;
71
+ const user_task_config = {
72
+ ...UserTaskConfigDefaults,
73
+ ...task_package.cloud_code
74
+ };
75
+ /* CAVEAT: We do not exclude disabled tasks from the build process, because this is a special case where the
76
+ processing for a task is disabled, but the resources for the task are not destroyed.
77
+ */
78
+ console.debug(`Detected task version ${task_version}`);
79
+ const matching = defs.SUPPORTED_VERSIONS.find((v) => {
80
+ return semver.satisfies(v.version, task_version);
81
+ });
82
+ if (!matching) {
83
+ throw new Error('FIXME: unsupported version');
84
+ }
85
+ console.debug(`Matching versions: ${JSON.stringify(matching)}`);
86
+ const task_runtime = matching.runtime;
87
+ const running_node_version = process.versions.node;
88
+ let required_node_version;
89
+ if (matching?.node && semver.major(matching.node) !== semver.major(running_node_version)) {
90
+ console.debug(`Task requires different node version: v${matching.node}. Running: ${running_node_version}`);
91
+ required_node_version = matching.node;
92
+ }
93
+ return {
94
+ pkg_path,
95
+ task_name,
96
+ task_version,
97
+ task_runtime,
98
+ user_task_config,
99
+ required_node_version,
100
+ builder_package: matching.builder_package,
101
+ builder_script: matching.builder_script
102
+ };
103
+ }));
104
+ }
105
+ exports.detectTasks = detectTasks;
106
+ //# sourceMappingURL=detect_tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect_tasks.js","sourceRoot":"","sources":["../src/detect_tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './builder';
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./builder"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B"}
@@ -0,0 +1,19 @@
1
+ export declare function ensureCustomNodeVersion(node_version: string, install_path: string): Promise<{
2
+ bin_path: string;
3
+ node_bin: string;
4
+ npm_bin: string;
5
+ npx_bin: string;
6
+ }>;
7
+ export declare function downloadAndInstallNode(node_version: string, destination: string): Promise<{
8
+ bin_path: string;
9
+ node_bin: string;
10
+ npm_bin: string;
11
+ npx_bin: string;
12
+ }>;
13
+ export declare function nodePaths(destination: string): {
14
+ bin_path: string;
15
+ node_bin: string;
16
+ npm_bin: string;
17
+ npx_bin: string;
18
+ };
19
+ export declare function downloadAndExtractTarball(url: string, dest: string): Promise<void>;
@@ -0,0 +1,135 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.downloadAndExtractTarball = exports.nodePaths = exports.downloadAndInstallNode = exports.ensureCustomNodeVersion = void 0;
30
+ const jetpack = __importStar(require("fs-jetpack"));
31
+ const path = __importStar(require("node:path"));
32
+ const URL = __importStar(require("node:url"));
33
+ const node_fetch_1 = __importDefault(require("node-fetch"));
34
+ const fs = __importStar(require("node:fs"));
35
+ const os = __importStar(require("node:os"));
36
+ const tar = __importStar(require("tar"));
37
+ async function ensureCustomNodeVersion(node_version, install_path) {
38
+ if (!jetpack.exists(path.join(install_path, 'bin/node'))) {
39
+ console.debug(`[node ${node_version}] Installing to ${install_path}`);
40
+ await jetpack.dirAsync(install_path);
41
+ await downloadAndInstallNode(node_version, install_path);
42
+ }
43
+ else {
44
+ console.debug(`[node ${node_version}] Already installed in ${install_path}`);
45
+ }
46
+ return nodePaths(install_path);
47
+ }
48
+ exports.ensureCustomNodeVersion = ensureCustomNodeVersion;
49
+ /* Basically this, but for different dirs.
50
+ curl https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${PLATFORM}64.tar.gz -L | tar -xzC /node-dedicated && \
51
+ mv /node-dedicated/node-v${NODE_VERSION}-linux-${PLATFORM}64/bin/node /node-dedicated/node
52
+ */
53
+ // TODO: feature to find the latest minor and patch for a given major version?
54
+ async function downloadAndInstallNode(node_version, destination) {
55
+ // eg. https://nodejs.org/dist/v18.14.2/node-v18.14.2-linux-x64.tar.xz
56
+ const ARCH = os.arch();
57
+ const PLATFORM = os.platform();
58
+ const node_download_url = `https://nodejs.org/dist/v${node_version}/node-v${node_version}-${PLATFORM}-${ARCH}.tar.gz`;
59
+ await downloadAndExtractTarball(node_download_url, destination);
60
+ return nodePaths(destination);
61
+ }
62
+ exports.downloadAndInstallNode = downloadAndInstallNode;
63
+ function nodePaths(destination) {
64
+ return {
65
+ bin_path: path.resolve(destination, 'bin'),
66
+ node_bin: path.resolve(destination, 'bin', 'node'),
67
+ npm_bin: path.resolve(destination, 'bin', 'npm'),
68
+ npx_bin: path.resolve(destination, 'bin', 'npx')
69
+ };
70
+ }
71
+ exports.nodePaths = nodePaths;
72
+ async function downloadAndExtractTarball(url, dest) {
73
+ const tmpdir = os.tmpdir();
74
+ const filename = path.basename(URL.parse(url).pathname);
75
+ const base = path.basename(filename, '.tar.gz');
76
+ const download = path.join(tmpdir, filename);
77
+ if (fs.existsSync(download)) {
78
+ console.debug(`deleting old ${download}`);
79
+ fs.unlinkSync(download);
80
+ }
81
+ await new Promise(async (resolve, reject) => {
82
+ console.debug(`fetching ${url} into ${download}`);
83
+ const response = await (0, node_fetch_1.default)(url);
84
+ if (!response.ok) {
85
+ const errorBody = await response.statusText;
86
+ throw new Error(`Failed to download: ${errorBody}`);
87
+ }
88
+ const file = fs.createWriteStream(download); // Sink the download stream into a file, so it can be extracted.
89
+ response.body.pipe(file);
90
+ file.on('finish', async () => {
91
+ try {
92
+ console.debug('Extracting...', download);
93
+ tar.extract({
94
+ cwd: tmpdir,
95
+ file: download,
96
+ sync: true
97
+ });
98
+ const uncomp = path.join(tmpdir, base);
99
+ const dist = path.resolve(dest);
100
+ if (fs.existsSync(uncomp)) {
101
+ console.debug(`Moving extracted files from ${uncomp} to ${dist}`);
102
+ fs.renameSync(uncomp, dist);
103
+ }
104
+ else {
105
+ console.debug(`Can't find extract dir ${uncomp}`);
106
+ }
107
+ /*
108
+ FIXME: the unlinking seems to sometimes cause errors: eg.
109
+ ```
110
+ node:events:505
111
+ throw er; // Unhandled 'error' event
112
+ ^
113
+
114
+ Error: ENOENT: no such file or directory, open '/var/folders/kc/h6m4zpmd23v13s63mygvkslm0000gn/T/node-v16.19.1-darwin-arm64.tar.gz'
115
+ Emitted 'error' event on ReadStream instance at:
116
+ at emitErrorNT (node:internal/streams/destroy:157:8)
117
+ at emitErrorCloseNT (node:internal/streams/destroy:122:3)
118
+ at processTicksAndRejections (node:internal/process/task_queues:83:21) {
119
+ errno: -2,
120
+ code: 'ENOENT',
121
+ syscall: 'open',
122
+ path: '/var/folders/kc/h6m4zpmd23v13s63mygvkslm0000gn/T/node-v16.19.1-darwin-arm64.tar.gz'
123
+ ```
124
+ */
125
+ // fs.unlinkSync(file.path);
126
+ resolve(null);
127
+ }
128
+ catch (err) {
129
+ reject(err);
130
+ }
131
+ });
132
+ });
133
+ }
134
+ exports.downloadAndExtractTarball = downloadAndExtractTarball;
135
+ //# 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/run.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ /// <reference types="node" />
2
+ import { SpawnStreamEvent } from './spawn-stream';
3
+ import { SpawnOptions } from 'child_process';
4
+ export declare function runCommand(command: string, args: string[], options?: Partial<SpawnOptions>): AsyncIterable<SpawnStreamEvent>;
package/dist/run.js ADDED
@@ -0,0 +1,19 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,15 @@
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
+ }
@@ -0,0 +1,59 @@
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
@@ -0,0 +1 @@
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/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@journeyapps/cloudcode-build-agent",
3
+ "version": "0.0.0-dev.00ebb6f",
4
+ "description": "Detect CloudCode tasks in a JourneyApps App and build them for installation on AWS Lambda",
5
+ "main": "./dist/index",
6
+ "types": "./dist/index",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "bin": {
11
+ "cloudcode-build-agent": "./bin.js"
12
+ },
13
+ "files": [
14
+ "bin.js",
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "child-process-promise": "^2.2.1",
19
+ "fs-jetpack": "5.1.0",
20
+ "lodash": "4.17.21",
21
+ "node-fetch": "<3",
22
+ "semver": "7.3.8",
23
+ "tar": "6.1.13",
24
+ "yargs": "17.6.2"
25
+ },
26
+ "devDependencies": {
27
+ "@types/child-process-promise": "2.2.2",
28
+ "@types/lodash": "4.14.191",
29
+ "@types/node": "14.18.36",
30
+ "@types/node-fetch": "2.6.2",
31
+ "@types/semver": "7.3.13",
32
+ "@types/tar": "6.1.4",
33
+ "@types/yargs": "17.0.22",
34
+ "typescript": "4.9.5"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc -b"
38
+ }
39
+ }