Skip to content

Commit 7944e13

Browse files
author
Archish Thakkar
authored
Merge pull request #660 from browserstack/OBS_1871_1867
O11y - Handle edge cases for detecting package version
2 parents 6ac4c2d + 0694b16 commit 7944e13

File tree

2 files changed

+83
-9
lines changed

2 files changed

+83
-9
lines changed

bin/testObservability/crashReporter/index.js

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const http = require('http');
55
const https = require('https');
66

77
const logger = require("../../helpers/logger").winstonLogger;
8+
const utils = require('../../helpers/utils');
89

910
const { API_URL, consoleHolder } = require('../helper/constants');
1011

@@ -47,9 +48,43 @@ exports.requireModule = (module, internal = false) => {
4748
return require(local_path);
4849
}
4950

50-
getPackageVersion = (package_) => {
51+
getPackageVersion = (package_, bsConfig = null) => {
5152
if(packages[package_]) return packages[package_];
52-
return packages[package_] = this.requireModule(`${package_}/package.json`).version;
53+
let packageVersion;
54+
/* Try to find version from module path */
55+
try {
56+
packages[package_] = this.requireModule(`${package_}/package.json`).version;
57+
logger.info(`Getting ${package_} package version from module path = ${packages[package_]}`);
58+
packageVersion = packages[package_];
59+
} catch(e) {
60+
debug(`Unable to find package ${package_} at module path with error ${e}`);
61+
}
62+
63+
/* Read package version from npm_dependencies in browserstack.json file if present */
64+
if(utils.isUndefined(packageVersion) && bsConfig && (process.env.BROWSERSTACK_AUTOMATION == "true" || process.env.BROWSERSTACK_AUTOMATION == "1")) {
65+
const runSettings = bsConfig.run_settings;
66+
if (runSettings && runSettings.npm_dependencies !== undefined &&
67+
Object.keys(runSettings.npm_dependencies).length !== 0 &&
68+
typeof runSettings.npm_dependencies === 'object') {
69+
if (package_ in runSettings.npm_dependencies) {
70+
packages[package_] = runSettings.npm_dependencies[package_];
71+
logger.info(`Getting ${package_} package version from browserstack.json = ${packages[package_]}`);
72+
packageVersion = packages[package_];
73+
}
74+
}
75+
}
76+
77+
/* Read package version from project's package.json if present */
78+
const packageJSONPath = path.join(process.cwd(), 'package.json');
79+
if(utils.isUndefined(packageVersion) && fs.existsSync(packageJSONPath)) {
80+
const packageJSONContents = require(packageJSONPath);
81+
if(packageJSONContents.devDependencies && !utils.isUndefined(packageJSONContents.devDependencies[package_])) packages[package_] = packageJSONContents.devDependencies[package_];
82+
if(packageJSONContents.dependencies && !utils.isUndefined(packageJSONContents.dependencies[package_])) packages[package_] = packageJSONContents.dependencies[package_];
83+
logger.info(`Getting ${package_} package version from package.json = ${packages[package_]}`);
84+
packageVersion = packages[package_];
85+
}
86+
87+
return packageVersion;
5388
}
5489

5590
getAgentVersion = () => {
@@ -96,7 +131,7 @@ class CrashReporter {
96131
hashed_id: process.env.BS_TESTOPS_BUILD_HASHED_ID,
97132
observability_version: {
98133
frameworkName: 'Cypress',
99-
frameworkVersion: getPackageVersion('cypress'),
134+
frameworkVersion: getPackageVersion('cypress', this.userConfigForReporting.browserstackConfigFile),
100135
sdkVersion: getAgentVersion()
101136
},
102137
exception: {

bin/testObservability/helper/helper.js

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -351,9 +351,43 @@ const getCiInfo = () => {
351351

352352
let packages = {};
353353

354-
exports.getPackageVersion = (package_) => {
354+
exports.getPackageVersion = (package_, bsConfig = null) => {
355355
if(packages[package_]) return packages[package_];
356-
return packages[package_] = this.requireModule(`${package_}/package.json`).version;
356+
let packageVersion;
357+
/* Try to find version from module path */
358+
try {
359+
packages[package_] = this.requireModule(`${package_}/package.json`).version;
360+
logger.info(`Getting ${package_} package version from module path = ${packages[package_]}`);
361+
packageVersion = packages[package_];
362+
} catch(e) {
363+
exports.debug(`Unable to find package ${package_} at module path with error ${e}`);
364+
}
365+
366+
/* Read package version from npm_dependencies in browserstack.json file if present */
367+
if(utils.isUndefined(packageVersion) && bsConfig && (process.env.BROWSERSTACK_AUTOMATION == "true" || process.env.BROWSERSTACK_AUTOMATION == "1")) {
368+
const runSettings = bsConfig.run_settings;
369+
if (runSettings && runSettings.npm_dependencies !== undefined &&
370+
Object.keys(runSettings.npm_dependencies).length !== 0 &&
371+
typeof runSettings.npm_dependencies === 'object') {
372+
if (package_ in runSettings.npm_dependencies) {
373+
packages[package_] = runSettings.npm_dependencies[package_];
374+
logger.info(`Getting ${package_} package version from browserstack.json = ${packages[package_]}`);
375+
packageVersion = packages[package_];
376+
}
377+
}
378+
}
379+
380+
/* Read package version from project's package.json if present */
381+
const packageJSONPath = path.join(process.cwd(), 'package.json');
382+
if(utils.isUndefined(packageVersion) && fs.existsSync(packageJSONPath)) {
383+
const packageJSONContents = require(packageJSONPath);
384+
if(packageJSONContents.devDependencies && !utils.isUndefined(packageJSONContents.devDependencies[package_])) packages[package_] = packageJSONContents.devDependencies[package_];
385+
if(packageJSONContents.dependencies && !utils.isUndefined(packageJSONContents.dependencies[package_])) packages[package_] = packageJSONContents.dependencies[package_];
386+
logger.info(`Getting ${package_} package version from package.json = ${packages[package_]}`);
387+
packageVersion = packages[package_];
388+
}
389+
390+
return packageVersion;
357391
}
358392

359393
exports.getAgentVersion = () => {
@@ -452,9 +486,14 @@ const setBrowserstackCypressCliDependency = (bsConfig) => {
452486
}
453487

454488
const getCypressConfigFileContent = (bsConfig, cypressConfigPath) => {
455-
const cypressConfigFile = require(path.resolve(bsConfig ? bsConfig.run_settings.cypress_config_file : cypressConfigPath));
456-
if(bsConfig) process.env.OBS_CRASH_REPORTING_CYPRESS_CONFIG_PATH = bsConfig.run_settings.cypress_config_file;
457-
return cypressConfigFile;
489+
try {
490+
const cypressConfigFile = require(path.resolve(bsConfig ? bsConfig.run_settings.cypress_config_file : cypressConfigPath));
491+
if(bsConfig) process.env.OBS_CRASH_REPORTING_CYPRESS_CONFIG_PATH = bsConfig.run_settings.cypress_config_file;
492+
return cypressConfigFile;
493+
} catch(e) {
494+
exports.debug(`Encountered an error when trying to import Cypress Config File ${e}`);
495+
return {};
496+
}
458497
}
459498

460499
exports.setCrashReportingConfigFromReporter = (credentialsStr, bsConfigPath, cypressConfigPath) => {
@@ -530,7 +569,7 @@ exports.launchTestSession = async (user_config, bsConfigPath) => {
530569
'version_control': await getGitMetaData(),
531570
'observability_version': {
532571
frameworkName: "Cypress",
533-
frameworkVersion: exports.getPackageVersion('cypress'),
572+
frameworkVersion: exports.getPackageVersion('cypress', user_config),
534573
sdkVersion: exports.getAgentVersion()
535574
}
536575
};

0 commit comments

Comments
 (0)