Skip to content

Commit 996138b

Browse files
Merge branch 'master' into add_decompress_support
2 parents e728b2d + e9aeb7d commit 996138b

File tree

12 files changed

+2316
-46
lines changed

12 files changed

+2316
-46
lines changed

bin/commands/runs.js

Lines changed: 74 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ const archiver = require("../helpers/archiver"),
2323
packageDiff = require('../helpers/package-diff');
2424
const { getStackTraceUrl } = require('../helpers/sync/syncSpecsLogs');
2525

26+
const {
27+
launchTestSession,
28+
setTestObservabilityFlags,
29+
runCypressTestsLocally,
30+
printBuildLink
31+
} = require('../testObservability/helper/helper');
32+
2633
module.exports = function run(args, rawArgs) {
2734

2835
markBlockStart('preBuild');
@@ -45,6 +52,12 @@ module.exports = function run(args, rawArgs) {
4552
logger.debug('Completed browserstack.json validation');
4653
markBlockStart('setConfig');
4754
logger.debug('Started setting the configs');
55+
56+
/*
57+
Set testObservability & browserstackAutomation flags
58+
*/
59+
const [isTestObservabilitySession, isBrowserstackInfra] = setTestObservabilityFlags(bsConfig);
60+
4861
utils.setUsageReportingFlag(bsConfig, args.disableUsageReporting);
4962

5063
utils.setDefaults(bsConfig, args);
@@ -55,80 +68,97 @@ module.exports = function run(args, rawArgs) {
5568
// accept the access key from command line or env variable if provided
5669
utils.setAccessKey(bsConfig, args);
5770

58-
let buildReportData = await getInitialDetails(bsConfig, args, rawArgs);
71+
let buildReportData = !isBrowserstackInfra ? null : await getInitialDetails(bsConfig, args, rawArgs);
5972

6073
// accept the build name from command line if provided
6174
utils.setBuildName(bsConfig, args);
6275

6376
// set cypress config filename
6477
utils.setCypressConfigFilename(bsConfig, args);
78+
79+
if(isBrowserstackInfra) {
80+
// set cypress test suite type
81+
utils.setCypressTestSuiteType(bsConfig);
6582

66-
// set cypress test suite type
67-
utils.setCypressTestSuiteType(bsConfig);
68-
69-
// set cypress geo location
70-
utils.setGeolocation(bsConfig, args);
71-
72-
// set timezone
73-
utils.setTimezone(bsConfig, args);
83+
// set cypress geo location
84+
utils.setGeolocation(bsConfig, args);
7485

75-
// set spec timeout
76-
utils.setSpecTimeout(bsConfig, args);
86+
// set timezone
87+
utils.setTimezone(bsConfig, args);
7788

89+
// set spec timeout
90+
utils.setSpecTimeout(bsConfig, args);
91+
}
92+
7893
// accept the specs list from command line if provided
7994
utils.setUserSpecs(bsConfig, args);
8095

8196
// accept the env list from command line and set it
8297
utils.setTestEnvs(bsConfig, args);
8398

99+
// set build tag caps
100+
utils.setBuildTags(bsConfig, args);
101+
102+
/*
103+
Send build start to Observability
104+
*/
105+
if(isTestObservabilitySession) await launchTestSession(bsConfig, bsConfigPath);
106+
84107
// accept the system env list from bsconf and set it
85108
utils.setSystemEnvs(bsConfig);
86109

87-
//accept the local from env variable if provided
88-
utils.setLocal(bsConfig, args);
110+
if(isBrowserstackInfra) {
111+
//accept the local from env variable if provided
112+
utils.setLocal(bsConfig, args);
89113

90-
//set network logs
91-
utils.setNetworkLogs(bsConfig);
114+
//set network logs
115+
utils.setNetworkLogs(bsConfig);
92116

93-
// set Local Mode (on-demand/ always-on)
94-
utils.setLocalMode(bsConfig, args);
117+
// set Local Mode (on-demand/ always-on)
118+
utils.setLocalMode(bsConfig, args);
95119

96-
//accept the local identifier from env variable if provided
97-
utils.setLocalIdentifier(bsConfig, args);
120+
//accept the local identifier from env variable if provided
121+
utils.setLocalIdentifier(bsConfig, args);
98122

99-
// set Local Config File
100-
utils.setLocalConfigFile(bsConfig, args);
123+
// set Local Config File
124+
utils.setLocalConfigFile(bsConfig, args);
101125

102-
// run test in headed mode
103-
utils.setHeaded(bsConfig, args);
126+
// run test in headed mode
127+
utils.setHeaded(bsConfig, args);
104128

105-
// set the no-wrap
106-
utils.setNoWrap(bsConfig, args);
129+
// set the no-wrap
130+
utils.setNoWrap(bsConfig, args);
107131

108-
// add cypress dependency if missing
109-
utils.setCypressNpmDependency(bsConfig);
132+
// add cypress dependency if missing
133+
utils.setCypressNpmDependency(bsConfig);
134+
}
110135

111-
const { packagesInstalled } = await packageInstaller.packageSetupAndInstaller(bsConfig, config.packageDirName, {markBlockStart, markBlockEnd});
136+
const { packagesInstalled } = !isBrowserstackInfra ? false : await packageInstaller.packageSetupAndInstaller(bsConfig, config.packageDirName, {markBlockStart, markBlockEnd});
112137

113-
// set build tag caps
114-
utils.setBuildTags(bsConfig, args);
115-
// set node version
116-
utils.setNodeVersion(bsConfig, args);
138+
if(isBrowserstackInfra) {
139+
// set node version
140+
utils.setNodeVersion(bsConfig, args);
141+
142+
//set browsers
143+
await utils.setBrowsers(bsConfig, args);
117144

118-
//set browsers
119-
await utils.setBrowsers(bsConfig, args);
145+
//set config (--config)
146+
utils.setConfig(bsConfig, args);
120147

121-
//set config (--config)
122-
utils.setConfig(bsConfig, args);
148+
// set sync/async mode (--async/--sync)
149+
utils.setCLIMode(bsConfig, args);
123150

124-
// set sync/async mode (--async/--sync)
125-
utils.setCLIMode(bsConfig, args);
151+
// set other cypress configs e.g. reporter and reporter-options
152+
utils.setOtherConfigs(bsConfig, args);
153+
}
126154

127-
// set other cypress configs e.g. reporter and reporter-options
128-
utils.setOtherConfigs(bsConfig, args);
129155
markBlockEnd('setConfig');
130156
logger.debug("Completed setting the configs");
131157

158+
if(!isBrowserstackInfra) {
159+
return runCypressTestsLocally(bsConfig, args, rawArgs);
160+
}
161+
132162
// Validate browserstack.json values and parallels specified via arguments
133163
markBlockStart('validateConfig');
134164
logger.debug("Started configs validation");
@@ -287,7 +317,10 @@ module.exports = function run(args, rawArgs) {
287317

288318
logger.info(message);
289319
logger.info(dashboardLink);
290-
if(!args.sync) logger.info(Constants.userMessages.EXIT_SYNC_CLI_MESSAGE.replace("<build-id>",data.build_id));
320+
if(!args.sync) {
321+
logger.info(Constants.userMessages.EXIT_SYNC_CLI_MESSAGE.replace("<build-id>",data.build_id));
322+
printBuildLink(false);
323+
}
291324
let dataToSend = {
292325
time_components: getTimeComponents(),
293326
unique_id: utils.generateUniqueHash(),

bin/helpers/utils.js

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ const usageReporting = require("./usageReporting"),
2121
fileHelpers = require("./fileHelpers"),
2222
config = require("../helpers/config"),
2323
pkg = require('../../package.json'),
24-
transports = require('./logger').transports;
24+
transports = require('./logger').transports,
25+
{ findGitConfig, printBuildLink, isTestObservabilitySession, isBrowserstackInfra, shouldReRunObservabilityTests } = require('../testObservability/helper/helper'),
26+
{ OBSERVABILITY_ENV_VARS, TEST_OBSERVABILITY_REPORTER } = require('../testObservability/helper/constants');
2527

2628
const request = require('request');
2729

@@ -226,7 +228,7 @@ exports.setDefaults = (bsConfig, args) => {
226228
}
227229

228230
// setting cache_dependencies to true if not present
229-
if (this.isUndefined(bsConfig.run_settings.cache_dependencies)) {
231+
if (bsConfig.run_settings && this.isUndefined(bsConfig.run_settings.cache_dependencies)) {
230232
bsConfig.run_settings.cache_dependencies = true;
231233
}
232234

@@ -478,6 +480,11 @@ exports.setNodeVersion = (bsConfig, args) => {
478480
// specs can be passed via command line args as a string
479481
// command line args takes precedence over config
480482
exports.setUserSpecs = (bsConfig, args) => {
483+
if(isBrowserstackInfra() && isTestObservabilitySession() && shouldReRunObservabilityTests()) {
484+
bsConfig.run_settings.specs = process.env.BROWSERSTACK_RERUN_TESTS;
485+
return;
486+
}
487+
481488
let bsConfigSpecs = bsConfig.run_settings.specs;
482489

483490
if (!this.isUndefined(args.specs)) {
@@ -551,6 +558,19 @@ exports.setSystemEnvs = (bsConfig) => {
551558
});
552559
}
553560

561+
try {
562+
OBSERVABILITY_ENV_VARS.forEach(key => {
563+
envKeys[key] = process.env[key];
564+
});
565+
566+
let gitConfigPath = findGitConfig(process.cwd());
567+
if(!isBrowserstackInfra()) process.env.OBSERVABILITY_GIT_CONFIG_PATH_LOCAL = gitConfigPath;
568+
if(gitConfigPath) {
569+
const relativePathFromGitConfig = path.relative(gitConfigPath, process.cwd());
570+
envKeys["OBSERVABILITY_GIT_CONFIG_PATH"] = relativePathFromGitConfig ? relativePathFromGitConfig : 'DEFAULT';
571+
}
572+
} catch(e){}
573+
554574
if (Object.keys(envKeys).length === 0) {
555575
bsConfig.run_settings.system_env_vars = null;
556576
} else {
@@ -1123,7 +1143,11 @@ exports.handleSyncExit = (exitCode, dashboard_url) => {
11231143
syncCliLogger.info(Constants.userMessages.BUILD_REPORT_MESSAGE);
11241144
syncCliLogger.info(dashboard_url);
11251145
}
1126-
process.exit(exitCode);
1146+
if(isTestObservabilitySession()) {
1147+
printBuildLink(true, exitCode);
1148+
} else {
1149+
process.exit(exitCode);
1150+
}
11271151
}
11281152

11291153
exports.getNetworkErrorMessage = (dashboard_url) => {
@@ -1223,6 +1247,12 @@ exports.setConfig = (bsConfig, args) => {
12231247

12241248
// blindly send other passed configs with run_settings and handle at backend
12251249
exports.setOtherConfigs = (bsConfig, args) => {
1250+
if(isTestObservabilitySession() && process.env.BS_TESTOPS_JWT) {
1251+
bsConfig["run_settings"]["reporter"] = TEST_OBSERVABILITY_REPORTER;
1252+
return;
1253+
}
1254+
1255+
/* Non Observability use-case */
12261256
if (!this.isUndefined(args.reporter)) {
12271257
bsConfig["run_settings"]["reporter"] = args.reporter;
12281258
logger.debug(`reporter set to ${args.reporter}`);
@@ -1382,6 +1412,7 @@ async function processExitHandler(exitData){
13821412
logger.warn(Constants.userMessages.PROCESS_KILL_MESSAGE);
13831413
await this.stopBrowserStackBuild(exitData.bsConfig, exitData.args, exitData.buildId, null, exitData.buildReportData);
13841414
await this.stopLocalBinary(exitData.bsConfig, exitData.bsLocalInstance, exitData.args, null, exitData.buildReportData);
1415+
await printBuildLink(true);
13851416
process.exit(0);
13861417
}
13871418

0 commit comments

Comments
 (0)