@devicecloud.dev/dcd 4.1.2-beta.1 → 4.1.3
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/dist/commands/cloud.d.ts +26 -34
- package/dist/commands/cloud.js +117 -465
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.js +19 -1
- package/dist/config/flags/api.flags.d.ts +7 -0
- package/dist/config/flags/api.flags.js +19 -0
- package/dist/config/flags/binary.flags.d.ts +8 -0
- package/dist/config/flags/binary.flags.js +20 -0
- package/dist/config/flags/device.flags.d.ts +14 -0
- package/dist/config/flags/device.flags.js +46 -0
- package/dist/config/flags/environment.flags.d.ts +11 -0
- package/dist/config/flags/environment.flags.js +37 -0
- package/dist/config/flags/execution.flags.d.ts +13 -0
- package/dist/config/flags/execution.flags.js +50 -0
- package/dist/config/flags/output.flags.d.ts +18 -0
- package/dist/config/flags/output.flags.js +61 -0
- package/dist/constants.d.ts +28 -24
- package/dist/constants.js +21 -206
- package/dist/gateways/api-gateway.d.ts +3 -3
- package/dist/methods.d.ts +0 -4
- package/dist/methods.js +15 -80
- package/dist/services/device-validation.service.d.ts +29 -0
- package/dist/services/device-validation.service.js +72 -0
- package/dist/{plan.d.ts → services/execution-plan.service.d.ts} +1 -1
- package/dist/{plan.js → services/execution-plan.service.js} +10 -10
- package/dist/{planMethods.js → services/execution-plan.utils.js} +0 -1
- package/dist/services/metadata-extractor.service.d.ts +46 -0
- package/dist/services/metadata-extractor.service.js +138 -0
- package/dist/services/moropo.service.d.ts +20 -0
- package/dist/services/moropo.service.js +113 -0
- package/dist/services/report-download.service.d.ts +40 -0
- package/dist/services/report-download.service.js +110 -0
- package/dist/services/results-polling.service.d.ts +45 -0
- package/dist/services/results-polling.service.js +210 -0
- package/dist/services/test-submission.service.d.ts +41 -0
- package/dist/services/test-submission.service.js +116 -0
- package/dist/services/version.service.d.ts +31 -0
- package/dist/services/version.service.js +81 -0
- package/dist/types/{schema.types.d.ts → generated/schema.types.d.ts} +349 -349
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +24 -0
- package/dist/utils/compatibility.d.ts +5 -0
- package/dist/utils/connectivity.d.ts +29 -0
- package/dist/utils/connectivity.js +100 -0
- package/oclif.manifest.json +195 -209
- package/package.json +2 -9
- /package/dist/{planMethods.d.ts → services/execution-plan.utils.d.ts} +0 -0
- /package/dist/types/{device.types.d.ts → domain/device.types.d.ts} +0 -0
- /package/dist/types/{device.types.js → domain/device.types.js} +0 -0
- /package/dist/types/{schema.types.js → generated/schema.types.js} +0 -0
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { Command } from '@oclif/core';
|
|
2
|
+
import { ConnectivityCheckResult } from '../utils/connectivity';
|
|
2
3
|
type StatusResponse = {
|
|
3
4
|
appBinaryId?: string;
|
|
4
5
|
attempts?: number;
|
|
6
|
+
connectivityCheck?: {
|
|
7
|
+
connected: boolean;
|
|
8
|
+
endpointResults: ConnectivityCheckResult['endpointResults'];
|
|
9
|
+
message: string;
|
|
10
|
+
};
|
|
5
11
|
consoleUrl?: string;
|
|
6
12
|
error?: string;
|
|
7
13
|
status: 'CANCELLED' | 'FAILED' | 'PASSED' | 'PENDING' | 'RUNNING';
|
package/dist/commands/status.js
CHANGED
|
@@ -4,6 +4,7 @@ const core_1 = require("@oclif/core");
|
|
|
4
4
|
const constants_1 = require("../constants");
|
|
5
5
|
const api_gateway_1 = require("../gateways/api-gateway");
|
|
6
6
|
const methods_1 = require("../methods");
|
|
7
|
+
const connectivity_1 = require("../utils/connectivity");
|
|
7
8
|
class Status extends core_1.Command {
|
|
8
9
|
static description = 'Get the status of an upload by name or upload ID';
|
|
9
10
|
static enableJsonFlag = true;
|
|
@@ -64,10 +65,27 @@ class Status extends core_1.Command {
|
|
|
64
65
|
}
|
|
65
66
|
}
|
|
66
67
|
if (!status) {
|
|
67
|
-
|
|
68
|
+
// Check if the failure is due to internet connectivity issues
|
|
69
|
+
const connectivityCheck = await (0, connectivity_1.checkInternetConnectivity)();
|
|
70
|
+
let errorMessage;
|
|
71
|
+
if (connectivityCheck.connected) {
|
|
72
|
+
errorMessage = `Failed to get status after 5 attempts. Internet appears functional but unable to reach API. Last error: ${lastError?.message || 'Unknown error'}`;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// Build detailed error message with endpoint diagnostics
|
|
76
|
+
const endpointDetails = connectivityCheck.endpointResults
|
|
77
|
+
.map((r) => ` - ${r.endpoint}: ${r.error} (${r.latencyMs}ms)`)
|
|
78
|
+
.join('\n');
|
|
79
|
+
errorMessage = `Failed to get status after 5 attempts.\n\nInternet connectivity check failed - all test endpoints unreachable:\n${endpointDetails}\n\nPlease verify your network connection and DNS resolution.\nLast API error: ${lastError?.message || 'Unknown error'}`;
|
|
80
|
+
}
|
|
68
81
|
if (json) {
|
|
69
82
|
return {
|
|
70
83
|
attempts: 5,
|
|
84
|
+
connectivityCheck: {
|
|
85
|
+
connected: connectivityCheck.connected,
|
|
86
|
+
endpointResults: connectivityCheck.endpointResults,
|
|
87
|
+
message: connectivityCheck.message,
|
|
88
|
+
},
|
|
71
89
|
error: errorMessage,
|
|
72
90
|
status: 'FAILED',
|
|
73
91
|
tests: [],
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API authentication and configuration flags
|
|
3
|
+
*/
|
|
4
|
+
export declare const apiFlags: {
|
|
5
|
+
apiKey: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
apiUrl: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.apiFlags = void 0;
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
/**
|
|
6
|
+
* API authentication and configuration flags
|
|
7
|
+
*/
|
|
8
|
+
exports.apiFlags = {
|
|
9
|
+
apiKey: core_1.Flags.string({
|
|
10
|
+
aliases: ['api-key'],
|
|
11
|
+
description: 'API key for devicecloud.dev (find this in the console UI). You can also set the DEVICE_CLOUD_API_KEY environment variable.',
|
|
12
|
+
}),
|
|
13
|
+
apiUrl: core_1.Flags.string({
|
|
14
|
+
aliases: ['api-url', 'apiURL'],
|
|
15
|
+
default: 'https://api.devicecloud.dev',
|
|
16
|
+
description: 'API base URL',
|
|
17
|
+
hidden: true,
|
|
18
|
+
}),
|
|
19
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary upload and management flags
|
|
3
|
+
*/
|
|
4
|
+
export declare const binaryFlags: {
|
|
5
|
+
'app-binary-id': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
'app-file': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
'ignore-sha-check': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
8
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.binaryFlags = void 0;
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
/**
|
|
6
|
+
* Binary upload and management flags
|
|
7
|
+
*/
|
|
8
|
+
exports.binaryFlags = {
|
|
9
|
+
'app-binary-id': core_1.Flags.string({
|
|
10
|
+
aliases: ['app-binary-id'],
|
|
11
|
+
description: 'The ID of the app binary previously uploaded to devicecloud.dev',
|
|
12
|
+
}),
|
|
13
|
+
'app-file': core_1.Flags.file({
|
|
14
|
+
aliases: ['app-file'],
|
|
15
|
+
description: 'App binary to run your flows against',
|
|
16
|
+
}),
|
|
17
|
+
'ignore-sha-check': core_1.Flags.boolean({
|
|
18
|
+
description: 'Ignore the sha hash check and upload the binary regardless of whether it already exists (not recommended)',
|
|
19
|
+
}),
|
|
20
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Device-specific flags for Android and iOS configuration
|
|
3
|
+
*/
|
|
4
|
+
export declare const deviceFlags: {
|
|
5
|
+
'android-api-level': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
'android-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
'device-locale': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
'google-play': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
9
|
+
'ios-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
'ios-version': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
orientation: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
'show-crosshairs': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
'skip-chrome-onboarding': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deviceFlags = void 0;
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
const device_types_1 = require("../../types/domain/device.types");
|
|
6
|
+
/**
|
|
7
|
+
* Device-specific flags for Android and iOS configuration
|
|
8
|
+
*/
|
|
9
|
+
exports.deviceFlags = {
|
|
10
|
+
'android-api-level': core_1.Flags.string({
|
|
11
|
+
description: '[Android only] Android API level to run your flow against',
|
|
12
|
+
options: Object.values(device_types_1.EAndroidApiLevels),
|
|
13
|
+
}),
|
|
14
|
+
'android-device': core_1.Flags.string({
|
|
15
|
+
description: '[Android only] Android device to run your flow against',
|
|
16
|
+
options: Object.values(device_types_1.EAndroidDevices),
|
|
17
|
+
}),
|
|
18
|
+
'device-locale': core_1.Flags.string({
|
|
19
|
+
description: 'Locale that will be set to a device, ISO-639-1 code and uppercase ISO-3166-1 code e.g. "de_DE" for Germany',
|
|
20
|
+
}),
|
|
21
|
+
'google-play': core_1.Flags.boolean({
|
|
22
|
+
aliases: ['google-play'],
|
|
23
|
+
default: false,
|
|
24
|
+
description: '[Android only] Run your flow against Google Play devices',
|
|
25
|
+
}),
|
|
26
|
+
'ios-device': core_1.Flags.string({
|
|
27
|
+
description: '[iOS only] iOS device to run your flow against',
|
|
28
|
+
options: Object.values(device_types_1.EiOSDevices),
|
|
29
|
+
}),
|
|
30
|
+
'ios-version': core_1.Flags.string({
|
|
31
|
+
description: '[iOS only] iOS version to run your flow against',
|
|
32
|
+
options: Object.values(device_types_1.EiOSVersions),
|
|
33
|
+
}),
|
|
34
|
+
orientation: core_1.Flags.string({
|
|
35
|
+
description: '[Android only] The orientation of the device to run your flow against in degrees',
|
|
36
|
+
options: ['0', '90'],
|
|
37
|
+
}),
|
|
38
|
+
'show-crosshairs': core_1.Flags.boolean({
|
|
39
|
+
default: false,
|
|
40
|
+
description: '[Android only] Display crosshairs for screen interactions during test execution',
|
|
41
|
+
}),
|
|
42
|
+
'skip-chrome-onboarding': core_1.Flags.boolean({
|
|
43
|
+
default: false,
|
|
44
|
+
description: '[Android only] Skip Chrome browser onboarding screens when running tests',
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment configuration and metadata flags
|
|
3
|
+
*/
|
|
4
|
+
export declare const environmentFlags: {
|
|
5
|
+
env: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
metadata: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
mitmHost: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
mitmPath: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
'moropo-v1-api-key': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
name: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.environmentFlags = void 0;
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
/**
|
|
6
|
+
* Environment configuration and metadata flags
|
|
7
|
+
*/
|
|
8
|
+
exports.environmentFlags = {
|
|
9
|
+
env: core_1.Flags.file({
|
|
10
|
+
char: 'e',
|
|
11
|
+
description: 'One or more environment variables to inject into your flows',
|
|
12
|
+
multiple: true,
|
|
13
|
+
multipleNonGreedy: true,
|
|
14
|
+
}),
|
|
15
|
+
metadata: core_1.Flags.string({
|
|
16
|
+
char: 'm',
|
|
17
|
+
description: 'Arbitrary key-value metadata to include with your test run (format: key=value)',
|
|
18
|
+
multiple: true,
|
|
19
|
+
multipleNonGreedy: true,
|
|
20
|
+
}),
|
|
21
|
+
mitmHost: core_1.Flags.string({
|
|
22
|
+
description: 'used for mitmproxy support, enterprise only, contact support if interested',
|
|
23
|
+
hidden: true,
|
|
24
|
+
}),
|
|
25
|
+
mitmPath: core_1.Flags.string({
|
|
26
|
+
dependsOn: ['mitmHost'],
|
|
27
|
+
description: 'used for mitmproxy support, enterprise only, contact support if interested',
|
|
28
|
+
hidden: true,
|
|
29
|
+
}),
|
|
30
|
+
'moropo-v1-api-key': core_1.Flags.string({
|
|
31
|
+
description: 'API key for Moropo v1 integration',
|
|
32
|
+
required: false,
|
|
33
|
+
}),
|
|
34
|
+
name: core_1.Flags.string({
|
|
35
|
+
description: 'A custom name for your upload (useful for tagging commits etc)',
|
|
36
|
+
}),
|
|
37
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test execution and flow management flags
|
|
3
|
+
*/
|
|
4
|
+
export declare const executionFlags: {
|
|
5
|
+
config: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
'exclude-flows': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
'exclude-tags': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
flows: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
'include-tags': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
+
'maestro-version': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
+
retry: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
'runner-type': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.executionFlags = void 0;
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
/**
|
|
6
|
+
* Test execution and flow management flags
|
|
7
|
+
*/
|
|
8
|
+
exports.executionFlags = {
|
|
9
|
+
config: core_1.Flags.file({
|
|
10
|
+
description: 'Path to custom config.yaml file. If not provided, defaults to config.yaml in root flows folders.',
|
|
11
|
+
}),
|
|
12
|
+
'exclude-flows': core_1.Flags.string({
|
|
13
|
+
default: [],
|
|
14
|
+
description: 'Sub directories to ignore when building the flow file list',
|
|
15
|
+
multiple: true,
|
|
16
|
+
multipleNonGreedy: true,
|
|
17
|
+
parse: (input) => input.split(','),
|
|
18
|
+
}),
|
|
19
|
+
'exclude-tags': core_1.Flags.string({
|
|
20
|
+
aliases: ['exclude-tags'],
|
|
21
|
+
default: [],
|
|
22
|
+
description: 'Flows which have these tags will be excluded from the run',
|
|
23
|
+
multiple: true,
|
|
24
|
+
multipleNonGreedy: true,
|
|
25
|
+
parse: (input) => input.split(','),
|
|
26
|
+
}),
|
|
27
|
+
flows: core_1.Flags.string({
|
|
28
|
+
description: 'The path to the flow file or folder containing your flows',
|
|
29
|
+
}),
|
|
30
|
+
'include-tags': core_1.Flags.string({
|
|
31
|
+
aliases: ['include-tags'],
|
|
32
|
+
default: [],
|
|
33
|
+
description: 'Only flows which have these tags will be included in the run',
|
|
34
|
+
multiple: true,
|
|
35
|
+
multipleNonGreedy: true,
|
|
36
|
+
parse: (input) => input.split(','),
|
|
37
|
+
}),
|
|
38
|
+
'maestro-version': core_1.Flags.string({
|
|
39
|
+
aliases: ['maestroVersion'],
|
|
40
|
+
description: 'Maestro version to run your flow against. Use "latest" for the most recent version. Supported versions are fetched from the API.',
|
|
41
|
+
}),
|
|
42
|
+
retry: core_1.Flags.integer({
|
|
43
|
+
description: 'Automatically retry the run up to the number of times specified (same as pressing retry in the UI) - this is free of charge',
|
|
44
|
+
}),
|
|
45
|
+
'runner-type': core_1.Flags.string({
|
|
46
|
+
default: 'default',
|
|
47
|
+
description: '[experimental] The type of runner to use - note: anything other than default will incur premium pricing tiers, see https://docs.devicecloud.dev/reference/runner-type for more information. gpu1 is Android-only and requires contacting support to enable, otherwise reverts to default.',
|
|
48
|
+
options: ['default', 'm4', 'm1', 'gpu1'],
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output format and artifact download flags
|
|
3
|
+
*/
|
|
4
|
+
export declare const outputFlags: {
|
|
5
|
+
'artifacts-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
6
|
+
'junit-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
+
'allure-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
+
'html-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
+
async: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
10
|
+
debug: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
'download-artifacts': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
|
+
'dry-run': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
14
|
+
'json-file': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
'json-file-name': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
16
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
report: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
18
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.outputFlags = void 0;
|
|
4
|
+
const core_1 = require("@oclif/core");
|
|
5
|
+
/**
|
|
6
|
+
* Output format and artifact download flags
|
|
7
|
+
*/
|
|
8
|
+
exports.outputFlags = {
|
|
9
|
+
'artifacts-path': core_1.Flags.string({
|
|
10
|
+
dependsOn: ['download-artifacts'],
|
|
11
|
+
description: 'Custom file path for downloaded artifacts (default: ./artifacts.zip)',
|
|
12
|
+
}),
|
|
13
|
+
'junit-path': core_1.Flags.string({
|
|
14
|
+
dependsOn: ['report'],
|
|
15
|
+
description: 'Custom file path for downloaded JUnit report (default: ./report.xml)',
|
|
16
|
+
}),
|
|
17
|
+
'allure-path': core_1.Flags.string({
|
|
18
|
+
dependsOn: ['report'],
|
|
19
|
+
description: 'Custom file path for downloaded Allure report (default: ./report.html)',
|
|
20
|
+
}),
|
|
21
|
+
'html-path': core_1.Flags.string({
|
|
22
|
+
dependsOn: ['report'],
|
|
23
|
+
description: 'Custom file path for downloaded HTML report (default: ./report.html)',
|
|
24
|
+
}),
|
|
25
|
+
async: core_1.Flags.boolean({
|
|
26
|
+
description: 'Immediately return (exit code 0) from the command without waiting for the results of the run (useful for saving CI minutes)',
|
|
27
|
+
}),
|
|
28
|
+
debug: core_1.Flags.boolean({
|
|
29
|
+
default: false,
|
|
30
|
+
description: 'Enable detailed debug logging for troubleshooting issues',
|
|
31
|
+
}),
|
|
32
|
+
'download-artifacts': core_1.Flags.string({
|
|
33
|
+
description: 'Download a zip containing the logs, screenshots and videos for each result in this run. You will be debited a $0.01 egress fee for each result. Options: ALL (everything), FAILED (failures only).',
|
|
34
|
+
options: ['ALL', 'FAILED'],
|
|
35
|
+
}),
|
|
36
|
+
'dry-run': core_1.Flags.boolean({
|
|
37
|
+
default: false,
|
|
38
|
+
description: 'Simulate the run without actually triggering the upload/test, useful for debugging workflow issues.',
|
|
39
|
+
}),
|
|
40
|
+
json: core_1.Flags.boolean({
|
|
41
|
+
description: 'Output results in JSON format - note: will always provide exit code 0',
|
|
42
|
+
}),
|
|
43
|
+
'json-file': core_1.Flags.boolean({
|
|
44
|
+
description: 'Write JSON output to a file. File be called <upload_id>_dcd.json unless you supply the --json-file-name flag - note: will always exit with code 0',
|
|
45
|
+
required: false,
|
|
46
|
+
}),
|
|
47
|
+
'json-file-name': core_1.Flags.string({
|
|
48
|
+
description: 'A custom name for the JSON file (can also include relative path)',
|
|
49
|
+
dependsOn: ['json-file'],
|
|
50
|
+
}),
|
|
51
|
+
quiet: core_1.Flags.boolean({
|
|
52
|
+
char: 'q',
|
|
53
|
+
default: false,
|
|
54
|
+
description: 'Quieter console output that wont provide progress updates',
|
|
55
|
+
}),
|
|
56
|
+
report: core_1.Flags.string({
|
|
57
|
+
aliases: ['format'],
|
|
58
|
+
description: 'Generate and download test reports in the specified format. Use "allure" for a complete HTML report.',
|
|
59
|
+
options: ['allure', 'junit', 'html'],
|
|
60
|
+
}),
|
|
61
|
+
};
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,47 +1,51 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Consolidated flag definitions for backward compatibility.
|
|
3
|
+
* Flags are organized by domain in src/config/flags/
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* All flag definitions consolidated from domain-specific flag modules.
|
|
7
|
+
* Maintains backward compatibility with existing imports.
|
|
8
|
+
*/
|
|
5
9
|
export declare const flags: {
|
|
6
|
-
'android-api-level': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
7
|
-
'android-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
8
|
-
apiKey: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
9
|
-
apiUrl: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
10
|
-
'app-binary-id': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
11
|
-
'app-file': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
12
10
|
'artifacts-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
13
11
|
'junit-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
14
12
|
'allure-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
15
13
|
'html-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
16
14
|
async: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
17
|
-
config: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
18
15
|
debug: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
19
|
-
'device-locale': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
20
16
|
'download-artifacts': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
21
17
|
'dry-run': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
22
|
-
|
|
18
|
+
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
'json-file': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
20
|
+
'json-file-name': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
21
|
+
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
22
|
+
report: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
23
|
+
config: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
23
24
|
'exclude-flows': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
24
25
|
'exclude-tags': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
25
26
|
flows: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
26
|
-
'google-play': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
27
|
-
'ignore-sha-check': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
28
27
|
'include-tags': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
29
|
-
'ios-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
30
|
-
'ios-version': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
31
|
-
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
32
|
-
'json-file': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
33
|
-
'json-file-name': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
34
28
|
'maestro-version': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
29
|
+
retry: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
30
|
+
'runner-type': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
31
|
+
env: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
35
32
|
metadata: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
36
33
|
mitmHost: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
37
34
|
mitmPath: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
38
35
|
'moropo-v1-api-key': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
39
36
|
name: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
37
|
+
'android-api-level': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
38
|
+
'android-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
39
|
+
'device-locale': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
40
|
+
'google-play': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
41
|
+
'ios-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
42
|
+
'ios-version': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
40
43
|
orientation: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
41
|
-
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
42
|
-
report: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
43
|
-
retry: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
44
|
-
'runner-type': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
45
44
|
'show-crosshairs': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
46
45
|
'skip-chrome-onboarding': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
46
|
+
'app-binary-id': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
47
|
+
'app-file': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
48
|
+
'ignore-sha-check': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
49
|
+
apiKey: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
50
|
+
apiUrl: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
47
51
|
};
|