From 280882b549d2e52eda9e3d974e2eb29dcaac92bb Mon Sep 17 00:00:00 2001 From: Aleksej Komarov Date: Sun, 13 Jun 2021 18:00:04 +0300 Subject: [PATCH] Juke Build Hotfix 1 (#59643) * Juke Build Fix * More fixes --- tools/build/build.js | 2 ++ tools/build/juke/index.d.ts | 8 +++++- tools/build/juke/index.js | 50 ++++++++++++++++++++++++------------ tools/build/juke/runner.d.ts | 2 +- 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/tools/build/build.js b/tools/build/build.js index 292bfdd8745..951eeab8820 100755 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -139,4 +139,6 @@ const TgsTarget = Juke.createTarget({ Juke.setup({ default: DefaultTarget, +}).then((code) => { + process.exit(code); }); diff --git a/tools/build/juke/index.d.ts b/tools/build/juke/index.d.ts index 8dbc1952676..a32f6083efd 100644 --- a/tools/build/juke/index.d.ts +++ b/tools/build/juke/index.d.ts @@ -6,7 +6,13 @@ import { createParameter as _createParameter } from './parameter'; import { RunnerConfig } from './runner'; import { createTarget as _createTarget } from './target'; export { exec, chalk, glob, logger }; -export declare const setup: (config?: RunnerConfig) => void; +/** + * Configures Juke Build and starts executing targets. + * + * @param config Juke Build configuration. + * @returns Exit code of the whole runner process. + */ +export declare const setup: (config?: RunnerConfig) => Promise; export declare const createTarget: typeof _createTarget; export declare const createParameter: typeof _createParameter; export declare const sleep: (time: number) => Promise; diff --git a/tools/build/juke/index.js b/tools/build/juke/index.js index 499bc39d557..8276e735fe5 100644 --- a/tools/build/juke/index.js +++ b/tools/build/juke/index.js @@ -6715,15 +6715,23 @@ const runner = new class Runner { }); } - await Promise.all(this.workers.map(worker => new Promise(resolve => { - worker.onFinish(resolve); + const resolutions = await Promise.all(this.workers.map(worker => new Promise(resolve => { + worker.onFinish(() => resolve(true)); + worker.onFail(() => resolve(false)); worker.start(); }))); - const time = (Date.now() - startedAt) / 1000 + 's'; + const hasFailedWorkers = resolutions.includes(false); // Show done only in happy path - const timeStr = _chalk.default.magenta(time); + if (!hasFailedWorkers) { + const time = (Date.now() - startedAt) / 1000 + 's'; - _logger.logger.action(`Done in ${timeStr}`); + const timeStr = _chalk.default.magenta(time); + + _logger.logger.action(`Done in ${timeStr}`); + } // Exit code 0 or 1 depdending on the fail state. + + + return Number(hasFailedWorkers); } }(); @@ -6747,17 +6755,11 @@ class Worker { } rejectDependency(target) { - if (this.hasFailed || !this.dependencies.has(target)) { - return; - } + var _this$generator2; + this.dependencies.delete(target); this.hasFailed = true; - - const nameStr = _chalk.default.cyan(this.target.name); - - _logger.logger.error(`Target '${nameStr}' failed`); - - this.emitter.emit('fail'); + (_this$generator2 = this.generator) == null ? void 0 : _this$generator2.next(); } start() { @@ -6793,6 +6795,11 @@ class Worker { if (this.hasFailed) { + const nameStr = _chalk.default.cyan(this.target.name); + + _logger.logger.error(`Target '${nameStr}' failed`); + + this.emitter.emit('fail'); return; } // Compare inputs and outputs @@ -6818,6 +6825,11 @@ class Worker { if (this.hasFailed) { + const nameStr = _chalk.default.cyan(this.target.name); + + _logger.logger.error(`Target '${nameStr}' failed (at file comparison stage)`); + + this.emitter.emit('fail'); return; } // Execute the task @@ -6838,7 +6850,7 @@ class Worker { if (err instanceof _exec.ExitError) { const codeStr = _chalk.default.red(err.code); - _logger.logger.error(`Target '${nameStr}' failed in ${timeStr} (${codeStr})`); + _logger.logger.error(`Target '${nameStr}' failed in ${timeStr}, exit code: ${codeStr}`); } else { _logger.logger.error(`Target '${nameStr}' failed in ${timeStr}, unhandled exception:`); @@ -7079,6 +7091,12 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de const autoParameters = []; const autoTargets = []; +/** + * Configures Juke Build and starts executing targets. + * + * @param config Juke Build configuration. + * @returns Exit code of the whole runner process. + */ const setup = (config = {}) => { config = { ...config @@ -7094,7 +7112,7 @@ const setup = (config = {}) => { _runner.runner.configure(config); - _runner.runner.start(); + return _runner.runner.start(); }; exports.setup = setup; diff --git a/tools/build/juke/runner.d.ts b/tools/build/juke/runner.d.ts index ee4af99bf3f..419fa0ac5f8 100644 --- a/tools/build/juke/runner.d.ts +++ b/tools/build/juke/runner.d.ts @@ -17,7 +17,7 @@ export declare const runner: { parameters: Parameter[]; workers: Worker[]; configure(config: RunnerConfig): void; - start(): Promise; + start(): Promise; }; declare class Worker { readonly target: Target;