@nrwl/nx-cloud 15.1.1 → 15.2.0-beta.1
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/lib/core/api/error-reporter.api.js +36 -1
- package/lib/core/api/run-group.api.js +68 -1
- package/lib/core/models/distributed-agent/tasks-api-response.model.d.ts +5 -0
- package/lib/core/runners/cloud-enabled/cloud-enabled-life-cycle.js +92 -1
- package/lib/core/runners/cloud-enabled/cloud-enabled.runner.js +305 -1
- package/lib/core/runners/cloud-enabled/cloud-enabled.runner.js.map +1 -1
- package/lib/core/runners/cloud-enabled/cloud-remote-cache.js +117 -1
- package/lib/core/runners/cloud-enabled/cloud-run.api.js +167 -1
- package/lib/core/runners/cloud-enabled/id-generator.js +16 -1
- package/lib/core/runners/distributed-agent/distributed-agent.api.js +80 -1
- package/lib/core/runners/distributed-agent/distributed-agent.impl.js +169 -1
- package/lib/core/runners/distributed-agent/distributed-agent.impl.js.map +1 -1
- package/lib/core/runners/distributed-agent/execute-tasks.d.ts +3 -0
- package/lib/core/runners/distributed-agent/execute-tasks.js +115 -0
- package/lib/core/runners/distributed-agent/execute-tasks.js.map +1 -0
- package/lib/core/runners/distributed-agent/invoke-tasks.d.ts +8 -0
- package/lib/core/runners/distributed-agent/invoke-tasks.js +58 -0
- package/lib/core/runners/distributed-agent/invoke-tasks.js.map +1 -0
- package/lib/core/runners/distributed-execution/distributed-execution.api.js +143 -1
- package/lib/core/runners/distributed-execution/distributed-execution.runner.js +115 -1
- package/lib/core/runners/distributed-execution/distributed-execution.runner.js.map +1 -1
- package/lib/core/runners/distributed-execution/process-task.d.ts +7 -0
- package/lib/core/runners/distributed-execution/process-task.js +45 -0
- package/lib/core/runners/distributed-execution/process-task.js.map +1 -0
- package/lib/core/runners/distributed-execution/process-tasks.d.ts +7 -0
- package/lib/core/runners/distributed-execution/process-tasks.js +67 -0
- package/lib/core/runners/distributed-execution/process-tasks.js.map +1 -0
- package/lib/core/runners/distributed-execution/split-task-graph-into-stages.js +37 -1
- package/lib/core/runners/distributed-execution/task-graph-creator.d.ts +2 -0
- package/lib/core/runners/distributed-execution/task-graph-creator.js +100 -1
- package/lib/core/runners/distributed-execution/task-graph-creator.js.map +1 -1
- package/lib/daemon/process-run-end.js +2 -3
- package/lib/daemon/process-run-end.js.map +1 -1
- package/lib/nx-cloud-tasks-runner.js +1 -7
- package/lib/nx-cloud-tasks-runner.js.map +1 -1
- package/lib/utilities/dte-artifact-storage.d.ts +7 -0
- package/lib/utilities/dte-artifact-storage.js +42 -0
- package/lib/utilities/dte-artifact-storage.js.map +1 -0
- package/lib/utilities/nx-imports.js +1 -7
- package/lib/utilities/nx-imports.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1,36 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ErrorReporterApi = void 0;
|
|
13
|
+
const axios_1 = require("../../utilities/axios");
|
|
14
|
+
const { output } = require('../../utilities/nx-imports');
|
|
15
|
+
class ErrorReporterApi {
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.apiAxiosInstance = (0, axios_1.createApiAxiosInstance)(options);
|
|
18
|
+
}
|
|
19
|
+
reportError(message) {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
try {
|
|
22
|
+
yield (0, axios_1.axiosMultipleTries)(() => this.apiAxiosInstance.post('/nx-cloud/report-client-error', {
|
|
23
|
+
message,
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
output.warn({
|
|
28
|
+
title: `Unable to record the following error: '${message}'`,
|
|
29
|
+
bodyLines: [e.message],
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ErrorReporterApi = ErrorReporterApi;
|
|
36
|
+
//# sourceMappingURL=error-reporter.api.js.map
|
|
@@ -1 +1,68 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RunGroupApi = void 0;
|
|
13
|
+
const axios_1 = require("../../utilities/axios");
|
|
14
|
+
const metric_logger_1 = require("../../utilities/metric-logger");
|
|
15
|
+
const { output } = require('../../utilities/nx-imports');
|
|
16
|
+
class RunGroupApi {
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.apiAxiosInstance = (0, axios_1.createApiAxiosInstance)(options);
|
|
19
|
+
}
|
|
20
|
+
createRunGroup(branch, runGroup, stopAgentsOnFailure, agentCount, stopAgentsAfter) {
|
|
21
|
+
var _a;
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
const recorder = (0, metric_logger_1.createMetricRecorder)('createRunGroup');
|
|
24
|
+
try {
|
|
25
|
+
const resp = yield (0, axios_1.axiosMultipleTries)(() => this.apiAxiosInstance.post('/nx-cloud/executions/create-run-group', {
|
|
26
|
+
branch,
|
|
27
|
+
runGroup,
|
|
28
|
+
stopAgentsOnFailure,
|
|
29
|
+
agentCount,
|
|
30
|
+
stopAgentsAfter,
|
|
31
|
+
}));
|
|
32
|
+
recorder.recordMetric((0, metric_logger_1.mapRespToPerfEntry)(resp));
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
recorder.recordMetric(((_a = e === null || e === void 0 ? void 0 : e.axiosException) === null || _a === void 0 ? void 0 : _a.response)
|
|
36
|
+
? (0, metric_logger_1.mapRespToPerfEntry)(e.axiosException.response)
|
|
37
|
+
: metric_logger_1.RUNNER_FAILURE_PERF_ENTRY);
|
|
38
|
+
output.error({
|
|
39
|
+
title: e.message,
|
|
40
|
+
});
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
completeRunGroup(runGroup) {
|
|
46
|
+
var _a;
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
const recorder = (0, metric_logger_1.createMetricRecorder)('createRunGroup');
|
|
49
|
+
try {
|
|
50
|
+
const resp = yield (0, axios_1.axiosMultipleTries)(() => this.apiAxiosInstance.post('/nx-cloud/executions/complete-run-group', {
|
|
51
|
+
runGroup: runGroup,
|
|
52
|
+
}));
|
|
53
|
+
recorder.recordMetric((0, metric_logger_1.mapRespToPerfEntry)(resp));
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
recorder.recordMetric(((_a = e === null || e === void 0 ? void 0 : e.axiosException) === null || _a === void 0 ? void 0 : _a.response)
|
|
57
|
+
? (0, metric_logger_1.mapRespToPerfEntry)(e.axiosException.response)
|
|
58
|
+
: metric_logger_1.RUNNER_FAILURE_PERF_ENTRY);
|
|
59
|
+
output.error({
|
|
60
|
+
title: e.message,
|
|
61
|
+
});
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.RunGroupApi = RunGroupApi;
|
|
68
|
+
//# sourceMappingURL=run-group.api.js.map
|
|
@@ -4,6 +4,11 @@ export interface TasksApiResponse {
|
|
|
4
4
|
status?: 'RUN_GROUP_COMPLETED' | 'NO_FURTHER_TASKS_TO_RUN' | 'IN_PROGRESS';
|
|
5
5
|
retryDuring: number | null;
|
|
6
6
|
executionId: string | null;
|
|
7
|
+
completedTasks?: {
|
|
8
|
+
taskId: string;
|
|
9
|
+
hash: string;
|
|
10
|
+
url: string;
|
|
11
|
+
}[];
|
|
7
12
|
tasks: TaskToExecute[];
|
|
8
13
|
maxParallel: number;
|
|
9
14
|
criticalErrorMessage: string | null;
|
|
@@ -1 +1,92 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CloudEnabledLifeCycle = void 0;
|
|
4
|
+
const serializer_overrides_1 = require("../../../utilities/serializer-overrides");
|
|
5
|
+
const read_task_terminal_output_1 = require("../../terminal-output/read-task-terminal-output");
|
|
6
|
+
class CloudEnabledLifeCycle {
|
|
7
|
+
constructor(runContext, cacheDirectory, collectTerminalOutput, cacheableOperations, outputObfuscator, tasks) {
|
|
8
|
+
this.runContext = runContext;
|
|
9
|
+
this.cacheDirectory = cacheDirectory;
|
|
10
|
+
this.collectTerminalOutput = collectTerminalOutput;
|
|
11
|
+
this.cacheableOperations = cacheableOperations;
|
|
12
|
+
this.outputObfuscator = outputObfuscator;
|
|
13
|
+
this.tasks = tasks;
|
|
14
|
+
}
|
|
15
|
+
scheduleTask(task) {
|
|
16
|
+
this.runContext.scheduledTasks.push(task);
|
|
17
|
+
}
|
|
18
|
+
// this gets called for every tasks that starts.
|
|
19
|
+
startTask(task) {
|
|
20
|
+
this.tasks.push({
|
|
21
|
+
taskId: task.id,
|
|
22
|
+
startTime: new Date().toISOString(),
|
|
23
|
+
target: task.target.target,
|
|
24
|
+
projectName: task.target.project,
|
|
25
|
+
hash: task.hash,
|
|
26
|
+
hashDetails: this.cleanUpHashDetails(task.hashDetails),
|
|
27
|
+
params: (0, serializer_overrides_1.serializeOverrides)(task),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
endTasks(tasks) {
|
|
31
|
+
// this can be called multiple times changing this time.
|
|
32
|
+
for (let t of tasks) {
|
|
33
|
+
let cacheStatus;
|
|
34
|
+
const taskIsRemoteCacheHit = t.status === 'remote-cache';
|
|
35
|
+
const taskIsLocalCacheHitPreNx135 = t.status === 'cache';
|
|
36
|
+
const taskIsLocalCacheHit = t.status === 'local-cache' ||
|
|
37
|
+
t.status === 'local-cache-kept-existing' ||
|
|
38
|
+
taskIsLocalCacheHitPreNx135;
|
|
39
|
+
if (this.runContext.statuses[t.task.hash]) {
|
|
40
|
+
cacheStatus = this.runContext.statuses[t.task.hash];
|
|
41
|
+
}
|
|
42
|
+
else if (taskIsRemoteCacheHit) {
|
|
43
|
+
cacheStatus = 'remote-cache-hit';
|
|
44
|
+
}
|
|
45
|
+
else if (taskIsLocalCacheHit) {
|
|
46
|
+
cacheStatus = 'local-cache-hit';
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
cacheStatus = 'cache-miss';
|
|
50
|
+
}
|
|
51
|
+
this.updateStartedTask(t, cacheStatus);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
endCommand() { }
|
|
55
|
+
updateStartedTask(result, cacheStatus) {
|
|
56
|
+
const startedTask = this.tasks.find((t) => t.taskId === result.task.id);
|
|
57
|
+
if (!startedTask) {
|
|
58
|
+
throw new Error(`Cannot find task ${result.task.id}`);
|
|
59
|
+
}
|
|
60
|
+
if ((result === null || result === void 0 ? void 0 : result.startTime) && (result === null || result === void 0 ? void 0 : result.endTime)) {
|
|
61
|
+
startedTask.startTime = new Date(result.startTime).toISOString();
|
|
62
|
+
startedTask.endTime = new Date(result.endTime).toISOString();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
startedTask.endTime = new Date().toISOString();
|
|
66
|
+
}
|
|
67
|
+
startedTask.status = result.code;
|
|
68
|
+
startedTask.params = this.outputObfuscator.obfuscate(startedTask.params);
|
|
69
|
+
startedTask.cacheStatus = cacheStatus;
|
|
70
|
+
if (this.collectTerminalOutput) {
|
|
71
|
+
startedTask.terminalOutput = this.getTerminalOutput(result.task.hash, startedTask.cacheStatus, result.code);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
getTerminalOutput(hash, cacheStatus, code) {
|
|
75
|
+
return (0, read_task_terminal_output_1.readTaskTerminalOutput)(this.cacheDirectory, this.outputObfuscator, hash, cacheStatus, code);
|
|
76
|
+
}
|
|
77
|
+
cleanUpHashDetails(hashDetails) {
|
|
78
|
+
const nodes = {};
|
|
79
|
+
Object.keys(hashDetails.nodes)
|
|
80
|
+
.filter((k) => !k.startsWith('npm:'))
|
|
81
|
+
.forEach((k) => {
|
|
82
|
+
nodes[k] = hashDetails.nodes[k];
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
nodes,
|
|
86
|
+
runtime: hashDetails.runtime,
|
|
87
|
+
implicitDeps: hashDetails.implicitDeps,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.CloudEnabledLifeCycle = CloudEnabledLifeCycle;
|
|
92
|
+
//# sourceMappingURL=cloud-enabled-life-cycle.js.map
|
|
@@ -1 +1,305 @@
|
|
|
1
|
-
const a1_0x3451=['/runs/','push','../../file-storage/file-storage','endsWith','path','message','localhost','length','getBranch','note','error','waitForStoreRequestsToComplete','extractGitSha','cachePath','printCacheHitsMessage','next','ErrorReporterApi','exit','./cloud-run.api','scan','throw','url','CloudRunApi','submitRunMetrics','toString','parseCommand','rxjs/internal/Subject','__esModule','done','daemon','assign','AGENT_RUNNING_IN_DISTRIBUTED_EXECUTION','endRun','.commit','join','getNxCacheDirectory','__awaiter','warn','uploads','FileStorage','toISOString','maskedProperties','env','ACCESS_TOKEN','then','writeFileSync','hash','../../api/error-reporter.api','all','.nx.app','apply','store','obfuscate','tasks-hashes-','pathExists','printMessages','startRun','Nx\x20Cloud\x20Problems','https://nx.app','taskId','stringify','../../terminal-output/end-of-run-message','MessageReporter','CloudEnabledLifeCycle','cloudEnabledTasksRunner','filter','requests','DISTRIBUTED_TASK_EXECUTION_INTERNAL_ERROR_STATUS_CODE','./id-generator','anyErrors','generateUniqueLinkId','map','subscribe','defineProperty','./cloud-enabled-life-cycle','../../terminal-output/message-reporter','NX_CLOUD_DISTRIBUTED_EXECUTION_ID','enabled','@nrwl/nx-cloud/lib/daemon/process-run-end','api.nrwl.io','local-cache-hit','complete','lifeCycle','CloudRemoteCache'];(function(_0x70de9a,_0x345120){const _0x2aa747=function(_0x2c224d){while(--_0x2c224d){_0x70de9a['push'](_0x70de9a['shift']());}};_0x2aa747(++_0x345120);}(a1_0x3451,0x81));const a1_0x2aa7=function(_0x70de9a,_0x345120){_0x70de9a=_0x70de9a-0x0;let _0x2aa747=a1_0x3451[_0x70de9a];return _0x2aa747;};'use strict';var __awaiter=this&&this[a1_0x2aa7('0x4b')]||function(_0x390636,_0x56dc0f,_0x25fa37,_0x4568bc){function _0x41607c(_0x1c334e){return _0x1c334e instanceof _0x25fa37?_0x1c334e:new _0x25fa37(function(_0x378249){_0x378249(_0x1c334e);});}return new(_0x25fa37||(_0x25fa37=Promise))(function(_0x115f83,_0x56fc2e){function _0x47206f(_0x1ea5a5){try{_0x3f0cae(_0x4568bc[a1_0x2aa7('0x36')](_0x1ea5a5));}catch(_0x36930a){_0x56fc2e(_0x36930a);}}function _0x14ee94(_0x434aa4){try{_0x3f0cae(_0x4568bc[a1_0x2aa7('0x3b')](_0x434aa4));}catch(_0x1f134c){_0x56fc2e(_0x1f134c);}}function _0x3f0cae(_0x10738c){_0x10738c[a1_0x2aa7('0x43')]?_0x115f83(_0x10738c['value']):_0x41607c(_0x10738c['value'])[a1_0x2aa7('0x53')](_0x47206f,_0x14ee94);}_0x3f0cae((_0x4568bc=_0x4568bc[a1_0x2aa7('0x5')](_0x390636,_0x56dc0f||[]))[a1_0x2aa7('0x36')]());});};Object[a1_0x2aa7('0x1c')](exports,a1_0x2aa7('0x42'),{'value':!![]});exports[a1_0x2aa7('0x13')]=void 0x0;const message_reporter_1=require(a1_0x2aa7('0x1e'));const end_of_run_message_1=require(a1_0x2aa7('0x10'));const output_obfuscator_1=require('../../terminal-output/output-obfuscator');const cloud_enabled_life_cycle_1=require(a1_0x2aa7('0x1d'));const file_storage_1=require(a1_0x2aa7('0x29'));const e2e_encryption_1=require('../../file-storage/e2e-encryption');const environment_1=require('../../../utilities/environment');const cloud_remote_cache_1=require('./cloud-remote-cache');const cloud_run_api_1=require(a1_0x2aa7('0x39'));const fs_1=require('fs');const path=require(a1_0x2aa7('0x2b'));const metric_logger_1=require('../../../utilities/metric-logger');const error_reporter_api_1=require(a1_0x2aa7('0x2'));const path_1=require(a1_0x2aa7('0x2b'));const fs_extra_1=require('fs-extra');const id_generator_1=require(a1_0x2aa7('0x17'));const {tasksRunner,output,Cache}=require('../../../utilities/nx-imports');function createApi(_0x5b2876,_0x232927,_0xb4caf){const _0x3009d7=(0x0,environment_1['getMachineInfo'])(_0x232927);return new cloud_run_api_1[(a1_0x2aa7('0x3d'))](_0x5b2876,_0xb4caf,_0x232927,_0x3009d7);}function storeTaskHashes(_0x13346e,_0x4c4cf7,_0x5abdf0){const _0x238eb6=JSON[a1_0x2aa7('0xf')](_0x13346e[a1_0x2aa7('0x1a')](_0x1d1320=>({'taskId':_0x1d1320[a1_0x2aa7('0xe')],'hash':_0x1d1320['hash']})));if(environment_1['VERBOSE_LOGGING']){output[a1_0x2aa7('0x30')]({'title':'Executed\x20tasks\x20with\x20hashes:\x20'+_0x238eb6});}(0x0,fs_1[a1_0x2aa7('0x0')])(path[a1_0x2aa7('0x49')](_0x4c4cf7,a1_0x2aa7('0x8')+_0x5abdf0),_0x238eb6);}function storeLocalCacheHits(_0x25e4aa,_0x5ccd67,_0x2c37e1){const _0x203ace=_0x25e4aa[a1_0x2aa7('0x14')](_0x517204=>_0x517204['cacheStatus']===a1_0x2aa7('0x23'))['map'](_0x17c4ac=>_0x17c4ac[a1_0x2aa7('0x1')]);_0x203ace['forEach'](_0x5c6de9=>_0x5ccd67[a1_0x2aa7('0x6')](_0x5c6de9,_0x2c37e1));}function onComplete({daemon,lifeCycle,options,remoteCache,api,outputObfuscator,runStartTime,messages,endOfRunMessage,taskExecutions,versionOfNxBefore133,inner,encryptionKey,fileStorage,uploadInCurrentProcess,runContext}){return __awaiter(this,void 0x0,void 0x0,function*(){const _0x59a419=new Date()[a1_0x2aa7('0x4f')]();const _0x2a801c=(0x0,environment_1[a1_0x2aa7('0x2f')])();const _0x7fab1a={'command':outputObfuscator[a1_0x2aa7('0x7')]((0x0,environment_1[a1_0x2aa7('0x40')])()),'startTime':runStartTime,'endTime':_0x59a419,'distributedExecutionId':environment_1[a1_0x2aa7('0x1f')],'branch':_0x2a801c,'scan':!![],'runGroup':(0x0,environment_1['getRunGroup'])(),'sha':_0x2a801c?(0x0,environment_1[a1_0x2aa7('0x33')])():undefined,'inner':inner};if(uploadInCurrentProcess){if(environment_1[a1_0x2aa7('0x46')]){const _0x2e2a41=(0x0,environment_1[a1_0x2aa7('0x4a')])(options);storeTaskHashes(taskExecutions,_0x2e2a41,environment_1[a1_0x2aa7('0x1f')]);storeLocalCacheHits(taskExecutions,remoteCache,_0x2e2a41);}try{yield remoteCache[a1_0x2aa7('0x32')]();}catch(_0x2466e3){output[a1_0x2aa7('0x31')]({'title':'Nx\x20Cloud\x20wasn\x27t\x20able\x20to\x20store\x20artifacts.'});messages['printMessages']();process[a1_0x2aa7('0x38')](environment_1[a1_0x2aa7('0x16')]);}try{yield api[a1_0x2aa7('0x47')](_0x7fab1a,taskExecutions);}catch(_0x2f768e){output[a1_0x2aa7('0x31')]({'title':'Nx\x20Cloud\x20wasn\x27t\x20able\x20to\x20record\x20its\x20run.'});messages['printMessages']();process[a1_0x2aa7('0x38')](environment_1['DISTRIBUTED_TASK_EXECUTION_INTERNAL_ERROR_STATUS_CODE']);}yield(0x0,metric_logger_1[a1_0x2aa7('0x3e')])(options);}else{try{const _0x301310=environment_1['ACCESS_TOKEN']?environment_1[a1_0x2aa7('0x52')]:options['accessToken'];const _0x5c5561=(0x0,id_generator_1[a1_0x2aa7('0x19')])();yield daemon['processInBackground'](a1_0x2aa7('0x21'),{'encryptionKey':encryptionKey,'runnerOptions':Object[a1_0x2aa7('0x45')](Object[a1_0x2aa7('0x45')]({},options),{'accessToken':_0x301310}),'uploads':fileStorage[a1_0x2aa7('0x4d')],'runEnd':{'runData':_0x7fab1a,'taskExecutions':taskExecutions,'linkId':_0x5c5561}});runContext['runUrl']=(options['url']||a1_0x2aa7('0xd'))+a1_0x2aa7('0x27')+_0x5c5561;}catch(_0x971a06){output[a1_0x2aa7('0x4c')]({'title':a1_0x2aa7('0xc'),'bodyLines':[_0x971a06[a1_0x2aa7('0x2c')]||_0x971a06[a1_0x2aa7('0x3f')]()]});}}if(versionOfNxBefore133){setTimeout(()=>{messages[a1_0x2aa7('0xa')]();if(!messages[a1_0x2aa7('0x18')]&&!inner){endOfRunMessage[a1_0x2aa7('0x35')]();}},0x0);}else{messages[a1_0x2aa7('0xa')]();if(!messages[a1_0x2aa7('0x18')]&&!inner){endOfRunMessage[a1_0x2aa7('0x35')]();}}});}function createLifeCycle(_0x292daf,_0x4fd543,_0x1c7ee2,_0x27c7b1){const _0x7e12e4=new cloud_enabled_life_cycle_1[(a1_0x2aa7('0x12'))](_0x292daf,(0x0,environment_1[a1_0x2aa7('0x4a')])(_0x4fd543),_0x4fd543['scan']===undefined?!![]:_0x4fd543[a1_0x2aa7('0x3a')],_0x4fd543['cacheableOperations']||[],_0x1c7ee2,_0x27c7b1);try{const {CompositeLifeCycle}=require('../../../utilities/nx-imports');if(!CompositeLifeCycle)return _0x7e12e4;return new CompositeLifeCycle([_0x4fd543[a1_0x2aa7('0x25')],_0x7e12e4]);}catch(_0x2ea9b1){return _0x7e12e4;}}function fetchUrlsForKnownHashesUpfront(_0x52ab2a,_0x8dbc3e,_0x324cd0,_0x1d54c3){return __awaiter(this,void 0x0,void 0x0,function*(){let _0x211852=_0x324cd0[a1_0x2aa7('0x1a')](_0x2c96d4=>_0x2c96d4['hash'])[a1_0x2aa7('0x14')](_0x3334d3=>!!_0x3334d3);const _0x4f2aca=new Cache(_0x1d54c3);if(!_0x1d54c3['skipNxCache']){const _0xe50b21=yield Promise[a1_0x2aa7('0x3')](_0x211852['map'](_0x402d15=>{const _0x580acc=(0x0,path_1[a1_0x2aa7('0x49')])(_0x4f2aca[a1_0x2aa7('0x34')],_0x402d15+a1_0x2aa7('0x48'));return(0x0,fs_extra_1[a1_0x2aa7('0x9')])(_0x580acc);}));const _0x5b32e1=[];for(let _0x23d46e=0x0;_0x23d46e<_0xe50b21['length'];++_0x23d46e){if(_0xe50b21[_0x23d46e]){_0x5b32e1[a1_0x2aa7('0x28')](_0x211852[_0x23d46e]);}}_0x211852=_0x5b32e1;}if(_0x211852[a1_0x2aa7('0x2e')]>0x0){const _0x28c758=_0x52ab2a[a1_0x2aa7('0xb')](environment_1['NX_CLOUD_DISTRIBUTED_EXECUTION_ID'],_0x211852);for(const _0x5b58d9 of _0x211852){_0x8dbc3e[a1_0x2aa7('0x15')][_0x5b58d9]=_0x28c758;}}});}function isConnectedToPrivateCloud(_0x531957){if(!_0x531957[a1_0x2aa7('0x3c')])return![];if(_0x531957[a1_0x2aa7('0x3c')][a1_0x2aa7('0x2a')](a1_0x2aa7('0x22')))return![];if(_0x531957[a1_0x2aa7('0x3c')][a1_0x2aa7('0x2a')](a1_0x2aa7('0x4')))return![];if(_0x531957[a1_0x2aa7('0x3c')]['indexOf'](a1_0x2aa7('0x2d'))>-0x1)return![];return!![];}function cloudEnabledTasksRunner(_0x3d0abf,_0x10b72b,_0x1da777,_0x208af6=![]){var _0xe0953c;const _0xb6f91b={'statuses':{},'scheduledTasks':[],'requests':{},'allTasks':_0x3d0abf};const _0x2e2923=_0x10b72b[a1_0x2aa7('0x25')]===undefined;const _0x4dcd0c=[];const _0x1b2227=new message_reporter_1[(a1_0x2aa7('0x11'))](_0x10b72b);const _0x438c0b=createApi(_0x1b2227,_0x10b72b,_0xb6f91b);const _0x47f5ba=new end_of_run_message_1['EndOfRunMessage'](_0xb6f91b,_0x4dcd0c);const _0x1f2220=new output_obfuscator_1['OutputObfuscator'](_0x10b72b[a1_0x2aa7('0x50')]);const _0x28a632=new Date()['toISOString']();const _0x367f30=createLifeCycle(_0xb6f91b,_0x10b72b,_0x1f2220,_0x4dcd0c);const _0x35c224=environment_1['ENCRYPTION_KEY']||_0x10b72b['encryptionKey'];const _0x2e617a=new e2e_encryption_1['E2EEncryption'](_0x35c224);const _0x420d77=new error_reporter_api_1[(a1_0x2aa7('0x37'))](_0x10b72b);const _0x59ab50=!!environment_1[a1_0x2aa7('0x46')]||!((_0xe0953c=_0x1da777[a1_0x2aa7('0x44')])===null||_0xe0953c===void 0x0?void 0x0:_0xe0953c[a1_0x2aa7('0x20')]())||isConnectedToPrivateCloud(_0x10b72b);const _0x23143c=new file_storage_1[(a1_0x2aa7('0x4e'))](_0x2e617a,_0x420d77,![],_0x59ab50);const _0x36263d=new cloud_remote_cache_1[(a1_0x2aa7('0x26'))](_0x1b2227,_0x438c0b,_0xb6f91b,_0x23143c);fetchUrlsForKnownHashesUpfront(_0x438c0b,_0xb6f91b,_0x3d0abf,_0x10b72b);delete process[a1_0x2aa7('0x51')][a1_0x2aa7('0x1f')];const _0x523ba0=tasksRunner(_0x3d0abf,Object['assign'](Object['assign']({},_0x10b72b),{'remoteCache':_0x36263d,'lifeCycle':_0x367f30}),_0x1da777);if(_0x523ba0[a1_0x2aa7('0x1b')]){const {Subject}=require(a1_0x2aa7('0x41'));const _0x206b96=new Subject();_0x523ba0[a1_0x2aa7('0x1b')]({'next':_0x4470fe=>_0x206b96[a1_0x2aa7('0x36')](_0x4470fe),'error':_0x4ef586=>_0x206b96[a1_0x2aa7('0x31')](_0x4ef586),'complete':()=>__awaiter(this,void 0x0,void 0x0,function*(){yield onComplete({'daemon':_0x1da777[a1_0x2aa7('0x44')],'lifeCycle':_0x367f30,'options':_0x10b72b,'remoteCache':_0x36263d,'api':_0x438c0b,'outputObfuscator':_0x1f2220,'runStartTime':_0x28a632,'messages':_0x1b2227,'endOfRunMessage':_0x47f5ba,'taskExecutions':_0x4dcd0c,'versionOfNxBefore133':_0x2e2923,'inner':_0x208af6,'encryptionKey':_0x35c224,'fileStorage':_0x23143c,'uploadInCurrentProcess':_0x59ab50,'runContext':_0xb6f91b});_0x206b96[a1_0x2aa7('0x24')]();})});return _0x206b96;}else{return _0x523ba0[a1_0x2aa7('0x53')](_0x562a79=>__awaiter(this,void 0x0,void 0x0,function*(){yield onComplete({'daemon':_0x1da777['daemon'],'lifeCycle':_0x367f30,'options':_0x10b72b,'remoteCache':_0x36263d,'api':_0x438c0b,'outputObfuscator':_0x1f2220,'runStartTime':_0x28a632,'messages':_0x1b2227,'endOfRunMessage':_0x47f5ba,'taskExecutions':_0x4dcd0c,'versionOfNxBefore133':_0x2e2923,'inner':_0x208af6,'encryptionKey':_0x35c224,'fileStorage':_0x23143c,'uploadInCurrentProcess':_0x59ab50,'runContext':_0xb6f91b});return _0x562a79;}))['catch'](_0x221646=>__awaiter(this,void 0x0,void 0x0,function*(){yield onComplete({'daemon':_0x1da777[a1_0x2aa7('0x44')],'lifeCycle':_0x367f30,'options':_0x10b72b,'remoteCache':_0x36263d,'api':_0x438c0b,'outputObfuscator':_0x1f2220,'runStartTime':_0x28a632,'messages':_0x1b2227,'endOfRunMessage':_0x47f5ba,'taskExecutions':_0x4dcd0c,'versionOfNxBefore133':_0x2e2923,'inner':_0x208af6,'encryptionKey':_0x35c224,'fileStorage':_0x23143c,'uploadInCurrentProcess':_0x59ab50,'runContext':_0xb6f91b});throw _0x221646;}));}}exports[a1_0x2aa7('0x13')]=cloudEnabledTasksRunner;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.cloudEnabledTasksRunner = void 0;
|
|
13
|
+
const message_reporter_1 = require("../../terminal-output/message-reporter");
|
|
14
|
+
const end_of_run_message_1 = require("../../terminal-output/end-of-run-message");
|
|
15
|
+
const output_obfuscator_1 = require("../../terminal-output/output-obfuscator");
|
|
16
|
+
const cloud_enabled_life_cycle_1 = require("./cloud-enabled-life-cycle");
|
|
17
|
+
const file_storage_1 = require("../../file-storage/file-storage");
|
|
18
|
+
const e2e_encryption_1 = require("../../file-storage/e2e-encryption");
|
|
19
|
+
const environment_1 = require("../../../utilities/environment");
|
|
20
|
+
const cloud_remote_cache_1 = require("./cloud-remote-cache");
|
|
21
|
+
const cloud_run_api_1 = require("./cloud-run.api");
|
|
22
|
+
const fs_1 = require("fs");
|
|
23
|
+
const path = require("path");
|
|
24
|
+
const metric_logger_1 = require("../../../utilities/metric-logger");
|
|
25
|
+
const error_reporter_api_1 = require("../../api/error-reporter.api");
|
|
26
|
+
const path_1 = require("path");
|
|
27
|
+
const fs_extra_1 = require("fs-extra");
|
|
28
|
+
const id_generator_1 = require("./id-generator");
|
|
29
|
+
const { tasksRunner, output } = require('../../../utilities/nx-imports');
|
|
30
|
+
function createApi(errors, options, runContext) {
|
|
31
|
+
const machineInfo = (0, environment_1.getMachineInfo)(options);
|
|
32
|
+
return new cloud_run_api_1.CloudRunApi(errors, runContext, options, machineInfo);
|
|
33
|
+
}
|
|
34
|
+
function storeTaskHashes(taskExecutions, directory, distributedExecutionId) {
|
|
35
|
+
const hashes = JSON.stringify(taskExecutions.map((t) => ({
|
|
36
|
+
taskId: t.taskId,
|
|
37
|
+
hash: t.hash,
|
|
38
|
+
})));
|
|
39
|
+
if (environment_1.VERBOSE_LOGGING) {
|
|
40
|
+
output.note({
|
|
41
|
+
title: `Executed tasks with hashes: ${hashes}`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
(0, fs_1.writeFileSync)(path.join(directory, `tasks-hashes-${distributedExecutionId}`), hashes);
|
|
45
|
+
}
|
|
46
|
+
/*
|
|
47
|
+
* It can happen that a task is executed multiple times on an agent, say for DTE1 and DTE2.
|
|
48
|
+
* When it runs for DTE2, it will be a local cache hit, so it will be marked as completed.
|
|
49
|
+
* However, Nx won't upload an artifact to S3 in this case. Usually this isn't a problem,
|
|
50
|
+
* cause the first DTE would have uploaded it. But if you are using a DTE, with a read-only token,
|
|
51
|
+
* the uploaded artifact will have a different scoped hash.
|
|
52
|
+
*
|
|
53
|
+
* To address this: we are finding all local cache hits, and upload everything that has a put url.
|
|
54
|
+
*/
|
|
55
|
+
function storeLocalCacheHits(taskExecutions, remoteCache, nxCacheDirectory) {
|
|
56
|
+
const hashes = taskExecutions
|
|
57
|
+
.filter((t) => t.cacheStatus === 'local-cache-hit')
|
|
58
|
+
.map((t) => t.hash);
|
|
59
|
+
hashes.forEach((hash) => remoteCache.store(hash, nxCacheDirectory));
|
|
60
|
+
}
|
|
61
|
+
function onComplete({ daemon, lifeCycle, options, remoteCache, api, outputObfuscator, runStartTime, messages, endOfRunMessage, taskExecutions, versionOfNxBefore133, inner, encryptionKey, fileStorage, uploadInCurrentProcess, runContext, }) {
|
|
62
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
63
|
+
const runEndTime = new Date().toISOString();
|
|
64
|
+
const branch = (0, environment_1.getBranch)();
|
|
65
|
+
const runData = {
|
|
66
|
+
command: outputObfuscator.obfuscate((0, environment_1.parseCommand)()),
|
|
67
|
+
startTime: runStartTime,
|
|
68
|
+
endTime: runEndTime,
|
|
69
|
+
distributedExecutionId: environment_1.NX_CLOUD_DISTRIBUTED_EXECUTION_ID,
|
|
70
|
+
branch: branch,
|
|
71
|
+
scan: true,
|
|
72
|
+
runGroup: (0, environment_1.getRunGroup)(),
|
|
73
|
+
// only set sha if branch is set because we invoke a separate process,
|
|
74
|
+
// which adds a few millis
|
|
75
|
+
sha: branch ? (0, environment_1.extractGitSha)() : undefined,
|
|
76
|
+
inner: inner,
|
|
77
|
+
};
|
|
78
|
+
if (uploadInCurrentProcess) {
|
|
79
|
+
if (environment_1.AGENT_RUNNING_IN_DISTRIBUTED_EXECUTION) {
|
|
80
|
+
const nxCacheDirectory = (0, environment_1.getNxCacheDirectory)(options);
|
|
81
|
+
storeTaskHashes(taskExecutions, nxCacheDirectory, environment_1.NX_CLOUD_DISTRIBUTED_EXECUTION_ID);
|
|
82
|
+
storeLocalCacheHits(taskExecutions, remoteCache, nxCacheDirectory);
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
yield remoteCache.waitForStoreRequestsToComplete();
|
|
86
|
+
}
|
|
87
|
+
catch (e) {
|
|
88
|
+
output.error({
|
|
89
|
+
title: `Nx Cloud wasn't able to store artifacts.`,
|
|
90
|
+
});
|
|
91
|
+
messages.printMessages();
|
|
92
|
+
process.exit(environment_1.DISTRIBUTED_TASK_EXECUTION_INTERNAL_ERROR_STATUS_CODE);
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
yield api.endRun(runData, taskExecutions);
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
output.error({
|
|
99
|
+
title: `Nx Cloud wasn't able to record its run.`,
|
|
100
|
+
});
|
|
101
|
+
messages.printMessages();
|
|
102
|
+
process.exit(environment_1.DISTRIBUTED_TASK_EXECUTION_INTERNAL_ERROR_STATUS_CODE);
|
|
103
|
+
}
|
|
104
|
+
yield (0, metric_logger_1.submitRunMetrics)(options);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
try {
|
|
108
|
+
const accessToken = environment_1.ACCESS_TOKEN ? environment_1.ACCESS_TOKEN : options.accessToken;
|
|
109
|
+
const linkId = (0, id_generator_1.generateUniqueLinkId)();
|
|
110
|
+
yield daemon.processInBackground('@nrwl/nx-cloud/lib/daemon/process-run-end', {
|
|
111
|
+
encryptionKey,
|
|
112
|
+
runnerOptions: Object.assign(Object.assign({}, options), { accessToken }),
|
|
113
|
+
uploads: fileStorage.uploads,
|
|
114
|
+
runEnd: {
|
|
115
|
+
runData,
|
|
116
|
+
taskExecutions,
|
|
117
|
+
linkId,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
runContext.runUrl = `${options.url || 'https://nx.app'}/runs/${linkId}`;
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
output.warn({
|
|
124
|
+
title: `Nx Cloud Problems`,
|
|
125
|
+
bodyLines: [e.message || e.toString()],
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// this workaround is required because prior to Nx 13.3 we printed
|
|
130
|
+
// the end message after the runner completes, so we need to wait for the
|
|
131
|
+
// message to appear in the right place
|
|
132
|
+
if (versionOfNxBefore133) {
|
|
133
|
+
setTimeout(() => {
|
|
134
|
+
messages.printMessages();
|
|
135
|
+
if (!messages.anyErrors && !inner) {
|
|
136
|
+
endOfRunMessage.printCacheHitsMessage();
|
|
137
|
+
}
|
|
138
|
+
}, 0);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
messages.printMessages();
|
|
142
|
+
if (!messages.anyErrors && !inner) {
|
|
143
|
+
endOfRunMessage.printCacheHitsMessage();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
function createLifeCycle(runContext, options, outputObfuscator, tasks) {
|
|
149
|
+
const cloudEnabledLifeCycle = new cloud_enabled_life_cycle_1.CloudEnabledLifeCycle(runContext, (0, environment_1.getNxCacheDirectory)(options), options.scan === undefined ? true : options.scan, options.cacheableOperations || [], outputObfuscator, tasks);
|
|
150
|
+
try {
|
|
151
|
+
const { CompositeLifeCycle } = require('../../../utilities/nx-imports');
|
|
152
|
+
if (!CompositeLifeCycle)
|
|
153
|
+
return cloudEnabledLifeCycle;
|
|
154
|
+
return new CompositeLifeCycle([options.lifeCycle, cloudEnabledLifeCycle]);
|
|
155
|
+
}
|
|
156
|
+
catch (e) {
|
|
157
|
+
return cloudEnabledLifeCycle;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function fetchUrlsForKnownHashesUpfront(api, runContext, tasks, options) {
|
|
161
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
+
let hashes = tasks.map((t) => t.hash).filter((h) => !!h);
|
|
163
|
+
const cachePath = (0, environment_1.getNxCacheDirectory)(options);
|
|
164
|
+
if (!options.skipNxCache) {
|
|
165
|
+
// filter out the urls that don't have artifact stored locally
|
|
166
|
+
const promises = yield Promise.all(hashes.map((hash) => {
|
|
167
|
+
const tdCommit = (0, path_1.join)(cachePath, `${hash}.commit`);
|
|
168
|
+
return (0, fs_extra_1.pathExists)(tdCommit);
|
|
169
|
+
}));
|
|
170
|
+
const missingHashes = [];
|
|
171
|
+
for (let i = 0; i < promises.length; ++i) {
|
|
172
|
+
if (promises[i]) {
|
|
173
|
+
missingHashes.push(hashes[i]);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
hashes = missingHashes;
|
|
177
|
+
}
|
|
178
|
+
if (hashes.length > 0) {
|
|
179
|
+
const startRunRequest = api.startRun(environment_1.NX_CLOUD_DISTRIBUTED_EXECUTION_ID, hashes);
|
|
180
|
+
for (const hash of hashes) {
|
|
181
|
+
runContext.requests[hash] = startRunRequest;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function isConnectedToPrivateCloud(options) {
|
|
187
|
+
if (!options.url)
|
|
188
|
+
return false;
|
|
189
|
+
if (options.url.endsWith('api.nrwl.io'))
|
|
190
|
+
return false;
|
|
191
|
+
if (options.url.endsWith('.nx.app'))
|
|
192
|
+
return false;
|
|
193
|
+
if (options.url.indexOf('localhost') > -1)
|
|
194
|
+
return false;
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
function cloudEnabledTasksRunner(tasks, options, context, inner = false) {
|
|
198
|
+
var _a;
|
|
199
|
+
const runContext = {
|
|
200
|
+
statuses: {},
|
|
201
|
+
scheduledTasks: [],
|
|
202
|
+
requests: {},
|
|
203
|
+
allTasks: tasks,
|
|
204
|
+
};
|
|
205
|
+
const versionOfNxBefore133 = options.lifeCycle === undefined;
|
|
206
|
+
const taskExecutions = [];
|
|
207
|
+
const messages = new message_reporter_1.MessageReporter(options);
|
|
208
|
+
const api = createApi(messages, options, runContext);
|
|
209
|
+
const endOfRunMessage = new end_of_run_message_1.EndOfRunMessage(runContext, taskExecutions);
|
|
210
|
+
const outputObfuscator = new output_obfuscator_1.OutputObfuscator(options.maskedProperties);
|
|
211
|
+
const runStartTime = new Date().toISOString();
|
|
212
|
+
const lifeCycle = createLifeCycle(runContext, options, outputObfuscator, taskExecutions);
|
|
213
|
+
const encryptionKey = environment_1.ENCRYPTION_KEY || options.encryptionKey;
|
|
214
|
+
const encryption = new e2e_encryption_1.E2EEncryption(encryptionKey);
|
|
215
|
+
const errorApi = new error_reporter_api_1.ErrorReporterApi(options);
|
|
216
|
+
const uploadInCurrentProcess = !!environment_1.AGENT_RUNNING_IN_DISTRIBUTED_EXECUTION ||
|
|
217
|
+
!((_a = context.daemon) === null || _a === void 0 ? void 0 : _a.enabled()) ||
|
|
218
|
+
isConnectedToPrivateCloud(options);
|
|
219
|
+
const fileStorage = new file_storage_1.FileStorage(encryption, errorApi, false, uploadInCurrentProcess);
|
|
220
|
+
const remoteCache = new cloud_remote_cache_1.CloudRemoteCache(messages, api, runContext, fileStorage);
|
|
221
|
+
// we don't await for it cause this step is optional
|
|
222
|
+
fetchUrlsForKnownHashesUpfront(api, runContext, tasks, options);
|
|
223
|
+
// have to reset it so we don't capture inner tasks
|
|
224
|
+
delete process.env.NX_CLOUD_DISTRIBUTED_EXECUTION_ID;
|
|
225
|
+
const res = tasksRunner(tasks, Object.assign(Object.assign({}, options), { remoteCache, lifeCycle }), context);
|
|
226
|
+
// observable -> legacy
|
|
227
|
+
if (res.subscribe) {
|
|
228
|
+
const { Subject } = require('rxjs/internal/Subject');
|
|
229
|
+
const wrappedRes = new Subject();
|
|
230
|
+
res.subscribe({
|
|
231
|
+
next: (value) => wrappedRes.next(value),
|
|
232
|
+
error: (err) => wrappedRes.error(err),
|
|
233
|
+
complete: () => __awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
yield onComplete({
|
|
235
|
+
daemon: context.daemon,
|
|
236
|
+
lifeCycle,
|
|
237
|
+
options,
|
|
238
|
+
remoteCache,
|
|
239
|
+
api,
|
|
240
|
+
outputObfuscator,
|
|
241
|
+
runStartTime,
|
|
242
|
+
messages,
|
|
243
|
+
endOfRunMessage,
|
|
244
|
+
taskExecutions,
|
|
245
|
+
versionOfNxBefore133,
|
|
246
|
+
inner,
|
|
247
|
+
encryptionKey,
|
|
248
|
+
fileStorage,
|
|
249
|
+
uploadInCurrentProcess,
|
|
250
|
+
runContext,
|
|
251
|
+
});
|
|
252
|
+
wrappedRes.complete();
|
|
253
|
+
}),
|
|
254
|
+
});
|
|
255
|
+
return wrappedRes;
|
|
256
|
+
// promise
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
return res
|
|
260
|
+
.then((r) => __awaiter(this, void 0, void 0, function* () {
|
|
261
|
+
yield onComplete({
|
|
262
|
+
daemon: context.daemon,
|
|
263
|
+
lifeCycle,
|
|
264
|
+
options,
|
|
265
|
+
remoteCache,
|
|
266
|
+
api,
|
|
267
|
+
outputObfuscator,
|
|
268
|
+
runStartTime,
|
|
269
|
+
messages,
|
|
270
|
+
endOfRunMessage,
|
|
271
|
+
taskExecutions,
|
|
272
|
+
versionOfNxBefore133,
|
|
273
|
+
inner,
|
|
274
|
+
encryptionKey,
|
|
275
|
+
fileStorage,
|
|
276
|
+
uploadInCurrentProcess,
|
|
277
|
+
runContext,
|
|
278
|
+
});
|
|
279
|
+
return r;
|
|
280
|
+
}))
|
|
281
|
+
.catch((e) => __awaiter(this, void 0, void 0, function* () {
|
|
282
|
+
yield onComplete({
|
|
283
|
+
daemon: context.daemon,
|
|
284
|
+
lifeCycle,
|
|
285
|
+
options,
|
|
286
|
+
remoteCache,
|
|
287
|
+
api,
|
|
288
|
+
outputObfuscator,
|
|
289
|
+
runStartTime,
|
|
290
|
+
messages,
|
|
291
|
+
endOfRunMessage,
|
|
292
|
+
taskExecutions,
|
|
293
|
+
versionOfNxBefore133,
|
|
294
|
+
inner,
|
|
295
|
+
encryptionKey,
|
|
296
|
+
fileStorage,
|
|
297
|
+
uploadInCurrentProcess,
|
|
298
|
+
runContext,
|
|
299
|
+
});
|
|
300
|
+
throw e;
|
|
301
|
+
}));
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
exports.cloudEnabledTasksRunner = cloudEnabledTasksRunner;
|
|
305
|
+
//# sourceMappingURL=cloud-enabled.runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-enabled.runner.js","sourceRoot":"","sources":["../../../../../../../../libs/nx-packages/nx-cloud/lib/core/runners/cloud-enabled/cloud-enabled.runner.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,6EAAyE;AACzE,iFAA2E;AAC3E,+EAA2E;AAC3E,yEAAmE;AACnE,kEAA8D;AAC9D,sEAAkE;AAClE,gEAawC;AACxC,6DAAwD;AACxD,mDAA8C;AAE9C,2BAAmC;AACnC,6BAA6B;AAC7B,oEAAoE;AACpE,qEAAgE;AAChE,+BAA4B;AAC5B,uCAAsC;AACtC,iDAAsD;AAEtD,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"cloud-enabled.runner.js","sourceRoot":"","sources":["../../../../../../../../libs/nx-packages/nx-cloud/lib/core/runners/cloud-enabled/cloud-enabled.runner.ts"],"names":[],"mappings":"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"}
|