@wdio/browserstack-service 8.48.0 → 8.49.0
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/build/Percy/Percy-Handler.js +1 -0
- package/build/Percy/Percy-Handler.js.map +1 -0
- package/build/Percy/Percy.js +1 -0
- package/build/Percy/Percy.js.map +1 -0
- package/build/Percy/PercyBinary.js +1 -0
- package/build/Percy/PercyBinary.js.map +1 -0
- package/build/Percy/PercyCaptureMap.js +1 -0
- package/build/Percy/PercyCaptureMap.js.map +1 -0
- package/build/Percy/PercyHelper.d.ts.map +1 -1
- package/build/Percy/PercyHelper.js +1 -0
- package/build/Percy/PercyHelper.js.map +1 -0
- package/build/Percy/PercyLogger.js +1 -0
- package/build/Percy/PercyLogger.js.map +1 -0
- package/build/Percy/PercySDK.js +1 -0
- package/build/Percy/PercySDK.js.map +1 -0
- package/build/accessibility-handler.d.ts +1 -1
- package/build/accessibility-handler.d.ts.map +1 -1
- package/build/accessibility-handler.js +14 -11
- package/build/accessibility-handler.js.map +1 -0
- package/build/ai-handler.d.ts.map +1 -1
- package/build/ai-handler.js +12 -0
- package/build/ai-handler.js.map +1 -0
- package/build/bstackLogger.js +1 -0
- package/build/bstackLogger.js.map +1 -0
- package/build/cleanup.js +1 -0
- package/build/cleanup.js.map +1 -0
- package/build/cli/apiUtils.js +1 -0
- package/build/cli/apiUtils.js.map +1 -0
- package/build/cli/cliLogger.d.ts +1 -0
- package/build/cli/cliLogger.d.ts.map +1 -1
- package/build/cli/cliLogger.js +24 -12
- package/build/cli/cliLogger.js.map +1 -0
- package/build/cli/cliUtils.d.ts +18 -0
- package/build/cli/cliUtils.d.ts.map +1 -1
- package/build/cli/cliUtils.js +30 -0
- package/build/cli/cliUtils.js.map +1 -0
- package/build/cli/eventDispatcher.js +1 -0
- package/build/cli/eventDispatcher.js.map +1 -0
- package/build/cli/frameworks/automationFramework.js +1 -0
- package/build/cli/frameworks/automationFramework.js.map +1 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.js +1 -0
- package/build/cli/frameworks/constants/automationFrameworkConstants.js.map +1 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.js +1 -0
- package/build/cli/frameworks/constants/testFrameworkConstants.js.map +1 -0
- package/build/cli/frameworks/testFramework.js +1 -0
- package/build/cli/frameworks/testFramework.js.map +1 -0
- package/build/cli/frameworks/wdioAutomationFramework.js +1 -0
- package/build/cli/frameworks/wdioAutomationFramework.js.map +1 -0
- package/build/cli/frameworks/wdioMochaTestFramework.d.ts.map +1 -1
- package/build/cli/frameworks/wdioMochaTestFramework.js +5 -2
- package/build/cli/frameworks/wdioMochaTestFramework.js.map +1 -0
- package/build/cli/grpcClient.d.ts +21 -5
- package/build/cli/grpcClient.d.ts.map +1 -1
- package/build/cli/grpcClient.js +135 -22
- package/build/cli/grpcClient.js.map +1 -0
- package/build/cli/index.d.ts +3 -1
- package/build/cli/index.d.ts.map +1 -1
- package/build/cli/index.js +53 -4
- package/build/cli/index.js.map +1 -0
- package/build/cli/instances/automationFrameworkInstance.js +1 -0
- package/build/cli/instances/automationFrameworkInstance.js.map +1 -0
- package/build/cli/instances/testFrameworkInstance.js +1 -0
- package/build/cli/instances/testFrameworkInstance.js.map +1 -0
- package/build/cli/instances/trackedContext.js +1 -0
- package/build/cli/instances/trackedContext.js.map +1 -0
- package/build/cli/instances/trackedInstance.js +1 -0
- package/build/cli/instances/trackedInstance.js.map +1 -0
- package/build/cli/modules/accessibilityModule.d.ts +4 -1
- package/build/cli/modules/accessibilityModule.d.ts.map +1 -1
- package/build/cli/modules/accessibilityModule.js +76 -10
- package/build/cli/modules/accessibilityModule.js.map +1 -0
- package/build/cli/modules/automateModule.js +1 -0
- package/build/cli/modules/automateModule.js.map +1 -0
- package/build/cli/modules/baseModule.js +1 -0
- package/build/cli/modules/baseModule.js.map +1 -0
- package/build/cli/modules/observabilityModule.js +1 -0
- package/build/cli/modules/observabilityModule.js.map +1 -0
- package/build/cli/modules/percyModule.js +1 -0
- package/build/cli/modules/percyModule.js.map +1 -0
- package/build/cli/modules/testHubModule.js +1 -0
- package/build/cli/modules/testHubModule.js.map +1 -0
- package/build/cli/modules/webdriverIOModule.js +1 -0
- package/build/cli/modules/webdriverIOModule.js.map +1 -0
- package/build/cli/states/automationFrameworkState.d.ts.map +1 -1
- package/build/cli/states/automationFrameworkState.js +1 -0
- package/build/cli/states/automationFrameworkState.js.map +1 -0
- package/build/cli/states/hookState.d.ts.map +1 -1
- package/build/cli/states/hookState.js +1 -0
- package/build/cli/states/hookState.js.map +1 -0
- package/build/cli/states/testFrameworkState.d.ts.map +1 -1
- package/build/cli/states/testFrameworkState.js +1 -0
- package/build/cli/states/testFrameworkState.js.map +1 -0
- package/build/config.js +1 -0
- package/build/config.js.map +1 -0
- package/build/constants.d.ts +28 -0
- package/build/constants.d.ts.map +1 -1
- package/build/constants.js +38 -1
- package/build/constants.js.map +1 -0
- package/build/crash-reporter.js +1 -0
- package/build/crash-reporter.js.map +1 -0
- package/build/cucumber-types.js +1 -0
- package/build/cucumber-types.js.map +1 -0
- package/build/data-store.js +1 -0
- package/build/data-store.js.map +1 -0
- package/build/exitHandler.d.ts +1 -1
- package/build/exitHandler.d.ts.map +1 -1
- package/build/exitHandler.js +7 -5
- package/build/exitHandler.js.map +1 -0
- package/build/fileStream.js +1 -0
- package/build/fileStream.js.map +1 -0
- package/build/grpc/generated/sdk-messages-accessibility.d.ts +76 -0
- package/build/grpc/generated/sdk-messages-accessibility.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-accessibility.js +908 -0
- package/build/grpc/generated/sdk-messages-accessibility.js.map +1 -0
- package/build/grpc/generated/sdk-messages-ai.d.ts +52 -0
- package/build/grpc/generated/sdk-messages-ai.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-ai.js +643 -0
- package/build/grpc/generated/sdk-messages-ai.js.map +1 -0
- package/build/grpc/generated/sdk-messages-observability.d.ts +44 -0
- package/build/grpc/generated/sdk-messages-observability.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-observability.js +505 -0
- package/build/grpc/generated/sdk-messages-observability.js.map +1 -0
- package/build/grpc/generated/sdk-messages-percy.d.ts +16 -0
- package/build/grpc/generated/sdk-messages-percy.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-percy.js +111 -0
- package/build/grpc/generated/sdk-messages-percy.js.map +1 -0
- package/build/grpc/generated/sdk-messages-testhub.d.ts +16 -0
- package/build/grpc/generated/sdk-messages-testhub.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages-testhub.js +132 -0
- package/build/grpc/generated/sdk-messages-testhub.js.map +1 -0
- package/build/grpc/generated/sdk-messages.d.ts +288 -0
- package/build/grpc/generated/sdk-messages.d.ts.map +1 -0
- package/build/grpc/generated/sdk-messages.js +3958 -0
- package/build/grpc/generated/sdk-messages.js.map +1 -0
- package/build/grpc/generated/sdk.d.ts +282 -0
- package/build/grpc/generated/sdk.d.ts.map +1 -0
- package/build/grpc/generated/sdk.js +197 -0
- package/build/grpc/generated/sdk.js.map +1 -0
- package/build/grpc/index.d.ts +43 -0
- package/build/grpc/index.d.ts.map +1 -0
- package/build/grpc/index.js +154 -0
- package/build/grpc/index.js.map +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -0
- package/build/insights-handler.d.ts.map +1 -1
- package/build/insights-handler.js +38 -8
- package/build/insights-handler.js.map +1 -0
- package/build/instrumentation/funnelInstrumentation.d.ts +2 -2
- package/build/instrumentation/funnelInstrumentation.d.ts.map +1 -1
- package/build/instrumentation/funnelInstrumentation.js +31 -8
- package/build/instrumentation/funnelInstrumentation.js.map +1 -0
- package/build/instrumentation/performance/constants.d.ts +64 -0
- package/build/instrumentation/performance/constants.d.ts.map +1 -1
- package/build/instrumentation/performance/constants.js +74 -2
- package/build/instrumentation/performance/constants.js.map +1 -0
- package/build/instrumentation/performance/performance-tester.d.ts +11 -0
- package/build/instrumentation/performance/performance-tester.d.ts.map +1 -1
- package/build/instrumentation/performance/performance-tester.js +136 -15
- package/build/instrumentation/performance/performance-tester.js.map +1 -0
- package/build/launcher.d.ts +1 -0
- package/build/launcher.d.ts.map +1 -1
- package/build/launcher.js +152 -6
- package/build/launcher.js.map +1 -0
- package/build/log4jsAppender.d.ts.map +1 -1
- package/build/log4jsAppender.js +1 -0
- package/build/log4jsAppender.js.map +1 -0
- package/build/logPatcher.d.ts.map +1 -1
- package/build/logPatcher.js +1 -0
- package/build/logPatcher.js.map +1 -0
- package/build/logReportingAPI.d.ts.map +1 -1
- package/build/logReportingAPI.js +1 -0
- package/build/logReportingAPI.js.map +1 -0
- package/build/reporter.js +1 -0
- package/build/reporter.js.map +1 -0
- package/build/request-handler.d.ts.map +1 -1
- package/build/request-handler.js +4 -0
- package/build/request-handler.js.map +1 -0
- package/build/scripts/accessibility-scripts.js +1 -0
- package/build/scripts/accessibility-scripts.js.map +1 -0
- package/build/service.d.ts.map +1 -1
- package/build/service.js +78 -5
- package/build/service.js.map +1 -0
- package/build/testHub/utils.d.ts.map +1 -1
- package/build/testHub/utils.js +1 -0
- package/build/testHub/utils.js.map +1 -0
- package/build/testOps/featureStats.js +1 -0
- package/build/testOps/featureStats.js.map +1 -0
- package/build/testOps/featureUsage.js +1 -0
- package/build/testOps/featureUsage.js.map +1 -0
- package/build/testOps/listener.js +1 -0
- package/build/testOps/listener.js.map +1 -0
- package/build/testOps/requestUtils.js +1 -0
- package/build/testOps/requestUtils.js.map +1 -0
- package/build/testOps/testOpsConfig.js +1 -0
- package/build/testOps/testOpsConfig.js.map +1 -0
- package/build/testOps/usageStats.js +1 -0
- package/build/testOps/usageStats.js.map +1 -0
- package/build/testorchestration/apply-orchestration.d.ts +7 -0
- package/build/testorchestration/apply-orchestration.d.ts.map +1 -0
- package/build/testorchestration/apply-orchestration.js +43 -0
- package/build/testorchestration/apply-orchestration.js.map +1 -0
- package/build/testorchestration/helpers.d.ts +20 -0
- package/build/testorchestration/helpers.d.ts.map +1 -0
- package/build/testorchestration/helpers.js +413 -0
- package/build/testorchestration/helpers.js.map +1 -0
- package/build/testorchestration/request-utils.d.ts +23 -0
- package/build/testorchestration/request-utils.d.ts.map +1 -0
- package/build/testorchestration/request-utils.js +82 -0
- package/build/testorchestration/request-utils.js.map +1 -0
- package/build/testorchestration/test-ordering-server.d.ts +33 -0
- package/build/testorchestration/test-ordering-server.d.ts.map +1 -0
- package/build/testorchestration/test-ordering-server.js +169 -0
- package/build/testorchestration/test-ordering-server.js.map +1 -0
- package/build/testorchestration/testorcherstrationhandler.d.ts +50 -0
- package/build/testorchestration/testorcherstrationhandler.d.ts.map +1 -0
- package/build/testorchestration/testorcherstrationhandler.js +134 -0
- package/build/testorchestration/testorcherstrationhandler.js.map +1 -0
- package/build/testorchestration/testorcherstrationutils.d.ts +86 -0
- package/build/testorchestration/testorcherstrationutils.d.ts.map +1 -0
- package/build/testorchestration/testorcherstrationutils.js +380 -0
- package/build/testorchestration/testorcherstrationutils.js.map +1 -0
- package/build/types.d.ts +21 -0
- package/build/types.d.ts.map +1 -1
- package/build/types.js +1 -0
- package/build/types.js.map +1 -0
- package/build/util.d.ts +30 -1
- package/build/util.d.ts.map +1 -1
- package/build/util.js +103 -4
- package/build/util.js.map +1 -0
- package/package.json +46 -16
- package/src/proto/browserstack/sdk/v1/sdk-messages-accessibility.proto +71 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-ai.proto +48 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-observability.proto +39 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-percy.proto +10 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages-testhub.proto +10 -0
- package/src/proto/browserstack/sdk/v1/sdk-messages.proto +276 -0
- package/src/proto/browserstack/sdk/v1/sdk.proto +41 -0
- package/tsconfig.prod.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usageStats.js","sourceRoot":"","sources":["../../src/testOps/usageStats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Applies test orchestration to the WebdriverIO test run
|
|
3
|
+
* This function is the main entry point for the orchestration integration
|
|
4
|
+
*/
|
|
5
|
+
export declare function applyOrchestrationIfEnabled(specs: string[], config: Record<string, any>): Promise<string[]>;
|
|
6
|
+
export default applyOrchestrationIfEnabled;
|
|
7
|
+
//# sourceMappingURL=apply-orchestration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-orchestration.d.ts","sourceRoot":"","sources":["../../src/testorchestration/apply-orchestration.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,2BAA2B,CAC7C,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,OAAO,CAAC,MAAM,EAAE,CAAC,CA4CnB;AAED,eAAe,2BAA2B,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { performance } from 'node:perf_hooks';
|
|
2
|
+
import { TestOrchestrationHandler } from './testorcherstrationhandler.js';
|
|
3
|
+
import { BStackLogger } from '../bstackLogger.js';
|
|
4
|
+
import { isValidEnabledValue } from '../util.js';
|
|
5
|
+
/**
|
|
6
|
+
* Applies test orchestration to the WebdriverIO test run
|
|
7
|
+
* This function is the main entry point for the orchestration integration
|
|
8
|
+
*/
|
|
9
|
+
export async function applyOrchestrationIfEnabled(specs, config) {
|
|
10
|
+
// Initialize orchestration handler
|
|
11
|
+
const orchestrationHandler = TestOrchestrationHandler.getInstance(config);
|
|
12
|
+
if (!orchestrationHandler) {
|
|
13
|
+
BStackLogger.debug('Orchestration handler is not initialized. Skipping orchestration.');
|
|
14
|
+
return specs;
|
|
15
|
+
}
|
|
16
|
+
// Check if runSmartSelection is enabled in config
|
|
17
|
+
const runSmartSelectionEnabled = isValidEnabledValue(config?.testOrchestrationOptions?.runSmartSelection?.enabled);
|
|
18
|
+
if (!runSmartSelectionEnabled) {
|
|
19
|
+
BStackLogger.info('runSmartSelection is not enabled in config. Skipping orchestration.');
|
|
20
|
+
return specs;
|
|
21
|
+
}
|
|
22
|
+
const startTime = performance.now();
|
|
23
|
+
// if (orchestrationHandler.testOrderingEnabled()) {
|
|
24
|
+
BStackLogger.info('Test orchestration is enabled. Attempting to reorder test files.');
|
|
25
|
+
// Get the test files from the specs - pass them as received
|
|
26
|
+
const testFiles = specs;
|
|
27
|
+
BStackLogger.info(`Test files to be reordered: ${testFiles.join(', ')}`);
|
|
28
|
+
// Reorder the test files
|
|
29
|
+
const orderedFiles = await orchestrationHandler.reorderTestFiles(testFiles);
|
|
30
|
+
if (orderedFiles && orderedFiles.length > 0) {
|
|
31
|
+
BStackLogger.info(`Tests reordered using orchestration: ${orderedFiles.join(', ')}`);
|
|
32
|
+
// Return the ordered files as the new specs
|
|
33
|
+
orchestrationHandler.addToOrderingInstrumentationData('timeTakenToApply', Math.floor(performance.now() - startTime) // Time in milliseconds
|
|
34
|
+
);
|
|
35
|
+
return orderedFiles;
|
|
36
|
+
}
|
|
37
|
+
BStackLogger.info('No test files were reordered by orchestration.');
|
|
38
|
+
orchestrationHandler.addToOrderingInstrumentationData('timeTakenToApply', Math.floor(performance.now() - startTime) // Time in milliseconds
|
|
39
|
+
);
|
|
40
|
+
return specs;
|
|
41
|
+
}
|
|
42
|
+
export default applyOrchestrationIfEnabled;
|
|
43
|
+
//# sourceMappingURL=apply-orchestration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply-orchestration.js","sourceRoot":"","sources":["../../src/testorchestration/apply-orchestration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAChD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC7C,KAAe,EACf,MAA2B;IAE3B,mCAAmC;IACnC,MAAM,oBAAoB,GAAG,wBAAwB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACzE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACxB,YAAY,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAA;QACvF,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,kDAAkD;IAClD,MAAM,wBAAwB,GAAG,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAA;IAClH,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC5B,YAAY,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAA;QACxF,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAEnC,oDAAoD;IACpD,YAAY,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;IAErF,4DAA4D;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAA;IACvB,YAAY,CAAC,IAAI,CAAC,+BAA+B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAExE,yBAAyB;IACzB,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;IAE3E,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,YAAY,CAAC,IAAI,CAAC,wCAAwC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAEpF,4CAA4C;QAC5C,oBAAoB,CAAC,gCAAgC,CACjD,kBAAkB,EAClB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,uBAAuB;SACpE,CAAA;QAED,OAAO,YAAY,CAAA;IACvB,CAAC;IACD,YAAY,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IACnE,oBAAoB,CAAC,gCAAgC,CACjD,kBAAkB,EAClB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,uBAAuB;KACpE,CAAA;IACD,OAAO,KAAK,CAAA;AAChB,CAAC;AAED,eAAe,2BAA2B,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get host information for the test orchestration
|
|
3
|
+
*/
|
|
4
|
+
export declare function getHostInfo(): {
|
|
5
|
+
hostname: string;
|
|
6
|
+
platform: NodeJS.Platform;
|
|
7
|
+
architecture: NodeJS.Architecture;
|
|
8
|
+
release: string;
|
|
9
|
+
username: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Get git metadata
|
|
13
|
+
*/
|
|
14
|
+
export declare function getGitMetadata(): Record<string, any>;
|
|
15
|
+
/**
|
|
16
|
+
* Get Git metadata for AI selection
|
|
17
|
+
* @param multiRepoSource Array of repository paths for multi-repo setup
|
|
18
|
+
*/
|
|
19
|
+
export declare function getGitMetadataForAISelection(folders?: string[]): any[];
|
|
20
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/testorchestration/helpers.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,wBAAgB,WAAW;;;;;;EAQ1B;AA0ED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAyFpD;AA8FD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,GAAE,MAAM,EAAO,GAAG,GAAG,EAAE,CA4K1E"}
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import logger from '@wdio/logger';
|
|
5
|
+
const log = logger('wdio-browserstack-service:helpers');
|
|
6
|
+
// Constants
|
|
7
|
+
const MAX_GIT_META_DATA_SIZE_IN_BYTES = 512 * 1024; // 512 KB
|
|
8
|
+
/**
|
|
9
|
+
* Get host information for the test orchestration
|
|
10
|
+
*/
|
|
11
|
+
export function getHostInfo() {
|
|
12
|
+
return {
|
|
13
|
+
hostname: os.hostname(),
|
|
14
|
+
platform: process.platform,
|
|
15
|
+
architecture: process.arch,
|
|
16
|
+
release: os.release(),
|
|
17
|
+
username: os.userInfo().username
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format git author information
|
|
22
|
+
*/
|
|
23
|
+
function gitAuthor(name, email) {
|
|
24
|
+
if (!name && !email) {
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
return `${name} (${email})`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the size of a JSON object in bytes
|
|
31
|
+
*/
|
|
32
|
+
function getSizeOfJsonObjectInBytes(obj) {
|
|
33
|
+
try {
|
|
34
|
+
const jsonString = JSON.stringify(obj);
|
|
35
|
+
return Buffer.byteLength(jsonString, 'utf8');
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
log.error(`Error calculating object size: ${e}`);
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Truncate a string to reduce its size by the specified number of bytes
|
|
44
|
+
*/
|
|
45
|
+
function truncateString(str, bytesToTruncate) {
|
|
46
|
+
if (!str || bytesToTruncate <= 0) {
|
|
47
|
+
return str;
|
|
48
|
+
}
|
|
49
|
+
const originalBytes = Buffer.byteLength(str, 'utf8');
|
|
50
|
+
const targetBytes = Math.max(0, originalBytes - bytesToTruncate);
|
|
51
|
+
if (targetBytes >= originalBytes) {
|
|
52
|
+
return str;
|
|
53
|
+
}
|
|
54
|
+
// Perform binary search to find the right truncation point
|
|
55
|
+
let left = 0;
|
|
56
|
+
let right = str.length;
|
|
57
|
+
while (left < right) {
|
|
58
|
+
const mid = Math.floor((left + right) / 2);
|
|
59
|
+
const truncated = str.substring(0, mid);
|
|
60
|
+
const bytes = Buffer.byteLength(truncated, 'utf8');
|
|
61
|
+
if (bytes <= targetBytes) {
|
|
62
|
+
left = mid + 1;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
right = mid;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return str.substring(0, left - 1) + '...';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Check and truncate VCS info if needed
|
|
72
|
+
*/
|
|
73
|
+
function checkAndTruncateVcsInfo(gitMetaData) {
|
|
74
|
+
const gitMetaDataSizeInBytes = getSizeOfJsonObjectInBytes(gitMetaData);
|
|
75
|
+
if (gitMetaDataSizeInBytes && gitMetaDataSizeInBytes > MAX_GIT_META_DATA_SIZE_IN_BYTES) {
|
|
76
|
+
const truncateSize = gitMetaDataSizeInBytes - MAX_GIT_META_DATA_SIZE_IN_BYTES;
|
|
77
|
+
const truncatedCommitMessage = truncateString(gitMetaData.commit_message, truncateSize);
|
|
78
|
+
gitMetaData.commit_message = truncatedCommitMessage;
|
|
79
|
+
log.info(`The commit has been truncated. Size of commit after truncation is ${getSizeOfJsonObjectInBytes(gitMetaData) / 1024} KB`);
|
|
80
|
+
}
|
|
81
|
+
return gitMetaData;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Get git metadata
|
|
85
|
+
*/
|
|
86
|
+
export function getGitMetadata() {
|
|
87
|
+
try {
|
|
88
|
+
// Find git repo root
|
|
89
|
+
const rootOutput = execSync('git rev-parse --show-toplevel').toString().trim();
|
|
90
|
+
const commonDirOutput = execSync('git rev-parse --git-common-dir').toString().trim();
|
|
91
|
+
// Get basic git info
|
|
92
|
+
const sha = execSync('git rev-parse HEAD').toString().trim();
|
|
93
|
+
const shortSha = execSync('git rev-parse --short HEAD').toString().trim();
|
|
94
|
+
const branch = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
|
|
95
|
+
let tag = '';
|
|
96
|
+
try {
|
|
97
|
+
tag = execSync('git describe --all --tags --exact-match').toString().trim();
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
// Tag might not exist
|
|
101
|
+
}
|
|
102
|
+
// Get commit info
|
|
103
|
+
const commitAuthorName = execSync('git log -1 --pretty=%an').toString().trim();
|
|
104
|
+
const commitAuthorEmail = execSync('git log -1 --pretty=%ae').toString().trim();
|
|
105
|
+
const commitAuthorDate = execSync('git log -1 --pretty=%aI').toString().trim();
|
|
106
|
+
const committerName = execSync('git log -1 --pretty=%cn').toString().trim();
|
|
107
|
+
const committerEmail = execSync('git log -1 --pretty=%ce').toString().trim();
|
|
108
|
+
const committerDate = execSync('git log -1 --pretty=%cI').toString().trim();
|
|
109
|
+
const commitMessage = execSync('git log -1 --pretty=%B').toString().trim();
|
|
110
|
+
// Get last tag and commits since
|
|
111
|
+
let lastTag = '';
|
|
112
|
+
let commitsSinceLastTag = '';
|
|
113
|
+
try {
|
|
114
|
+
lastTag = execSync('git describe --tags --abbrev=0 --always').toString().trim();
|
|
115
|
+
commitsSinceLastTag = execSync(`git rev-list ${sha}..${lastTag} --count`).toString().trim();
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
// Last tag might not exist
|
|
119
|
+
}
|
|
120
|
+
// Get remotes
|
|
121
|
+
const remotesOutput = execSync('git remote -v').toString().trim();
|
|
122
|
+
const remoteLines = remotesOutput.split('\n');
|
|
123
|
+
const remotes = [];
|
|
124
|
+
const processedRemotes = new Set();
|
|
125
|
+
for (const line of remoteLines) {
|
|
126
|
+
const parts = line.split(/\s+/);
|
|
127
|
+
if (parts.length >= 2) {
|
|
128
|
+
const remoteName = parts[0];
|
|
129
|
+
const remoteUrl = parts[1];
|
|
130
|
+
// Only process each remote once (git remote -v shows fetch and push)
|
|
131
|
+
const key = `${remoteName}:${remoteUrl}`;
|
|
132
|
+
if (!processedRemotes.has(key)) {
|
|
133
|
+
processedRemotes.add(key);
|
|
134
|
+
remotes.push({
|
|
135
|
+
name: remoteName,
|
|
136
|
+
url: remoteUrl
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
const info = {
|
|
142
|
+
sha,
|
|
143
|
+
short_sha: shortSha,
|
|
144
|
+
branch,
|
|
145
|
+
tag,
|
|
146
|
+
committer: gitAuthor(committerName, committerEmail),
|
|
147
|
+
committer_date: committerDate,
|
|
148
|
+
author: gitAuthor(commitAuthorName, commitAuthorEmail),
|
|
149
|
+
author_date: commitAuthorDate,
|
|
150
|
+
commit_message: commitMessage,
|
|
151
|
+
root: rootOutput,
|
|
152
|
+
common_git_dir: commonDirOutput,
|
|
153
|
+
worktree_git_dir: commonDirOutput,
|
|
154
|
+
last_tag: lastTag,
|
|
155
|
+
commits_since_last_tag: commitsSinceLastTag
|
|
156
|
+
};
|
|
157
|
+
const gitMetaData = {
|
|
158
|
+
name: 'git',
|
|
159
|
+
...info,
|
|
160
|
+
remotes
|
|
161
|
+
};
|
|
162
|
+
return checkAndTruncateVcsInfo(gitMetaData);
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
log.error(`Error getting git metadata: ${e}`);
|
|
166
|
+
return {};
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Check if a git metadata result is valid
|
|
171
|
+
*/
|
|
172
|
+
function isValidGitResult(result) {
|
|
173
|
+
return (Array.isArray(result.filesChanged) &&
|
|
174
|
+
result.filesChanged.length > 0 &&
|
|
175
|
+
Array.isArray(result.authors) &&
|
|
176
|
+
result.authors.length > 0);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get base branch from repository
|
|
180
|
+
*/
|
|
181
|
+
function getBaseBranch() {
|
|
182
|
+
try {
|
|
183
|
+
// Try to get the default branch from origin/HEAD symbolic ref (works for most providers)
|
|
184
|
+
try {
|
|
185
|
+
const originHeadOutput = execSync('git symbolic-ref refs/remotes/origin/HEAD').toString().trim();
|
|
186
|
+
if (originHeadOutput.startsWith('refs/remotes/origin/')) {
|
|
187
|
+
return originHeadOutput.replace('refs/remotes/', '');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
// Symbolic ref might not exist
|
|
192
|
+
}
|
|
193
|
+
// Fallback: use the first branch in local heads
|
|
194
|
+
try {
|
|
195
|
+
const branchesOutput = execSync('git branch').toString().trim();
|
|
196
|
+
const branches = branchesOutput.split('\n').filter(Boolean);
|
|
197
|
+
if (branches.length > 0) {
|
|
198
|
+
// Remove the '* ' from current branch if present and return first branch
|
|
199
|
+
const firstBranch = branches[0].replace(/^\*\s+/, '').trim();
|
|
200
|
+
return firstBranch;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch (e) {
|
|
204
|
+
// Branches might not exist
|
|
205
|
+
}
|
|
206
|
+
// Fallback: use the first remote branch if available
|
|
207
|
+
try {
|
|
208
|
+
const remoteBranchesOutput = execSync('git branch -r').toString().trim();
|
|
209
|
+
const remoteBranches = remoteBranchesOutput.split('\n').filter(Boolean);
|
|
210
|
+
for (const branch of remoteBranches) {
|
|
211
|
+
const cleanBranch = branch.trim();
|
|
212
|
+
if (cleanBranch.startsWith('origin/') && !cleanBranch.includes('HEAD')) {
|
|
213
|
+
return cleanBranch;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
// Remote branches might not exist
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
catch (e) {
|
|
222
|
+
log.debug(`Error finding base branch: ${e}`);
|
|
223
|
+
}
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get changed files from commits
|
|
228
|
+
*/
|
|
229
|
+
function getChangedFilesFromCommits(commitHashes) {
|
|
230
|
+
const changedFiles = new Set();
|
|
231
|
+
try {
|
|
232
|
+
for (const commit of commitHashes) {
|
|
233
|
+
try {
|
|
234
|
+
// Check if commit has parents
|
|
235
|
+
const parentsOutput = execSync(`git log -1 --pretty=%P ${commit}`).toString().trim();
|
|
236
|
+
const parents = parentsOutput.split(' ').filter(Boolean);
|
|
237
|
+
for (const parent of parents) {
|
|
238
|
+
const diffOutput = execSync(`git diff --name-only ${parent} ${commit}`).toString().trim();
|
|
239
|
+
const files = diffOutput.split('\n').filter(Boolean);
|
|
240
|
+
for (const file of files) {
|
|
241
|
+
changedFiles.add(file);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (e) {
|
|
246
|
+
log.debug(`Error processing commit ${commit}: ${e}`);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
log.debug(`Error getting changed files from commits: ${e}`);
|
|
252
|
+
}
|
|
253
|
+
return Array.from(changedFiles);
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Get Git metadata for AI selection
|
|
257
|
+
* @param multiRepoSource Array of repository paths for multi-repo setup
|
|
258
|
+
*/
|
|
259
|
+
export function getGitMetadataForAISelection(folders = []) {
|
|
260
|
+
if (folders && folders.length === 0) {
|
|
261
|
+
return [];
|
|
262
|
+
}
|
|
263
|
+
if (folders === null) {
|
|
264
|
+
folders = [process.cwd()];
|
|
265
|
+
}
|
|
266
|
+
// Deduplicate folders to avoid calculating PR diff multiple times for the same source
|
|
267
|
+
// Normalize paths using path.resolve to handle relative paths, trailing slashes, etc.
|
|
268
|
+
const uniqueFolders = [...new Set(folders.map(f => path.resolve(f)))];
|
|
269
|
+
log.debug(`Processing ${uniqueFolders.length} unique folders out of ${folders.length} total`);
|
|
270
|
+
const results = [];
|
|
271
|
+
for (const folder of uniqueFolders) {
|
|
272
|
+
const originalDir = process.cwd();
|
|
273
|
+
try {
|
|
274
|
+
// Initialize the result structure
|
|
275
|
+
const result = {
|
|
276
|
+
prId: '',
|
|
277
|
+
filesChanged: [],
|
|
278
|
+
authors: [],
|
|
279
|
+
prDate: '',
|
|
280
|
+
commitMessages: [],
|
|
281
|
+
prTitle: '',
|
|
282
|
+
prDescription: '',
|
|
283
|
+
prRawDiff: ''
|
|
284
|
+
};
|
|
285
|
+
// Change directory to the folder
|
|
286
|
+
process.chdir(folder);
|
|
287
|
+
// Get current branch and latest commit
|
|
288
|
+
const currentBranch = execSync('git rev-parse --abbrev-ref HEAD').toString().trim();
|
|
289
|
+
const latestCommit = execSync('git rev-parse HEAD').toString().trim();
|
|
290
|
+
result.prId = latestCommit;
|
|
291
|
+
// Find base branch
|
|
292
|
+
const baseBranch = getBaseBranch();
|
|
293
|
+
log.debug(`Base branch for comparison: ${baseBranch}`);
|
|
294
|
+
let commits = [];
|
|
295
|
+
if (baseBranch) {
|
|
296
|
+
try {
|
|
297
|
+
// Get changed files between base branch and current branch
|
|
298
|
+
const changedFilesOutput = execSync(`git diff --name-only ${baseBranch}..${currentBranch}`).toString().trim();
|
|
299
|
+
log.debug(`Changed files between ${baseBranch} and ${currentBranch}: ${changedFilesOutput}`);
|
|
300
|
+
result.filesChanged = changedFilesOutput.split('\n').filter(f => f.trim());
|
|
301
|
+
// Get commits between base branch and current branch
|
|
302
|
+
const commitsOutput = execSync(`git log ${baseBranch}..${currentBranch} --pretty=%H`).toString().trim();
|
|
303
|
+
commits = commitsOutput.split('\n').filter(Boolean);
|
|
304
|
+
}
|
|
305
|
+
catch (e) {
|
|
306
|
+
log.debug('Failed to get changed files from branch comparison. Falling back to recent commits.');
|
|
307
|
+
// Fallback to recent commits
|
|
308
|
+
const recentCommitsOutput = execSync('git log -10 --pretty=%H').toString().trim();
|
|
309
|
+
commits = recentCommitsOutput.split('\n').filter(Boolean);
|
|
310
|
+
if (commits.length > 0) {
|
|
311
|
+
result.filesChanged = getChangedFilesFromCommits(commits.slice(0, 5));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
// Fallback to recent commits
|
|
317
|
+
const recentCommitsOutput = execSync('git log -10 --pretty=%H').toString().trim();
|
|
318
|
+
commits = recentCommitsOutput.split('\n').filter(Boolean);
|
|
319
|
+
if (commits.length > 0) {
|
|
320
|
+
result.filesChanged = getChangedFilesFromCommits(commits.slice(0, 5));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Process commit authors and messages
|
|
324
|
+
const authorsSet = new Set();
|
|
325
|
+
const commitMessages = [];
|
|
326
|
+
// Only process commits if we have them
|
|
327
|
+
if (commits.length > 0) {
|
|
328
|
+
for (const commit of commits) {
|
|
329
|
+
try {
|
|
330
|
+
const commitMessage = execSync(`git log -1 --pretty=%B ${commit}`).toString().trim();
|
|
331
|
+
log.debug(`Processing commit: ${commitMessage}`);
|
|
332
|
+
const authorName = execSync(`git log -1 --pretty=%an ${commit}`).toString().trim();
|
|
333
|
+
authorsSet.add(authorName || 'Unknown');
|
|
334
|
+
commitMessages.push({
|
|
335
|
+
message: commitMessage.trim(),
|
|
336
|
+
user: authorName || 'Unknown'
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
catch (e) {
|
|
340
|
+
log.debug(`Error processing commit ${commit}: ${e}`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// If we have no commits but have changed files, add a fallback author
|
|
345
|
+
if (commits.length === 0 && result.filesChanged.length > 0) {
|
|
346
|
+
try {
|
|
347
|
+
// Try to get current git user as fallback
|
|
348
|
+
const fallbackAuthor = execSync('git config user.name').toString().trim() || 'Unknown';
|
|
349
|
+
authorsSet.add(fallbackAuthor);
|
|
350
|
+
log.debug(`Added fallback author: ${fallbackAuthor}`);
|
|
351
|
+
}
|
|
352
|
+
catch (e) {
|
|
353
|
+
authorsSet.add('Unknown');
|
|
354
|
+
log.debug('Added Unknown as fallback author');
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
result.authors = Array.from(authorsSet);
|
|
358
|
+
result.commitMessages = commitMessages;
|
|
359
|
+
// Get commit date
|
|
360
|
+
if (latestCommit) {
|
|
361
|
+
const commitDate = execSync(`git log -1 --pretty=%cd --date=format:'%Y-%m-%d' ${latestCommit}`).toString().trim();
|
|
362
|
+
result.prDate = commitDate.replace(/'/g, '');
|
|
363
|
+
}
|
|
364
|
+
// Set PR title and description from latest commit if not already set
|
|
365
|
+
if ((!result.prTitle || result.prTitle.trim() === '') && latestCommit) {
|
|
366
|
+
try {
|
|
367
|
+
const latestCommitMessage = execSync(`git log -1 --pretty=%B ${latestCommit}`).toString().trim();
|
|
368
|
+
const messageLines = latestCommitMessage.trim().split('\n');
|
|
369
|
+
result.prTitle = messageLines[0] || '';
|
|
370
|
+
if (messageLines.length > 2) {
|
|
371
|
+
result.prDescription = messageLines.slice(2).join('\n').trim();
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
catch (e) {
|
|
375
|
+
log.debug(`Error extracting commit message for PR title: ${e}`);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
// Reset directory
|
|
379
|
+
process.chdir(originalDir);
|
|
380
|
+
results.push(result);
|
|
381
|
+
}
|
|
382
|
+
catch (e) {
|
|
383
|
+
log.error(`Exception in populating Git metadata for AI selection (folder: ${folder}): ${e}`);
|
|
384
|
+
// Reset directory if needed
|
|
385
|
+
try {
|
|
386
|
+
process.chdir(originalDir);
|
|
387
|
+
}
|
|
388
|
+
catch (dirError) {
|
|
389
|
+
log.error(`Error resetting directory: ${dirError}`);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
// Filter out results with empty filesChanged
|
|
394
|
+
const filteredResults = results.filter(isValidGitResult);
|
|
395
|
+
// Map to required output format
|
|
396
|
+
const formattedResults = filteredResults.map((result) => ({
|
|
397
|
+
prId: result.prId || '',
|
|
398
|
+
filesChanged: Array.isArray(result.filesChanged) ? result.filesChanged : [],
|
|
399
|
+
authors: Array.isArray(result.authors) ? result.authors : [],
|
|
400
|
+
prDate: result.prDate || '',
|
|
401
|
+
commitMessages: Array.isArray(result.commitMessages)
|
|
402
|
+
? result.commitMessages.map((cm) => ({
|
|
403
|
+
message: cm.message || '',
|
|
404
|
+
user: cm.user || ''
|
|
405
|
+
}))
|
|
406
|
+
: [],
|
|
407
|
+
prTitle: result.prTitle || '',
|
|
408
|
+
prDescription: result.prDescription || '',
|
|
409
|
+
prRawDiff: result.prRawDiff || ''
|
|
410
|
+
}));
|
|
411
|
+
return formattedResults;
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/testorchestration/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for making API requests to the BrowserStack orchestration API
|
|
3
|
+
*/
|
|
4
|
+
export declare class RequestUtils {
|
|
5
|
+
/**
|
|
6
|
+
* Makes a request to the test orchestration split tests endpoint
|
|
7
|
+
*/
|
|
8
|
+
static testOrchestrationSplitTests(reqEndpoint: string, data: any): Promise<any>;
|
|
9
|
+
/**
|
|
10
|
+
* Gets ordered tests from the test orchestration
|
|
11
|
+
*/
|
|
12
|
+
static getTestOrchestrationOrderedTests(reqEndpoint: string): Promise<any>;
|
|
13
|
+
/**
|
|
14
|
+
* Makes an orchestration request with the given method and data
|
|
15
|
+
*/
|
|
16
|
+
static makeOrchestrationRequest(method: 'GET' | 'POST' | 'PUT', reqEndpoint: string, options: {
|
|
17
|
+
data?: any;
|
|
18
|
+
params?: Record<string, any>;
|
|
19
|
+
extraHeaders?: Record<string, string>;
|
|
20
|
+
}): Promise<any>;
|
|
21
|
+
}
|
|
22
|
+
export default RequestUtils;
|
|
23
|
+
//# sourceMappingURL=request-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-utils.d.ts","sourceRoot":"","sources":["../../src/testorchestration/request-utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,qBAAa,YAAY;IACrB;;OAEG;WACU,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG;IAKvE;;OAEG;WACU,gCAAgC,CAAC,WAAW,EAAE,MAAM;IAKjE;;OAEG;WACU,wBAAwB,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;QAChG,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACxC;CA4DJ;AAED,eAAe,YAAY,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import got from 'got';
|
|
2
|
+
import { BStackLogger } from '../bstackLogger.js';
|
|
3
|
+
import APIUtils from '../cli/apiUtils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Utility class for making API requests to the BrowserStack orchestration API
|
|
6
|
+
*/
|
|
7
|
+
export class RequestUtils {
|
|
8
|
+
/**
|
|
9
|
+
* Makes a request to the test orchestration split tests endpoint
|
|
10
|
+
*/
|
|
11
|
+
static async testOrchestrationSplitTests(reqEndpoint, data) {
|
|
12
|
+
BStackLogger.debug('Processing Request for testOrchestrationSplitTests');
|
|
13
|
+
return RequestUtils.makeOrchestrationRequest('POST', reqEndpoint, { data });
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Gets ordered tests from the test orchestration
|
|
17
|
+
*/
|
|
18
|
+
static async getTestOrchestrationOrderedTests(reqEndpoint) {
|
|
19
|
+
BStackLogger.debug('Processing Request for getTestOrchestrationOrderedTests');
|
|
20
|
+
return RequestUtils.makeOrchestrationRequest('GET', reqEndpoint, {});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Makes an orchestration request with the given method and data
|
|
24
|
+
*/
|
|
25
|
+
static async makeOrchestrationRequest(method, reqEndpoint, options) {
|
|
26
|
+
const jwtToken = process.env.BROWSERSTACK_TESTHUB_JWT || '';
|
|
27
|
+
const headers = {
|
|
28
|
+
'authorization': `Bearer ${jwtToken}`,
|
|
29
|
+
'Content-Type': 'application/json',
|
|
30
|
+
'Accept': 'application/json'
|
|
31
|
+
};
|
|
32
|
+
if (options.extraHeaders) {
|
|
33
|
+
Object.assign(headers, options.extraHeaders);
|
|
34
|
+
}
|
|
35
|
+
const url = `${APIUtils.DATA_ENDPOINT}/${reqEndpoint.replace(/^\//, '')}`;
|
|
36
|
+
try {
|
|
37
|
+
let response;
|
|
38
|
+
const requestOptions = {
|
|
39
|
+
headers,
|
|
40
|
+
responseType: 'json'
|
|
41
|
+
};
|
|
42
|
+
if (options.data) {
|
|
43
|
+
requestOptions.json = options.data;
|
|
44
|
+
}
|
|
45
|
+
if (options.params) {
|
|
46
|
+
requestOptions.searchParams = options.params;
|
|
47
|
+
}
|
|
48
|
+
if (method === 'GET') {
|
|
49
|
+
response = await got.get(url, requestOptions);
|
|
50
|
+
}
|
|
51
|
+
else if (method === 'POST') {
|
|
52
|
+
response = await got.post(url, requestOptions);
|
|
53
|
+
}
|
|
54
|
+
else if (method === 'PUT') {
|
|
55
|
+
response = await got.put(url, requestOptions);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
throw new Error(`Unsupported HTTP method: ${method}`);
|
|
59
|
+
}
|
|
60
|
+
BStackLogger.debug(`Orchestration request made to URL: ${url} with method: ${method}`);
|
|
61
|
+
let responseObj = {};
|
|
62
|
+
try {
|
|
63
|
+
responseObj = response.body;
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
BStackLogger.debug(`Failed to parse JSON response: ${e} - ${response.body}`);
|
|
67
|
+
}
|
|
68
|
+
if (responseObj) {
|
|
69
|
+
responseObj.next_poll_time = response.headers.next_poll_time ||
|
|
70
|
+
String(Date.now());
|
|
71
|
+
responseObj.status = response.statusCode;
|
|
72
|
+
}
|
|
73
|
+
return responseObj;
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
BStackLogger.error(`Orchestration request failed: ${e} - ${url}`);
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export default RequestUtils;
|
|
82
|
+
//# sourceMappingURL=request-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-utils.js","sourceRoot":"","sources":["../../src/testorchestration/request-utils.ts"],"names":[],"mappings":"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"}
|