bit-bin
Version:
<a href="https://opensource.org/licenses/Apache-2.0"><img alt="apache" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://github.com/teambit/bit/blob/master/CONTRIBUTING.md"><img alt="prs" src="https://img.shields.io/b
367 lines (279 loc) • 9.77 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _bluebird() {
const data = require("bluebird");
_bluebird = function () {
return data;
};
return data;
}
function _ramda() {
const data = _interopRequireDefault(require("ramda"));
_ramda = function () {
return data;
};
return data;
}
function path() {
const data = _interopRequireWildcard(require("path"));
path = function () {
return data;
};
return data;
}
function _execa() {
const data = _interopRequireDefault(require("execa"));
_execa = function () {
return data;
};
return data;
}
function _pEvent() {
const data = _interopRequireDefault(require("p-event"));
_pEvent = function () {
return data;
};
return data;
}
function _serializeError() {
const data = require("serialize-error");
_serializeError = function () {
return data;
};
return data;
}
function _constants() {
const data = require("../constants");
_constants = function () {
return data;
};
return data;
}
function _analytics() {
const data = require("../analytics/analytics");
_analytics = function () {
return data;
};
return data;
}
function _logger() {
const data = _interopRequireDefault(require("../logger/logger"));
_logger = function () {
return data;
};
return data;
}
function _externalErrors() {
const data = _interopRequireDefault(require("../error/external-errors"));
_externalErrors = function () {
return data;
};
return data;
}
function _externalBuildErrors() {
const data = _interopRequireDefault(require("../consumer/component/exceptions/external-build-errors"));
_externalBuildErrors = function () {
return data;
};
return data;
}
function _externalTestErrors() {
const data = _interopRequireDefault(require("../consumer/component/exceptions/external-test-errors"));
_externalTestErrors = function () {
return data;
};
return data;
}
function _bitId() {
const data = require("../bit-id");
_bitId = function () {
return data;
};
return data;
}
var _default = /*#__PURE__*/function () {
var _run = (0, _bluebird().coroutine)(function* ({
ids,
forkLevel,
includeUnmodified = false,
verbose
}) {
if (!ids || _ramda().default.isEmpty(ids)) {
_analytics().Analytics.addBreadCrumb('specs-runner.run', 'running tests on one child process without ids');
_logger().default.debug('specs-runner.run, running tests on one child process without ids');
return runOnChildProcess({
includeUnmodified,
verbose
});
}
if (forkLevel === _constants().TESTS_FORK_LEVEL.ONE) {
_analytics().Analytics.addBreadCrumb('specs-runner.run', 'running tests on one child process with ids');
_logger().default.debug('specs-runner.run, running tests on one child process with ids');
return runOnChildProcess({
ids,
includeUnmodified: false,
// no meaning to pass this when there is specific ids
verbose
});
}
_analytics().Analytics.addBreadCrumb('specs-runner.run', 'running tests on child process for each component');
_logger().default.debug('specs-runner.run, running tests on child process for each component');
const allRunnersP = ids.map(id => runOnChildProcess({
ids: [id],
includeUnmodified: false,
// no meaning to pass this when there is specific ids
verbose
}));
const allRunnersResults = yield Promise.all(allRunnersP);
if (!allRunnersResults || !allRunnersResults.length) return undefined;
const finalResults = allRunnersResults.reduce((acc, curr) => {
// if (!curr || !curr[0]) return acc;
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
if (curr.childOutput) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
acc.childOutput = `${acc.childOutput}\n${curr.childOutput}`;
} // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
if (curr.results && curr.results[0]) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
acc.results.push(curr.results[0]);
}
return acc;
}, {
type: 'results',
childOutput: '',
results: []
});
return finalResults;
});
function run(_x) {
return _run.apply(this, arguments);
}
return run;
}();
exports.default = _default;
function runOnChildProcess(_x2) {
return _runOnChildProcess.apply(this, arguments);
}
function _runOnChildProcess() {
_runOnChildProcess = (0, _bluebird().coroutine)(function* ({
ids,
includeUnmodified,
verbose
}) {
// Check if we run from npm or from binary (pkg)
let args = [];
if (ids) {
args = args.concat(ids);
}
if (verbose) {
args.push('--verbose');
}
if (includeUnmodified) {
args.push('--all');
}
const baseEnv = {
__verbose__: verbose,
__includeUnmodified__: includeUnmodified
}; // Don't use ternary condition since if we put it as undefined
// It will pass to the fork as "undefined" (string) instad of not passing it at all
// __ids__: ids ? ids.join() : undefined,
if (ids) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
baseEnv.__ids__ = ids.join();
} // Merge process.env from the main process
const env = Object.assign({}, process.env, baseEnv);
const workerPath = path().join(__dirname, 'worker.js'); // if (process.pkg) {
// const entryPoint = process.argv[1];
// workerPath = path.join(entryPoint, '../../dist/specs-runner/worker.js');
// }
const child = _execa().default.node(workerPath, args, {
env,
nodeOptions: ['--no-warnings']
});
const result = yield (0, _pEvent().default)(child, 'message');
const childResult = yield child;
if (!result) {
return null;
}
const deserializedResults = deserializeResults(result);
if (!deserializedResults) return null;
if (childResult.all) {
deserializedResults.childOutput = childResult.all;
}
if (deserializedResults.type === 'error') {
if (deserializedResults.error instanceof Error) {
throw deserializedResults.error;
}
throw new Error(deserializedResults.error);
}
return deserializedResults;
});
return _runOnChildProcess.apply(this, arguments);
}
function deserializeResults(results) {
if (!results) return undefined;
if (results.type === 'error') {
let deserializedError = (0, _serializeError().deserializeError)(results.error); // Special desrialization for external errors
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
if (deserializedError.originalErrors) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const deserializedOriginalErrors = deserializedError.originalErrors.map(_serializeError().deserializeError);
if (results.error.name === _externalBuildErrors().default.name) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
deserializedError = new (_externalBuildErrors().default)(deserializedError.id, deserializedOriginalErrors);
} else if (results.error.name === _externalTestErrors().default.name) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
deserializedError = new (_externalTestErrors().default)(deserializedError.id, deserializedOriginalErrors);
} else {
deserializedError = new (_externalErrors().default)(deserializedOriginalErrors);
}
} // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
if (deserializedError.originalError) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const deserializedOriginalError = (0, _serializeError().deserializeError)(deserializedError.originalError);
const compName = // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
deserializedError.compName && typeof deserializedError.compName === 'string' ? deserializedError.compName : '';
deserializedError = new (_externalTestErrors().default)(compName, [deserializedOriginalError]);
}
const finalResults = {
type: 'error',
error: deserializedError
}; // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
return finalResults;
}
const deserializeFailure = failure => {
if (!failure) return undefined;
const deserializedFailure = failure;
if (failure.err) {
try {
deserializedFailure.err = (0, _serializeError().deserializeError)(failure.err);
} catch (e) {
_logger().default.debug(`fail parsing error ${deserializedFailure.err}`);
}
}
return deserializedFailure;
};
const deserializeResult = result => {
result.componentId = new (_bitId().BitId)(result.componentId); // when BitId is received from a fork it loses its class and appears as an object
if (!result.failures) return result;
result.failures = result.failures.map(deserializeFailure);
return result;
};
const deserializedResults = results.results.map(deserializeResult);
return {
type: 'results',
results: deserializedResults
};
}