slnodejs 6.1.900 → 6.1.906
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/browser-agent/dist/browser-agent-all.js +45 -7
- package/browser-agent/dist/browser-agent-all.min.js +3 -3
- package/browser-agent/package.json +1 -1
- package/package.json +1 -1
- package/tsOutputs/build-scanner/build-diff-process.js +198 -141
- package/tsOutputs/build-scanner/build-diff-process.js.map +1 -1
- package/tsOutputs/build-scanner/js_diff/sl-mapper.js.map +1 -1
- package/tsOutputs/cli-parse/cli.js +4 -1
- package/tsOutputs/cli-parse/cli.js.map +1 -1
- package/tsOutputs/cli-parse/constants/constants.js +3 -2
- package/tsOutputs/cli-parse/constants/constants.js.map +1 -1
- package/tsOutputs/cli-parse/contracts.d.ts +3 -0
- package/tsOutputs/cli-parse/contracts.js.map +1 -1
- package/tsOutputs/cli-parse/executors/build-args-dto.js +1 -0
- package/tsOutputs/cli-parse/executors/build-args-dto.js.map +1 -1
- package/tsOutputs/cli-parse/executors/build-executor.js +17 -1
- package/tsOutputs/cli-parse/executors/build-executor.js.map +1 -1
- package/tsOutputs/cli-parse/executors/dry-run/build-mapping-data.js +15 -11
- package/tsOutputs/cli-parse/executors/dry-run/build-mapping-data.js.map +1 -1
- package/tsOutputs/cli-parse/executors/dry-run/dry-run-executor.js +1 -1
- package/tsOutputs/cli-parse/executors/dry-run/dry-run-executor.js.map +1 -1
- package/tsOutputs/common/constants/sl-env-vars.d.ts +2 -0
- package/tsOutputs/common/constants/sl-env-vars.js +3 -0
- package/tsOutputs/common/constants/sl-env-vars.js.map +1 -1
- package/tsOutputs/common/http/backend-proxy-interface.d.ts +3 -1
- package/tsOutputs/common/http/backend-proxy.d.ts +3 -1
- package/tsOutputs/common/http/backend-proxy.js +9 -0
- package/tsOutputs/common/http/backend-proxy.js.map +1 -1
- package/tsOutputs/common/http/contracts.d.ts +73 -4
- package/tsOutputs/common/http/contracts.js +4 -1
- package/tsOutputs/common/http/contracts.js.map +1 -1
- package/tsOutputs/common/http/dry-run-proxy.js +17 -0
- package/tsOutputs/common/http/dry-run-proxy.js.map +1 -1
- package/tsOutputs/common/http/sl-routes.d.ts +4 -0
- package/tsOutputs/common/http/sl-routes.js +13 -0
- package/tsOutputs/common/http/sl-routes.js.map +1 -1
- package/tsOutputs/common/scm/contracts.d.ts +71 -0
package/package.json
CHANGED
|
@@ -1,26 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
var
|
|
3
|
-
|
|
4
|
-
|
|
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.BuildDiffProcess = void 0;
|
|
13
|
+
const fs = require("fs");
|
|
14
|
+
const path = require("path");
|
|
15
|
+
const os = require("os");
|
|
16
|
+
const scm_files_container_1 = require("./scm/scm-files-container");
|
|
17
|
+
const files_container_1 = require("./mappings/files-container");
|
|
18
|
+
const sl_mapper_1 = require("./js_diff/sl-mapper");
|
|
19
|
+
const file_path_fixer_1 = require("./mappings/file-path-fixer");
|
|
20
|
+
const scm_file_fixer_1 = require("./scm/scm-file-fixer");
|
|
21
|
+
const cockpit_notifier_1 = require("../common/agent-events/cockpit-notifier");
|
|
22
|
+
const factory_1 = require("./source-map-eraser/factory");
|
|
23
|
+
// not updated cjs modules
|
|
24
|
+
const FilesMapping = require("./js_diff/files-mapping");
|
|
25
|
+
const EnsureFilesHandlerServiceModule = require("./mappings/ensure-files-handler.service");
|
|
26
|
+
const DryRunFilesMapping = require("./js_diff/dry-run-files-mapping");
|
|
27
|
+
const utils = require("./utils.js");
|
|
28
|
+
const DefaultValuesResolver = require("./default-values-resolver");
|
|
29
|
+
const fileAndFolderUtils = require("./file-and-folder-utils");
|
|
30
|
+
const BrowserInstrumenter = require("./instrumentation/browser-instrumenter");
|
|
31
|
+
const SlEnvModule = require("../common/constants/sl-env-vars");
|
|
32
|
+
const contracts_1 = require("./diagnostic/contracts");
|
|
33
|
+
const system_date_1 = require("../common/system-date");
|
|
5
34
|
// TODO: Find a way to get version number without relative path
|
|
6
35
|
// var version = require("../package.json").version;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var DefaultValuesResolver = require('./default-values-resolver');
|
|
12
|
-
var fileAndFolderUtils = require("./file-and-folder-utils");
|
|
13
|
-
var BrowserInstrumenter = require('./instrumentation/browser-instrumenter');
|
|
14
|
-
var dvr = new DefaultValuesResolver();
|
|
15
|
-
var { ScmFilesContainer } = require("./scm/scm-files-container");
|
|
16
|
-
var { FilesContainer } = require("./mappings/files-container");
|
|
17
|
-
var CiaEnvVars = require("../common/constants/sl-env-vars").SlEnvVars.CIA;
|
|
18
|
-
const { BrowserSlMapper, SlMapper, NodeV8RawCoverageSlMapper } = require('./js_diff/sl-mapper');
|
|
19
|
-
const { FilePathFixer } = require('./mappings/file-path-fixer');
|
|
20
|
-
const { ScmFileFixer } = require('./scm/scm-file-fixer');
|
|
21
|
-
const { CockpitNotifier } = require('../common/agent-events/cockpit-notifier');
|
|
22
|
-
const { SourceMapEraserFactory } = require('./source-map-eraser/factory');
|
|
23
|
-
const fs = require('fs');
|
|
36
|
+
const version = '1.0.0';
|
|
37
|
+
const { EnsureFilesHandlerService } = EnsureFilesHandlerServiceModule;
|
|
38
|
+
const CiaEnvVars = SlEnvModule.SlEnvVars.CIA;
|
|
39
|
+
const dvr = new DefaultValuesResolver();
|
|
24
40
|
function shouldSubmitSlMapping(buildArguments) {
|
|
25
41
|
if (!buildArguments.instrumentationOnly) {
|
|
26
42
|
return true;
|
|
@@ -30,18 +46,18 @@ function shouldSubmitSlMapping(buildArguments) {
|
|
|
30
46
|
function shouldSubmitNodeV8RawCoverageSlMapper(buildArguments) {
|
|
31
47
|
return buildArguments.v8Coverage;
|
|
32
48
|
}
|
|
33
|
-
function
|
|
49
|
+
function resolveSlMapperInstance(buildArguments, outputPath, backendProxy, logger) {
|
|
34
50
|
if (buildArguments.useRelativeSlMapping || buildArguments.instrumentForBrowsers) {
|
|
35
|
-
return BrowserSlMapper;
|
|
51
|
+
return new sl_mapper_1.BrowserSlMapper(outputPath, backendProxy, buildArguments.buildSessionId, logger);
|
|
36
52
|
}
|
|
37
|
-
return SlMapper;
|
|
53
|
+
return new sl_mapper_1.SlMapper(outputPath, backendProxy, buildArguments.buildSessionId, logger);
|
|
38
54
|
}
|
|
39
55
|
function resolveFilePathFixer(handlerParams, buildArguments, slMapper, nodeV8RawCoverageSlMapper, logger) {
|
|
40
56
|
if (buildArguments.scm === 'git') {
|
|
41
|
-
return new ScmFileFixer(handlerParams.filesContainer, slMapper, nodeV8RawCoverageSlMapper, logger, handlerParams.projectRoot, handlerParams.scmRootDir, buildArguments.useModulePrefix, buildArguments.uniqueModuleId, buildArguments.v8Coverage);
|
|
57
|
+
return new scm_file_fixer_1.ScmFileFixer(handlerParams.filesContainer, slMapper, nodeV8RawCoverageSlMapper, logger, handlerParams.projectRoot, handlerParams.scmRootDir, buildArguments.useModulePrefix, buildArguments.uniqueModuleId, buildArguments.v8Coverage);
|
|
42
58
|
}
|
|
43
59
|
else {
|
|
44
|
-
return new FilePathFixer(handlerParams.filesContainer, slMapper, nodeV8RawCoverageSlMapper, logger, handlerParams.projectRoot, buildArguments.useModulePrefix, buildArguments.uniqueModuleId, buildArguments.v8Coverage);
|
|
60
|
+
return new file_path_fixer_1.FilePathFixer(handlerParams.filesContainer, slMapper, nodeV8RawCoverageSlMapper, logger, handlerParams.projectRoot, buildArguments.useModulePrefix, buildArguments.uniqueModuleId, buildArguments.v8Coverage);
|
|
45
61
|
}
|
|
46
62
|
}
|
|
47
63
|
// TODO: should be moved to ConfigLoader when it will exist in context of scan
|
|
@@ -63,63 +79,76 @@ function checkDeprecatedEnvVar(logger) {
|
|
|
63
79
|
for (const deprecatedEnvVar of deprecatedEnvVars) {
|
|
64
80
|
if (process.env[deprecatedEnvVar.key]) {
|
|
65
81
|
logger.warn(`Deprecated env_var \`${deprecatedEnvVar.key}\` was provided. ${deprecatedEnvVar.message}`);
|
|
66
|
-
CockpitNotifier.sendWarning(`Deprecated env_var \`${deprecatedEnvVar.key}\` was provided with value - '${process.env[deprecatedEnvVar.key]}'. ${deprecatedEnvVar.message}`);
|
|
82
|
+
cockpit_notifier_1.CockpitNotifier.sendWarning(`Deprecated env_var \`${deprecatedEnvVar.key}\` was provided with value - '${process.env[deprecatedEnvVar.key]}'. ${deprecatedEnvVar.message}`);
|
|
67
83
|
}
|
|
68
84
|
}
|
|
69
85
|
}
|
|
86
|
+
// TODO: buildArgs not in use
|
|
70
87
|
function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencies, logger, diagnostic) {
|
|
71
|
-
|
|
72
|
-
className:
|
|
88
|
+
const childLogger = logger.child({
|
|
89
|
+
className: 'BuildDiffProcess'
|
|
73
90
|
});
|
|
74
91
|
function createBuildDiffPromiseChain(buildArguments) {
|
|
75
92
|
parsedDependencies = parsedDependencies || [];
|
|
76
|
-
|
|
93
|
+
const handlerParams = {
|
|
77
94
|
buildArguments: buildArguments,
|
|
78
95
|
cfg: buildArguments,
|
|
79
96
|
finalOutput: {
|
|
80
97
|
meta: createMetaTag(buildArguments),
|
|
81
|
-
version:
|
|
98
|
+
version: '2.0',
|
|
82
99
|
files: [],
|
|
83
|
-
dependencies: parsedDependencies
|
|
84
|
-
|
|
100
|
+
dependencies: parsedDependencies,
|
|
101
|
+
includedFiles: [],
|
|
102
|
+
counters: {
|
|
103
|
+
methods: 0,
|
|
104
|
+
branches: 0,
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
processedFiles: null,
|
|
108
|
+
fileToCommitsMap: null,
|
|
109
|
+
scmRootDir: null,
|
|
110
|
+
filesContainer: null,
|
|
111
|
+
projectRoot: null,
|
|
112
|
+
filePathFixer: null,
|
|
113
|
+
commitToIndexMap: {},
|
|
114
|
+
emailToIndexMap: {},
|
|
85
115
|
};
|
|
86
|
-
|
|
116
|
+
let promiseChain = Promise.resolve();
|
|
87
117
|
// TODO: should be moved to ConfigLoader when it will exist
|
|
88
|
-
checkDeprecatedEnvVar(
|
|
118
|
+
checkDeprecatedEnvVar(childLogger);
|
|
89
119
|
if (parsedDependencies.length == 0) { //If there are dependencies, no need to require workspacepath, scm, commit, and no need to perform actual scanning
|
|
90
|
-
|
|
120
|
+
let scmInstance;
|
|
91
121
|
if (buildArguments.workspacepath) {
|
|
92
|
-
scmInstance = scmFactory.createScmByType(buildArguments.scm, buildArguments
|
|
122
|
+
scmInstance = scmFactory.createScmByType(buildArguments.scm, buildArguments);
|
|
93
123
|
if (scmInstance) {
|
|
94
124
|
handlerParams.finalOutput.meta.scm = buildArguments.scm;
|
|
95
|
-
|
|
125
|
+
childLogger.info(`Created an scmInstance of type '${buildArguments.scm}'. Searching for a local repository at '${buildArguments.workspacepath}'.`);
|
|
96
126
|
if (!buildArguments.commit && !scmInstance.detectCommitVersion) {
|
|
97
|
-
return Promise.reject(
|
|
127
|
+
return Promise.reject(`'commit' command-line argument is required, since automatic detection by the '${buildArguments.scm}' SCM is not supported`);
|
|
98
128
|
}
|
|
99
129
|
}
|
|
100
130
|
else {
|
|
101
|
-
|
|
131
|
+
childLogger.warn(`Unsupported scm type: '${buildArguments.scm}'.`);
|
|
102
132
|
}
|
|
103
133
|
//2. If there is a mapping, get the diffs
|
|
104
134
|
if (scmInstance) {
|
|
105
135
|
promiseChain = promiseChain.then(() => collectScmData(buildArguments, handlerParams, scmInstance));
|
|
106
136
|
}
|
|
107
137
|
promiseChain = promiseChain.then(function () {
|
|
108
|
-
|
|
109
|
-
|
|
138
|
+
const FileMappingInstance = buildArguments.isDryRunMode ? DryRunFilesMapping : FilesMapping;
|
|
139
|
+
const filesMapping = new FileMappingInstance(handlerParams, diagnostic, childLogger, handlerParams.projectRoot);
|
|
110
140
|
return filesMapping.process();
|
|
111
141
|
});
|
|
112
142
|
}
|
|
113
143
|
}
|
|
114
144
|
//4. Submit the final output to the server
|
|
115
|
-
const slMapperInstance = getSlMapperInstance(buildArguments);
|
|
116
145
|
let slMapper = null;
|
|
117
146
|
let nodeV8RawCoverageSlMapper = null;
|
|
118
147
|
promiseChain = promiseChain.then(function () {
|
|
119
|
-
slMapper =
|
|
120
|
-
nodeV8RawCoverageSlMapper = new NodeV8RawCoverageSlMapper(CiaEnvVars.getSlMappingPath(), backendProxy, buildArguments.buildSessionId,
|
|
121
|
-
handlerParams.filePathFixer = resolveFilePathFixer(handlerParams, buildArguments, slMapper, nodeV8RawCoverageSlMapper,
|
|
122
|
-
|
|
148
|
+
slMapper = resolveSlMapperInstance(buildArguments, CiaEnvVars.getSlMappingPath(), backendProxy, childLogger);
|
|
149
|
+
nodeV8RawCoverageSlMapper = new sl_mapper_1.NodeV8RawCoverageSlMapper(CiaEnvVars.getSlMappingPath(), backendProxy, buildArguments.buildSessionId, childLogger);
|
|
150
|
+
handlerParams.filePathFixer = resolveFilePathFixer(handlerParams, buildArguments, slMapper, nodeV8RawCoverageSlMapper, childLogger);
|
|
151
|
+
const fixer = new EnsureFilesHandlerService(childLogger, handlerParams.buildArguments, handlerParams.filesContainer, handlerParams.filePathFixer, handlerParams.scmRootDir, handlerParams.cfg, handlerParams.fileToCommitsMap, diagnostic);
|
|
123
152
|
const result = fixer.ensureProcess(handlerParams.finalOutput);
|
|
124
153
|
handlerParams.finalOutput = result.output;
|
|
125
154
|
if (buildArguments.awsConfigure) {
|
|
@@ -131,26 +160,21 @@ function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencie
|
|
|
131
160
|
slMapping: slMapping
|
|
132
161
|
}, null, 2));
|
|
133
162
|
}
|
|
134
|
-
// if (buildArguments.instrumentForBrowsers) {
|
|
135
|
-
// promiseChain = promiseChain.then(function () {
|
|
136
|
-
// return submitSlMapping(promiseChain, slMapper, buildArguments.uniqueModuleId, logger)
|
|
137
|
-
// })
|
|
138
|
-
// }
|
|
139
163
|
if (buildArguments.instrumentationOnly) {
|
|
140
|
-
|
|
164
|
+
childLogger.info('No need to submit the files to server as the \'instrumentationOnly\' flag is on.');
|
|
141
165
|
return Promise.resolve();
|
|
142
166
|
}
|
|
143
167
|
else {
|
|
144
168
|
//TODO: [SLDEV-4708] When the call to the server fails, the agent is "silent" and not showing any error message.
|
|
145
|
-
return
|
|
169
|
+
return submitBuildMapping(buildArguments, handlerParams.finalOutput);
|
|
146
170
|
}
|
|
147
171
|
});
|
|
148
172
|
//5. Print the counters
|
|
149
173
|
promiseChain = promiseChain.then(function () {
|
|
150
|
-
|
|
174
|
+
const mapping = handlerParams.finalOutput;
|
|
151
175
|
const counters = countElements(mapping.files);
|
|
152
176
|
if (!buildArguments.isDryRunMode) {
|
|
153
|
-
|
|
177
|
+
childLogger.lifecycle(`Scanned ${counters.methods} methods and ${counters.branches} branches in ${counters.files} files.`);
|
|
154
178
|
}
|
|
155
179
|
});
|
|
156
180
|
if (shouldSubmitSlMapping(buildArguments)) {
|
|
@@ -168,7 +192,7 @@ function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencie
|
|
|
168
192
|
});
|
|
169
193
|
// delete source maps if required
|
|
170
194
|
if (buildArguments.excludeSourceMapFiles) {
|
|
171
|
-
const sourceMapsEraser = SourceMapEraserFactory.createSourceMapEraserByMode(buildArguments.excludeSourceMapFiles,
|
|
195
|
+
const sourceMapsEraser = factory_1.SourceMapEraserFactory.createSourceMapEraserByMode(buildArguments.excludeSourceMapFiles, childLogger, buildArguments.workspacepath);
|
|
172
196
|
promiseChain = promiseChain.then(function () {
|
|
173
197
|
return sourceMapsEraser.remove();
|
|
174
198
|
});
|
|
@@ -179,25 +203,25 @@ function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencie
|
|
|
179
203
|
if (handlerParams.finalOutput && handlerParams.finalOutput.files && !buildArguments.isDryRunMode) {
|
|
180
204
|
delete handlerParams.finalOutput.files;
|
|
181
205
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
206
|
+
const promise = new Promise(function (resolve, reject) {
|
|
207
|
+
const resolveWithoutHash = true;
|
|
208
|
+
const delayShutdownInSeconds = buildArguments.delayShutdownInSeconds || 30;
|
|
209
|
+
const downloadAgent = buildArguments.downloadAgent != null ? buildArguments.downloadAgent : true;
|
|
186
210
|
// TODO - is there any reason not to copy buildArguments as is an override specific fields which require logic?
|
|
187
|
-
|
|
211
|
+
const instrumentationConfig = {
|
|
188
212
|
appName: buildArguments.appname,
|
|
189
213
|
build: buildArguments.build,
|
|
190
214
|
customerId: buildArguments.customerId,
|
|
191
215
|
branch: buildArguments.branch,
|
|
192
216
|
sourceRoot: buildArguments.workspacepath,
|
|
193
|
-
files: getProcessedFiles(buildArguments,
|
|
217
|
+
files: getProcessedFiles(buildArguments, childLogger),
|
|
194
218
|
outputPath: buildArguments.outputpath,
|
|
195
219
|
copyAllFilesToOutput: buildArguments.copyAllFilesToOutput !== false,
|
|
196
220
|
buildSessionId: buildArguments.buildSessionId,
|
|
197
|
-
esModules: buildArguments[
|
|
221
|
+
esModules: buildArguments['es6Modules'],
|
|
198
222
|
server: buildArguments.server,
|
|
199
223
|
token: buildArguments.token,
|
|
200
|
-
instrumentationType:
|
|
224
|
+
instrumentationType: 'browser',
|
|
201
225
|
resolveWithoutHash: resolveWithoutHash,
|
|
202
226
|
delayShutdownInSeconds: delayShutdownInSeconds,
|
|
203
227
|
downloadAgent: downloadAgent,
|
|
@@ -217,21 +241,21 @@ function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencie
|
|
|
217
241
|
experimentalSizeReduction: buildArguments.experimentalSizeReduction,
|
|
218
242
|
newInstrumenter: buildArguments.newInstrumenter,
|
|
219
243
|
};
|
|
220
|
-
|
|
221
|
-
|
|
244
|
+
childLogger.info(`'instrumentForBrowsers' flag is on. Starting instrumentation. Instrumentation config: ${instrumentationConfig}`);
|
|
245
|
+
const callback = function (err, processedFiles) {
|
|
222
246
|
if (buildArguments.isDryRunMode) {
|
|
223
247
|
return resolve({ err: err, processedFiles: processedFiles });
|
|
224
248
|
}
|
|
225
249
|
else if (err) {
|
|
226
|
-
|
|
250
|
+
childLogger.info(`Finished the instrumentation with an error. Error: ${err}`);
|
|
227
251
|
reject(err);
|
|
228
252
|
}
|
|
229
253
|
else {
|
|
230
|
-
|
|
231
|
-
return resolve();
|
|
254
|
+
childLogger.info('Finished the instrumentation successfully');
|
|
255
|
+
return resolve(null);
|
|
232
256
|
}
|
|
233
257
|
};
|
|
234
|
-
runBrowserInstrumentation(
|
|
258
|
+
runBrowserInstrumentation(childLogger, instrumentationConfig, callback, slMapper);
|
|
235
259
|
});
|
|
236
260
|
return promise;
|
|
237
261
|
});
|
|
@@ -239,36 +263,36 @@ function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencie
|
|
|
239
263
|
return promiseChain;
|
|
240
264
|
}
|
|
241
265
|
function collectScmData(buildArguments, handlerParams, scmInstance) {
|
|
242
|
-
|
|
266
|
+
let promiseChain = Promise.resolve();
|
|
243
267
|
//2.1 Get repository url from the SCM
|
|
244
268
|
promiseChain = promiseChain.then(function () {
|
|
245
|
-
|
|
269
|
+
childLogger.info('Getting repository URL.');
|
|
246
270
|
return getRepositoryUrl(handlerParams, scmInstance);
|
|
247
271
|
});
|
|
248
272
|
//2.2 Get all contributors from the scm
|
|
249
273
|
if (buildArguments.sendContributors) {
|
|
250
274
|
promiseChain = promiseChain.then(function () {
|
|
251
|
-
|
|
275
|
+
childLogger.info('Getting contributors.');
|
|
252
276
|
return getContributors(handlerParams, scmInstance);
|
|
253
277
|
});
|
|
254
278
|
}
|
|
255
279
|
//2.3 Get branch history from the SCM
|
|
256
280
|
promiseChain = promiseChain.then(function () {
|
|
257
|
-
|
|
281
|
+
childLogger.info('Loading branch history.');
|
|
258
282
|
return loadBranchHistory(handlerParams, scmInstance);
|
|
259
283
|
});
|
|
260
284
|
//2.4 Get all commits effected each file
|
|
261
285
|
if (buildArguments.sendContributors) {
|
|
262
286
|
promiseChain = promiseChain.then(function (mapping) {
|
|
263
|
-
|
|
287
|
+
childLogger.info('Getting commits per file.');
|
|
264
288
|
return getCommitsPerFile(handlerParams, scmInstance);
|
|
265
289
|
});
|
|
266
290
|
}
|
|
267
291
|
//2.5 if commit was not specified, automatically detect it
|
|
268
292
|
if (!buildArguments.commit) {
|
|
269
293
|
promiseChain = promiseChain.then(function () {
|
|
270
|
-
|
|
271
|
-
return scmInstance.detectCommitVersion(handlerParams,
|
|
294
|
+
childLogger.info(`Couldn't find a 'commit' on the 'buildArguments'. Trying to detect the commit version.`);
|
|
295
|
+
return scmInstance.detectCommitVersion(handlerParams, childLogger).then(function (commit) {
|
|
272
296
|
if (commit) {
|
|
273
297
|
handlerParams.finalOutput.meta.commit = commit;
|
|
274
298
|
}
|
|
@@ -277,19 +301,19 @@ function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencie
|
|
|
277
301
|
}
|
|
278
302
|
//2.6 Find repository root directory
|
|
279
303
|
promiseChain = promiseChain.then(function () {
|
|
280
|
-
return scmInstance.getRootDirectory(handlerParams,
|
|
304
|
+
return scmInstance.getRootDirectory(handlerParams, childLogger).then(function (rootDir) {
|
|
281
305
|
handlerParams.scmRootDir = rootDir;
|
|
282
|
-
handlerParams.projectRoot = resolveProjectRoot(
|
|
306
|
+
handlerParams.projectRoot = resolveProjectRoot(childLogger, diagnostic, buildArguments.projectRoot, handlerParams.scmRootDir);
|
|
283
307
|
});
|
|
284
308
|
});
|
|
285
309
|
//2.6 Get list of all files in git or fs
|
|
286
310
|
promiseChain = promiseChain.then(function () {
|
|
287
|
-
return scmInstance.getFiles(handlerParams,
|
|
311
|
+
return scmInstance.getFiles(handlerParams, childLogger).then(function (scmFiles) {
|
|
288
312
|
if (scmFiles && Array.isArray(scmFiles)) {
|
|
289
|
-
return ScmFilesContainer.createWithFiles(
|
|
313
|
+
return scm_files_container_1.ScmFilesContainer.createWithFiles(childLogger, scmFiles);
|
|
290
314
|
}
|
|
291
315
|
else {
|
|
292
|
-
return FilesContainer.create(
|
|
316
|
+
return files_container_1.FilesContainer.create(childLogger, handlerParams.projectRoot, buildArguments.excludedFiles);
|
|
293
317
|
}
|
|
294
318
|
})
|
|
295
319
|
.then(filesContainer => {
|
|
@@ -298,112 +322,146 @@ function BuildDiffProcess(buildArgs, backendProxy, scmFactory, parsedDependencie
|
|
|
298
322
|
});
|
|
299
323
|
// Get additional git details, like current branch and open branches if additionalGitDetails is enabled
|
|
300
324
|
if (buildArguments.additionalGitDetails) {
|
|
301
|
-
handlerParams.finalOutput.meta.additionalGitDetails = {
|
|
325
|
+
handlerParams.finalOutput.meta.additionalGitDetails = {
|
|
326
|
+
currentBranch: null,
|
|
327
|
+
openBranches: null,
|
|
328
|
+
submodules: null,
|
|
329
|
+
};
|
|
302
330
|
promiseChain = promiseChain.then(function () {
|
|
303
|
-
return scmInstance.getCurrentGitBranch(handlerParams,
|
|
331
|
+
return scmInstance.getCurrentGitBranch(handlerParams, childLogger).then(function (currentBranch) {
|
|
304
332
|
handlerParams.finalOutput.meta.additionalGitDetails.currentBranch = currentBranch;
|
|
305
333
|
});
|
|
306
334
|
});
|
|
307
335
|
promiseChain = promiseChain.then(function () {
|
|
308
|
-
return scmInstance.getOpenGitBranches(handlerParams,
|
|
336
|
+
return scmInstance.getOpenGitBranches(handlerParams, childLogger).then(function (openBranches) {
|
|
309
337
|
handlerParams.finalOutput.meta.additionalGitDetails.openBranches = openBranches;
|
|
310
338
|
});
|
|
311
339
|
});
|
|
312
340
|
// Check if workflow includes git submodules
|
|
313
341
|
promiseChain = promiseChain.then(function () {
|
|
314
|
-
return scmInstance.getGitSubmodules(handlerParams,
|
|
342
|
+
return scmInstance.getGitSubmodules(handlerParams, childLogger).then(function (submodules) {
|
|
315
343
|
handlerParams.finalOutput.meta.additionalGitDetails.submodules = submodules;
|
|
316
344
|
});
|
|
317
345
|
});
|
|
318
346
|
}
|
|
319
347
|
return promiseChain;
|
|
320
348
|
}
|
|
349
|
+
function submitBuildMapping(buildArguments, finalOutput) {
|
|
350
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
351
|
+
if (!buildArguments.partialBuildMapping || buildArguments.partialBuildMapping === 0) {
|
|
352
|
+
return backendProxy.submitBuildMapping(finalOutput);
|
|
353
|
+
}
|
|
354
|
+
const startTime = (0, system_date_1.getSystemDate)();
|
|
355
|
+
const chunkSize = buildArguments.partialBuildMapping;
|
|
356
|
+
const files = clone(finalOutput.files);
|
|
357
|
+
const staticPart = clone(finalOutput);
|
|
358
|
+
staticPart.files = [];
|
|
359
|
+
let partNumber = 1;
|
|
360
|
+
for (let i = 0; i < files.length; i += chunkSize, partNumber += 1) {
|
|
361
|
+
const filesToSend = files.slice(i, i + chunkSize);
|
|
362
|
+
const chunk = Object.assign(Object.assign({}, staticPart), { files: filesToSend });
|
|
363
|
+
chunk.meta.partId = partNumber;
|
|
364
|
+
yield backendProxy.submitPartialBuildMapping(chunk, buildArguments.agentId, buildArguments.buildSessionId, partNumber.toString());
|
|
365
|
+
}
|
|
366
|
+
const endTime = (0, system_date_1.getSystemDate)();
|
|
367
|
+
return backendProxy.submitBuildMappingEnd({
|
|
368
|
+
agentId: buildArguments.agentId,
|
|
369
|
+
status: {
|
|
370
|
+
success: true,
|
|
371
|
+
message: 'success',
|
|
372
|
+
duration: endTime.getTime() - startTime.getTime(),
|
|
373
|
+
},
|
|
374
|
+
labId: buildArguments.labId,
|
|
375
|
+
partsCount: partNumber - 1,
|
|
376
|
+
}, buildArguments.buildSessionId);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
321
379
|
this.run = function run(buildArguments) {
|
|
322
380
|
return createBuildDiffPromiseChain(buildArguments);
|
|
323
381
|
};
|
|
324
|
-
function runBrowserInstrumentation(
|
|
325
|
-
|
|
382
|
+
function runBrowserInstrumentation(logger, instrumentationConfig, callback, slMapper) {
|
|
383
|
+
logger.info('Running browser instrumentation.');
|
|
326
384
|
instrumentationConfig.extensionsToInstrument = dvr.getFileExtensions();
|
|
327
|
-
|
|
385
|
+
const bi = new BrowserInstrumenter(instrumentationConfig, logger, slMapper);
|
|
328
386
|
bi.instrument(callback);
|
|
329
387
|
}
|
|
330
388
|
function loadBranchHistory(handlerParams, scmInstance) {
|
|
331
|
-
return scmInstance.getBranchHistory(handlerParams,
|
|
389
|
+
return scmInstance.getBranchHistory(handlerParams, childLogger).then(function (gitLog) {
|
|
332
390
|
if (gitLog && gitLog.commitHistory && gitLog.commitHistory.length && gitLog.commitLog && gitLog.commitLog.length) {
|
|
333
|
-
|
|
391
|
+
childLogger.info('Branch history loaded (' + gitLog.commitHistory.length + ' commits)');
|
|
334
392
|
handlerParams.finalOutput.meta.history = gitLog.commitHistory;
|
|
335
393
|
handlerParams.finalOutput.meta.commitLog = gitLog.commitLog;
|
|
336
394
|
}
|
|
337
395
|
else {
|
|
338
|
-
logBranchHistoryNotFound(gitLog,
|
|
396
|
+
logBranchHistoryNotFound(gitLog, childLogger);
|
|
339
397
|
}
|
|
340
|
-
return loadCommitIndexMap(gitLog, handlerParams,
|
|
398
|
+
return loadCommitIndexMap(gitLog, handlerParams, childLogger);
|
|
341
399
|
});
|
|
342
400
|
}
|
|
343
401
|
function getRepositoryUrl(handlerParams, scmInstance) {
|
|
344
|
-
return scmInstance.getRepositoryUrl(handlerParams,
|
|
402
|
+
return scmInstance.getRepositoryUrl(handlerParams, childLogger).then(function (repositoryUrl) {
|
|
345
403
|
if (repositoryUrl) {
|
|
346
|
-
|
|
404
|
+
childLogger.info('Repository Url loaded (' + repositoryUrl + ')');
|
|
347
405
|
handlerParams.finalOutput.meta.repositoryUrl = repositoryUrl;
|
|
348
406
|
}
|
|
349
407
|
return repositoryUrl;
|
|
350
408
|
});
|
|
351
409
|
}
|
|
352
410
|
function getContributors(handlerParams, scmInstance) {
|
|
353
|
-
return scmInstance.getContributors(handlerParams,
|
|
411
|
+
return scmInstance.getContributors(handlerParams, childLogger).then(function (contributorsLog) {
|
|
354
412
|
if (contributorsLog && contributorsLog.contributors && contributorsLog.emailToIndexMap) {
|
|
355
|
-
|
|
413
|
+
childLogger.info('Contributors list loaded (' + contributorsLog.contributors.length + ' contributors)');
|
|
356
414
|
handlerParams.finalOutput.meta.contributors = contributorsLog.contributors;
|
|
357
415
|
handlerParams.emailToIndexMap = contributorsLog.emailToIndexMap;
|
|
358
416
|
}
|
|
359
417
|
else {
|
|
360
|
-
logContributorsNotFound(contributorsLog,
|
|
418
|
+
logContributorsNotFound(contributorsLog, childLogger);
|
|
361
419
|
}
|
|
362
420
|
return contributorsLog;
|
|
363
421
|
});
|
|
364
422
|
}
|
|
365
423
|
function getCommitsPerFile(handlerParams, scmInstance) {
|
|
366
|
-
return scmInstance.getCommitsPerFile(handlerParams,
|
|
424
|
+
return scmInstance.getCommitsPerFile(handlerParams, childLogger).then(function (fileToCommitsMap) {
|
|
367
425
|
if (fileToCommitsMap != null) {
|
|
368
|
-
|
|
426
|
+
childLogger.info('File commit map loaded (' + Object.keys(fileToCommitsMap).length + ' records)');
|
|
369
427
|
handlerParams.fileToCommitsMap = fileToCommitsMap;
|
|
370
428
|
}
|
|
371
429
|
else {
|
|
372
|
-
|
|
430
|
+
childLogger.error('Commits map is null or undefined.');
|
|
373
431
|
}
|
|
374
432
|
return fileToCommitsMap;
|
|
375
433
|
});
|
|
376
434
|
}
|
|
377
435
|
}
|
|
378
|
-
|
|
379
|
-
|
|
436
|
+
exports.BuildDiffProcess = BuildDiffProcess;
|
|
437
|
+
function logContributorsNotFound(contributorsLog, logger) {
|
|
438
|
+
const fieldsMap = {
|
|
380
439
|
contributorsLog: !contributorsLog,
|
|
381
440
|
contributors: contributorsLog && !contributorsLog.contributors,
|
|
382
441
|
emailToIndexMap: contributorsLog && !contributorsLog.emailToIndexMap
|
|
383
442
|
};
|
|
384
|
-
|
|
385
|
-
|
|
443
|
+
const missing = utils.getMissingProperties(fieldsMap);
|
|
444
|
+
logger.error(`Contributors list not loaded, missing fields: ${missing}`);
|
|
386
445
|
}
|
|
387
|
-
function logBranchHistoryNotFound(gitLog,
|
|
388
|
-
|
|
446
|
+
function logBranchHistoryNotFound(gitLog, logger) {
|
|
447
|
+
const fieldsMap = {
|
|
389
448
|
gitLog: !gitLog,
|
|
390
449
|
commitHistory: gitLog && !gitLog.commitHistory,
|
|
391
450
|
commitHistoryLength: gitLog && gitLog.commitHistory && !gitLog.commitHistory.length,
|
|
392
451
|
commitLog: gitLog && !gitLog.commitLog,
|
|
393
452
|
commitLogLength: gitLog && gitLog.commitLog && !gitLog.commitLog.length
|
|
394
453
|
};
|
|
395
|
-
|
|
396
|
-
|
|
454
|
+
const missing = utils.getMissingProperties(fieldsMap);
|
|
455
|
+
logger.error(`Branch history not loaded, missing fields: ${missing}`);
|
|
397
456
|
}
|
|
398
457
|
function clone(o) {
|
|
399
|
-
//if (!o) return o; //Unreachable
|
|
400
458
|
return JSON.parse(JSON.stringify(o));
|
|
401
459
|
}
|
|
402
|
-
|
|
403
|
-
|
|
460
|
+
function getProcessedFiles(buildArguments, logger) {
|
|
461
|
+
const folderToScan = buildArguments.workspacepath;
|
|
404
462
|
return fileAndFolderUtils.scanDirRecursively(folderToScan, logger);
|
|
405
|
-
}
|
|
406
|
-
|
|
463
|
+
}
|
|
464
|
+
function loadCommitIndexMap(gitLog, handlerParams, logger) {
|
|
407
465
|
if (!handlerParams.buildArguments.sendContributors) {
|
|
408
466
|
return gitLog;
|
|
409
467
|
}
|
|
@@ -411,23 +469,22 @@ var loadCommitIndexMap = function (gitLog, handlerParams, log) {
|
|
|
411
469
|
handlerParams.commitToIndexMap = gitLog.commitToIndexMap;
|
|
412
470
|
}
|
|
413
471
|
else {
|
|
414
|
-
|
|
472
|
+
logger.error('Commit log index map not loaded');
|
|
415
473
|
}
|
|
416
474
|
return gitLog;
|
|
417
|
-
}
|
|
475
|
+
}
|
|
418
476
|
function createMetaTag(buildArguments) {
|
|
419
477
|
return {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
"environment": {
|
|
478
|
+
generated: (0, system_date_1.getSystemDate)().valueOf(),
|
|
479
|
+
build: buildArguments.build,
|
|
480
|
+
commit: buildArguments.commit,
|
|
481
|
+
customerId: buildArguments.customerId,
|
|
482
|
+
appName: buildArguments.appname,
|
|
483
|
+
technology: 'nodejs',
|
|
484
|
+
branch: buildArguments.branch,
|
|
485
|
+
environment: {
|
|
429
486
|
agentVersion: version,
|
|
430
|
-
agentType:
|
|
487
|
+
agentType: 'nodeJsBuildScanner',
|
|
431
488
|
processArgv: process.argv,
|
|
432
489
|
machineName: os.hostname(),
|
|
433
490
|
platform: os.platform(),
|
|
@@ -439,16 +496,17 @@ function createMetaTag(buildArguments) {
|
|
|
439
496
|
dependencies: clone(process.versions),
|
|
440
497
|
runtime: process.version
|
|
441
498
|
},
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
499
|
+
authors: buildArguments.author,
|
|
500
|
+
logsUrl: buildArguments.logsUrl,
|
|
501
|
+
jobName: buildArguments.jobName,
|
|
502
|
+
moduleName: buildArguments.uniqueModuleId,
|
|
503
|
+
uniqueModuleId: buildArguments.uniqueModuleId,
|
|
504
|
+
configurationData: buildArguments,
|
|
505
|
+
scmProvider: buildArguments.scmProvider,
|
|
506
|
+
scmVersion: buildArguments.scmVersion,
|
|
507
|
+
scmBaseUrl: buildArguments.scmBaseUrl,
|
|
508
|
+
buildSessionId: buildArguments.buildSessionId,
|
|
509
|
+
agentId: buildArguments.agentId,
|
|
452
510
|
};
|
|
453
511
|
}
|
|
454
512
|
function countElements(files) {
|
|
@@ -476,20 +534,19 @@ function resolveProjectRoot(logger, diagnosticCollector, cliOption, scmRootDir)
|
|
|
476
534
|
// relative path should be resolved first
|
|
477
535
|
projectRoot = path.resolve(process.cwd(), normalizedRoot);
|
|
478
536
|
}
|
|
479
|
-
diagnosticCollector.projectRootResolved(projectRoot,
|
|
537
|
+
diagnosticCollector.projectRootResolved(projectRoot, contracts_1.ProjectRootSource.COMMAND_ARG);
|
|
480
538
|
logger.info(`Project root set to '${projectRoot}' from 'sourceRoot'`);
|
|
481
539
|
}
|
|
482
540
|
else if (scmRootDir) {
|
|
483
541
|
projectRoot = scmRootDir;
|
|
484
|
-
diagnosticCollector.projectRootResolved(projectRoot,
|
|
542
|
+
diagnosticCollector.projectRootResolved(projectRoot, contracts_1.ProjectRootSource.SCM);
|
|
485
543
|
logger.info(`Project root set to '${projectRoot}' same as git root`);
|
|
486
544
|
}
|
|
487
545
|
else {
|
|
488
546
|
projectRoot = process.cwd();
|
|
489
|
-
diagnosticCollector.projectRootResolved(projectRoot,
|
|
547
|
+
diagnosticCollector.projectRootResolved(projectRoot, contracts_1.ProjectRootSource.CWD);
|
|
490
548
|
logger.info(`Project root set to '${projectRoot}' same as CWD`);
|
|
491
549
|
}
|
|
492
550
|
return utils.adjustPathSlashes(projectRoot);
|
|
493
551
|
}
|
|
494
|
-
module.exports.BuildDiffProcess = BuildDiffProcess;
|
|
495
552
|
//# sourceMappingURL=build-diff-process.js.map
|