@devicecloud.dev/dcd 4.4.9 → 5.0.0-beta.1

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.
Files changed (130) hide show
  1. package/README.md +75 -2
  2. package/dist/commands/artifacts.d.ts +47 -18
  3. package/dist/commands/artifacts.js +69 -64
  4. package/dist/commands/cloud.d.ts +228 -88
  5. package/dist/commands/cloud.js +430 -342
  6. package/dist/commands/list.d.ts +39 -38
  7. package/dist/commands/list.js +124 -131
  8. package/dist/commands/live.d.ts +2 -0
  9. package/dist/commands/live.js +520 -0
  10. package/dist/commands/login.d.ts +17 -0
  11. package/dist/commands/login.js +252 -0
  12. package/dist/commands/logout.d.ts +2 -0
  13. package/dist/commands/logout.js +30 -0
  14. package/dist/commands/status.d.ts +23 -42
  15. package/dist/commands/status.js +170 -179
  16. package/dist/commands/switch-org.d.ts +12 -0
  17. package/dist/commands/switch-org.js +76 -0
  18. package/dist/commands/upgrade.d.ts +2 -0
  19. package/dist/commands/upgrade.js +120 -0
  20. package/dist/commands/upload.d.ts +33 -18
  21. package/dist/commands/upload.js +72 -78
  22. package/dist/commands/whoami.d.ts +2 -0
  23. package/dist/commands/whoami.js +31 -0
  24. package/dist/config/environments.d.ts +31 -0
  25. package/dist/config/environments.js +52 -0
  26. package/dist/config/flags/api.flags.d.ts +10 -2
  27. package/dist/config/flags/api.flags.js +13 -14
  28. package/dist/config/flags/binary.flags.d.ts +17 -4
  29. package/dist/config/flags/binary.flags.js +14 -18
  30. package/dist/config/flags/device.flags.d.ts +49 -11
  31. package/dist/config/flags/device.flags.js +43 -38
  32. package/dist/config/flags/environment.flags.d.ts +27 -6
  33. package/dist/config/flags/environment.flags.js +24 -29
  34. package/dist/config/flags/execution.flags.d.ts +35 -8
  35. package/dist/config/flags/execution.flags.js +31 -41
  36. package/dist/config/flags/github.flags.d.ts +23 -5
  37. package/dist/config/flags/github.flags.js +19 -15
  38. package/dist/config/flags/output.flags.d.ts +57 -13
  39. package/dist/config/flags/output.flags.js +48 -47
  40. package/dist/constants.d.ts +218 -51
  41. package/dist/constants.js +17 -20
  42. package/dist/gateways/api-gateway.d.ts +72 -16
  43. package/dist/gateways/api-gateway.js +298 -104
  44. package/dist/gateways/cli-auth-gateway.d.ts +13 -0
  45. package/dist/gateways/cli-auth-gateway.js +54 -0
  46. package/dist/gateways/realtime-gateway.d.ts +32 -0
  47. package/dist/gateways/realtime-gateway.js +103 -0
  48. package/dist/gateways/supabase-gateway.d.ts +11 -11
  49. package/dist/gateways/supabase-gateway.js +20 -48
  50. package/dist/index.d.ts +2 -1
  51. package/dist/index.js +98 -4
  52. package/dist/mcp/context.d.ts +33 -0
  53. package/dist/mcp/context.js +33 -0
  54. package/dist/mcp/helpers.d.ts +16 -0
  55. package/dist/mcp/helpers.js +34 -0
  56. package/dist/mcp/index.d.ts +2 -0
  57. package/dist/mcp/index.js +24 -0
  58. package/dist/mcp/server.d.ts +7 -0
  59. package/dist/mcp/server.js +27 -0
  60. package/dist/mcp/tools/download-artifacts.d.ts +11 -0
  61. package/dist/mcp/tools/download-artifacts.js +84 -0
  62. package/dist/mcp/tools/get-status.d.ts +7 -0
  63. package/dist/mcp/tools/get-status.js +39 -0
  64. package/dist/mcp/tools/list-devices.d.ts +7 -0
  65. package/dist/mcp/tools/list-devices.js +27 -0
  66. package/dist/mcp/tools/list-runs.d.ts +3 -0
  67. package/dist/mcp/tools/list-runs.js +60 -0
  68. package/dist/mcp/tools/run-cloud-test.d.ts +14 -0
  69. package/dist/mcp/tools/run-cloud-test.js +233 -0
  70. package/dist/methods.d.ts +34 -5
  71. package/dist/methods.js +266 -215
  72. package/dist/services/device-validation.service.d.ts +9 -1
  73. package/dist/services/device-validation.service.js +56 -40
  74. package/dist/services/execution-plan.service.js +40 -31
  75. package/dist/services/execution-plan.utils.d.ts +3 -0
  76. package/dist/services/execution-plan.utils.js +25 -55
  77. package/dist/services/flow-paths.d.ts +17 -0
  78. package/dist/services/flow-paths.js +52 -0
  79. package/dist/services/metadata-extractor.service.d.ts +0 -2
  80. package/dist/services/metadata-extractor.service.js +75 -78
  81. package/dist/services/moropo.service.js +33 -34
  82. package/dist/services/report-download.service.d.ts +12 -1
  83. package/dist/services/report-download.service.js +34 -27
  84. package/dist/services/results-polling.service.d.ts +23 -9
  85. package/dist/services/results-polling.service.js +257 -123
  86. package/dist/services/telemetry.service.d.ts +49 -0
  87. package/dist/services/telemetry.service.js +252 -0
  88. package/dist/services/test-submission.service.d.ts +21 -4
  89. package/dist/services/test-submission.service.js +51 -33
  90. package/dist/services/version.service.d.ts +4 -3
  91. package/dist/services/version.service.js +28 -16
  92. package/dist/types/domain/auth.types.d.ts +20 -0
  93. package/dist/types/domain/auth.types.js +1 -0
  94. package/dist/types/domain/device.types.js +8 -11
  95. package/dist/types/domain/live.types.d.ts +76 -0
  96. package/dist/types/domain/live.types.js +3 -0
  97. package/dist/types/generated/schema.types.js +1 -2
  98. package/dist/types/index.d.ts +2 -2
  99. package/dist/types/index.js +2 -18
  100. package/dist/types.js +1 -2
  101. package/dist/utils/auth.d.ts +13 -0
  102. package/dist/utils/auth.js +141 -0
  103. package/dist/utils/ci.d.ts +12 -0
  104. package/dist/utils/ci.js +39 -0
  105. package/dist/utils/cli.d.ts +35 -0
  106. package/dist/utils/cli.js +118 -0
  107. package/dist/utils/compatibility.d.ts +2 -1
  108. package/dist/utils/compatibility.js +6 -8
  109. package/dist/utils/config-store.d.ts +35 -0
  110. package/dist/utils/config-store.js +115 -0
  111. package/dist/utils/connectivity.js +8 -7
  112. package/dist/utils/expo.js +29 -24
  113. package/dist/utils/orgs.d.ts +11 -0
  114. package/dist/utils/orgs.js +36 -0
  115. package/dist/utils/paths.d.ts +11 -0
  116. package/dist/utils/paths.js +21 -0
  117. package/dist/utils/progress.d.ts +13 -0
  118. package/dist/utils/progress.js +47 -0
  119. package/dist/utils/styling.d.ts +42 -36
  120. package/dist/utils/styling.js +78 -82
  121. package/dist/utils/ui.d.ts +41 -0
  122. package/dist/utils/ui.js +95 -0
  123. package/package.json +36 -45
  124. package/bin/dev.cmd +0 -3
  125. package/bin/dev.js +0 -6
  126. package/bin/run.cmd +0 -3
  127. package/bin/run.js +0 -7
  128. package/dist/types/schema.types.d.ts +0 -2702
  129. package/dist/types/schema.types.js +0 -3
  130. package/oclif.manifest.json +0 -884
@@ -1,37 +1,32 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.environmentFlags = void 0;
4
- const core_1 = require("@oclif/core");
5
1
  /**
6
2
  * Environment configuration and metadata flags
7
3
  */
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({
4
+ export const environmentFlags = {
5
+ env: {
6
+ type: 'string',
7
+ alias: ['e'],
8
+ description: 'One or more environment variables to inject into your flows (format: KEY=VALUE, may be repeated)',
9
+ valueHint: 'KEY=VALUE',
10
+ },
11
+ metadata: {
12
+ type: 'string',
13
+ alias: ['m'],
14
+ description: 'Arbitrary key-value metadata to include with your test run (format: key=value, may be repeated)',
15
+ },
16
+ mitmHost: {
17
+ type: 'string',
22
18
  description: 'used for mitmproxy support, enterprise only, contact support if interested',
23
- hidden: true,
24
- }),
25
- mitmPath: core_1.Flags.string({
26
- dependsOn: ['mitmHost'],
19
+ },
20
+ mitmPath: {
21
+ type: 'string',
27
22
  description: 'used for mitmproxy support, enterprise only, contact support if interested',
28
- hidden: true,
29
- }),
30
- 'moropo-v1-api-key': core_1.Flags.string({
23
+ },
24
+ 'moropo-v1-api-key': {
25
+ type: 'string',
31
26
  description: 'API key for Moropo v1 integration',
32
- required: false,
33
- }),
34
- name: core_1.Flags.string({
27
+ },
28
+ name: {
29
+ type: 'string',
35
30
  description: 'A custom name for your upload (useful for tagging commits etc)',
36
- }),
31
+ },
37
32
  };
@@ -2,12 +2,39 @@
2
2
  * Test execution and flow management flags
3
3
  */
4
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>;
5
+ readonly config: {
6
+ readonly type: "string";
7
+ readonly description: "Path to custom config.yaml file. If not provided, defaults to config.yaml in root flows folders.";
8
+ readonly valueHint: "path";
9
+ };
10
+ readonly 'exclude-flows': {
11
+ readonly type: "string";
12
+ readonly description: "Sub directories to ignore when building the flow file list (comma-separated, may be repeated)";
13
+ };
14
+ readonly 'exclude-tags': {
15
+ readonly type: "string";
16
+ readonly description: "Flows which have these tags will be excluded from the run (comma-separated, may be repeated)";
17
+ };
18
+ readonly flows: {
19
+ readonly type: "string";
20
+ readonly description: "The path to the flow file or folder containing your flows";
21
+ };
22
+ readonly 'include-tags': {
23
+ readonly type: "string";
24
+ readonly description: "Only flows which have these tags will be included in the run (comma-separated, may be repeated)";
25
+ };
26
+ readonly 'maestro-version': {
27
+ readonly type: "string";
28
+ readonly alias: ["maestroVersion"];
29
+ readonly description: "Maestro version to run your flow against. Use \"latest\" for the most recent version. See https://docs.devicecloud.dev/configuration/maestro-versions for supported versions.";
30
+ };
31
+ readonly retry: {
32
+ readonly type: "string";
33
+ readonly description: "Automatically retry the run up to the number of times specified (same as pressing retry in the UI) - this is free of charge";
34
+ };
35
+ readonly 'runner-type': {
36
+ readonly type: "string";
37
+ readonly default: "default";
38
+ readonly description: "[experimental] The type of runner to use (options: default, m4, m1, gpu1, cpu1) - note: anything other than default or cpu1 will incur premium pricing tiers, see https://docs.devicecloud.dev/configuration/runner-type for more information.";
39
+ };
13
40
  };
@@ -1,50 +1,40 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executionFlags = void 0;
4
- const core_1 = require("@oclif/core");
5
1
  /**
6
2
  * Test execution and flow management flags
7
3
  */
8
- exports.executionFlags = {
9
- config: core_1.Flags.file({
4
+ export const executionFlags = {
5
+ config: {
6
+ type: 'string',
10
7
  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({
8
+ valueHint: 'path',
9
+ },
10
+ 'exclude-flows': {
11
+ type: 'string',
12
+ description: 'Sub directories to ignore when building the flow file list (comma-separated, may be repeated)',
13
+ },
14
+ 'exclude-tags': {
15
+ type: 'string',
16
+ description: 'Flows which have these tags will be excluded from the run (comma-separated, may be repeated)',
17
+ },
18
+ flows: {
19
+ type: 'string',
28
20
  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'],
21
+ },
22
+ 'include-tags': {
23
+ type: 'string',
24
+ description: 'Only flows which have these tags will be included in the run (comma-separated, may be repeated)',
25
+ },
26
+ 'maestro-version': {
27
+ type: 'string',
28
+ alias: ['maestroVersion'],
40
29
  description: 'Maestro version to run your flow against. Use "latest" for the most recent version. See https://docs.devicecloud.dev/configuration/maestro-versions for supported versions.',
41
- }),
42
- retry: core_1.Flags.integer({
30
+ },
31
+ retry: {
32
+ type: 'string',
43
33
  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({
34
+ },
35
+ 'runner-type': {
36
+ type: 'string',
46
37
  default: 'default',
47
- description: '[experimental] The type of runner to use - note: anything other than default or cpu1 will incur premium pricing tiers, see https://docs.devicecloud.dev/configuration/runner-type for more information.',
48
- options: ['default', 'm4', 'm1', 'gpu1', 'cpu1'],
49
- }),
38
+ description: '[experimental] The type of runner to use (options: default, m4, m1, gpu1, cpu1) - note: anything other than default or cpu1 will incur premium pricing tiers, see https://docs.devicecloud.dev/configuration/runner-type for more information.',
39
+ },
50
40
  };
@@ -1,7 +1,25 @@
1
+ /**
2
+ * GitHub context flags — stored as gh_* metadata alongside the run
3
+ */
1
4
  export declare const githubFlags: {
2
- branch: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
3
- 'commit-sha': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
4
- 'repo-name': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
5
- 'pr-number': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
6
- 'pr-url': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
5
+ readonly branch: {
6
+ readonly type: "string";
7
+ readonly description: "Git branch name for this run (stored as gh_branch metadata)";
8
+ };
9
+ readonly 'commit-sha': {
10
+ readonly type: "string";
11
+ readonly description: "Git commit SHA for this run (stored as gh_sha metadata)";
12
+ };
13
+ readonly 'repo-name': {
14
+ readonly type: "string";
15
+ readonly description: "Repository in owner/repo format (stored as gh_repo metadata, e.g. \"acme/my-app\")";
16
+ };
17
+ readonly 'pr-number': {
18
+ readonly type: "string";
19
+ readonly description: "Pull request number for this run (stored as gh_pr_number metadata)";
20
+ };
21
+ readonly 'pr-url': {
22
+ readonly type: "string";
23
+ readonly description: "Pull request URL for this run (stored as gh_pr_url metadata)";
24
+ };
7
25
  };
@@ -1,21 +1,25 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.githubFlags = void 0;
4
- const core_1 = require("@oclif/core");
5
- exports.githubFlags = {
6
- branch: core_1.Flags.string({
1
+ /**
2
+ * GitHub context flags — stored as gh_* metadata alongside the run
3
+ */
4
+ export const githubFlags = {
5
+ branch: {
6
+ type: 'string',
7
7
  description: 'Git branch name for this run (stored as gh_branch metadata)',
8
- }),
9
- 'commit-sha': core_1.Flags.string({
8
+ },
9
+ 'commit-sha': {
10
+ type: 'string',
10
11
  description: 'Git commit SHA for this run (stored as gh_sha metadata)',
11
- }),
12
- 'repo-name': core_1.Flags.string({
12
+ },
13
+ 'repo-name': {
14
+ type: 'string',
13
15
  description: 'Repository in owner/repo format (stored as gh_repo metadata, e.g. "acme/my-app")',
14
- }),
15
- 'pr-number': core_1.Flags.string({
16
+ },
17
+ 'pr-number': {
18
+ type: 'string',
16
19
  description: 'Pull request number for this run (stored as gh_pr_number metadata)',
17
- }),
18
- 'pr-url': core_1.Flags.string({
20
+ },
21
+ 'pr-url': {
22
+ type: 'string',
19
23
  description: 'Pull request URL for this run (stored as gh_pr_url metadata)',
20
- }),
24
+ },
21
25
  };
@@ -2,17 +2,61 @@
2
2
  * Output format and artifact download flags
3
3
  */
4
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>;
5
+ readonly 'artifacts-path': {
6
+ readonly type: "string";
7
+ readonly description: "Custom file path for downloaded artifacts (default: ./artifacts.zip). Requires --download-artifacts.";
8
+ };
9
+ readonly 'junit-path': {
10
+ readonly type: "string";
11
+ readonly description: "Custom file path for downloaded JUnit report (requires --report junit, default: ./report.xml)";
12
+ };
13
+ readonly 'allure-path': {
14
+ readonly type: "string";
15
+ readonly description: "Custom file path for downloaded Allure report (requires --report allure, default: ./report.html)";
16
+ };
17
+ readonly 'html-path': {
18
+ readonly type: "string";
19
+ readonly description: "Custom file path for downloaded HTML report (requires --report html, default: ./report.html)";
20
+ };
21
+ readonly async: {
22
+ readonly type: "boolean";
23
+ readonly description: "Immediately return (exit code 0) from the command without waiting for the results of the run (useful for saving CI minutes)";
24
+ };
25
+ readonly debug: {
26
+ readonly type: "boolean";
27
+ readonly default: false;
28
+ readonly description: "Enable detailed debug logging for troubleshooting issues";
29
+ };
30
+ readonly 'download-artifacts': {
31
+ readonly type: "string";
32
+ readonly description: "Download a zip containing the logs, screenshots and videos for each result in this run (options: ALL, FAILED)";
33
+ };
34
+ readonly 'dry-run': {
35
+ readonly type: "boolean";
36
+ readonly default: false;
37
+ readonly description: "Simulate the run without actually triggering the upload/test, useful for debugging workflow issues.";
38
+ };
39
+ readonly json: {
40
+ readonly type: "boolean";
41
+ readonly description: "Output results in JSON format. Exit codes: 0 on success, 2 if the test run fails, 1 on CLI/infrastructure errors";
42
+ };
43
+ readonly 'json-file': {
44
+ readonly type: "boolean";
45
+ readonly description: "Write JSON output to a file. File will be called <upload_id>_dcd.json unless you supply the --json-file-name flag - note: exits with code 0 even if the test run fails (CLI/infrastructure errors still exit 1)";
46
+ };
47
+ readonly 'json-file-name': {
48
+ readonly type: "string";
49
+ readonly description: "A custom name for the JSON file (can also include relative path). Requires --json-file.";
50
+ };
51
+ readonly quiet: {
52
+ readonly type: "boolean";
53
+ readonly alias: ["q"];
54
+ readonly default: false;
55
+ readonly description: "Quieter console output that won't provide progress updates";
56
+ };
57
+ readonly report: {
58
+ readonly type: "string";
59
+ readonly alias: ["format"];
60
+ readonly description: "Generate and download test reports in the specified format (options: allure, junit, html, html-detailed). Use \"allure\" for a complete HTML report.";
61
+ };
18
62
  };
@@ -1,61 +1,62 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.outputFlags = void 0;
4
- const core_1 = require("@oclif/core");
5
1
  /**
6
2
  * Output format and artifact download flags
7
3
  */
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'],
4
+ export const outputFlags = {
5
+ 'artifacts-path': {
6
+ type: 'string',
7
+ description: 'Custom file path for downloaded artifacts (default: ./artifacts.zip). Requires --download-artifacts.',
8
+ },
9
+ 'junit-path': {
10
+ type: 'string',
15
11
  description: 'Custom file path for downloaded JUnit report (requires --report junit, default: ./report.xml)',
16
- }),
17
- 'allure-path': core_1.Flags.string({
18
- dependsOn: ['report'],
12
+ },
13
+ 'allure-path': {
14
+ type: 'string',
19
15
  description: 'Custom file path for downloaded Allure report (requires --report allure, default: ./report.html)',
20
- }),
21
- 'html-path': core_1.Flags.string({
22
- dependsOn: ['report'],
16
+ },
17
+ 'html-path': {
18
+ type: 'string',
23
19
  description: 'Custom file path for downloaded HTML report (requires --report html, default: ./report.html)',
24
- }),
25
- async: core_1.Flags.boolean({
20
+ },
21
+ async: {
22
+ type: 'boolean',
26
23
  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({
24
+ },
25
+ debug: {
26
+ type: 'boolean',
29
27
  default: false,
30
28
  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. Options: ALL (everything), FAILED (failures only).',
34
- options: ['ALL', 'FAILED'],
35
- }),
36
- 'dry-run': core_1.Flags.boolean({
29
+ },
30
+ 'download-artifacts': {
31
+ type: 'string',
32
+ description: 'Download a zip containing the logs, screenshots and videos for each result in this run (options: ALL, FAILED)',
33
+ },
34
+ 'dry-run': {
35
+ type: 'boolean',
37
36
  default: false,
38
37
  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 will 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',
38
+ },
39
+ json: {
40
+ type: 'boolean',
41
+ description: 'Output results in JSON format. Exit codes: 0 on success, 2 if the test run fails, 1 on CLI/infrastructure errors',
42
+ },
43
+ 'json-file': {
44
+ type: 'boolean',
45
+ description: 'Write JSON output to a file. File will be called <upload_id>_dcd.json unless you supply the --json-file-name flag - note: exits with code 0 even if the test run fails (CLI/infrastructure errors still exit 1)',
46
+ },
47
+ 'json-file-name': {
48
+ type: 'string',
49
+ description: 'A custom name for the JSON file (can also include relative path). Requires --json-file.',
50
+ },
51
+ quiet: {
52
+ type: 'boolean',
53
+ alias: ['q'],
53
54
  default: false,
54
55
  description: "Quieter console output that won't 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', 'html-detailed'],
60
- }),
56
+ },
57
+ report: {
58
+ type: 'string',
59
+ alias: ['format'],
60
+ description: 'Generate and download test reports in the specified format (options: allure, junit, html, html-detailed). Use "allure" for a complete HTML report.',
61
+ },
61
62
  };