@devicecloud.dev/dcd 5.8.0-beta.1 → 5.8.0-beta.2
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 +5 -0
- package/dist/commands/cloud.js +3 -0
- package/dist/config/flags/execution.flags.d.ts +5 -0
- package/dist/config/flags/execution.flags.js +5 -0
- package/dist/constants.d.ts +5 -0
- package/dist/mcp/tools/run-cloud-test.js +5 -0
- package/dist/services/test-submission.service.d.ts +7 -0
- package/dist/services/test-submission.service.js +6 -1
- package/package.json +2 -2
package/dist/commands/cloud.d.ts
CHANGED
|
@@ -129,6 +129,11 @@ export declare const cloudCommand: import("citty").CommandDef<{
|
|
|
129
129
|
readonly alias: ["maestroVersion"];
|
|
130
130
|
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.";
|
|
131
131
|
};
|
|
132
|
+
readonly priority: {
|
|
133
|
+
readonly type: "string";
|
|
134
|
+
readonly default: "normal";
|
|
135
|
+
readonly description: "Run priority within your organization (options: low, normal, high). Reorders only your own queued runs across your concurrency pool, for every flow in this upload; it never moves them ahead of other customers. Runs queued longer than 6 hours are promoted first, so low runs are never starved. Retries keep the same priority.";
|
|
136
|
+
};
|
|
132
137
|
readonly retry: {
|
|
133
138
|
readonly type: "string";
|
|
134
139
|
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";
|
package/dist/commands/cloud.js
CHANGED
|
@@ -42,6 +42,7 @@ const DOWNLOAD_OPTIONS = ['ALL', 'FAILED'];
|
|
|
42
42
|
const REPORT_OPTIONS = ['allure', 'html', 'html-detailed', 'junit'];
|
|
43
43
|
const ORIENTATION_OPTIONS = ['0', '90'];
|
|
44
44
|
const RUNNER_TYPE_OPTIONS = ['default', 'm4', 'm1', 'gpu1', 'cpu1'];
|
|
45
|
+
const PRIORITY_OPTIONS = ['low', 'normal', 'high'];
|
|
45
46
|
const RENDER_ENGINE_OPTIONS = ['lavapipe', 'swiftshader'];
|
|
46
47
|
/**
|
|
47
48
|
* Primary CLI command for executing tests on DeviceCloud.
|
|
@@ -162,6 +163,7 @@ export const cloudCommand = defineCommand({
|
|
|
162
163
|
const moropoApiKey = args['moropo-v1-api-key'];
|
|
163
164
|
const name = args.name;
|
|
164
165
|
const orientation = validateEnum(args.orientation, ORIENTATION_OPTIONS, 'orientation');
|
|
166
|
+
const priority = validateEnum(args.priority, PRIORITY_OPTIONS, 'priority') ?? 'normal';
|
|
165
167
|
let quiet = Boolean(args.quiet);
|
|
166
168
|
const report = validateEnum(args.report, REPORT_OPTIONS, 'report');
|
|
167
169
|
let retry = parseIntFlag(args.retry, 'retry');
|
|
@@ -600,6 +602,7 @@ export const cloudCommand = defineCommand({
|
|
|
600
602
|
metadata: mergedMetadata,
|
|
601
603
|
name,
|
|
602
604
|
orientation,
|
|
605
|
+
priority,
|
|
603
606
|
raw: [],
|
|
604
607
|
report,
|
|
605
608
|
retry,
|
|
@@ -33,6 +33,11 @@ export declare const executionFlags: {
|
|
|
33
33
|
readonly alias: ["maestroVersion"];
|
|
34
34
|
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.";
|
|
35
35
|
};
|
|
36
|
+
readonly priority: {
|
|
37
|
+
readonly type: "string";
|
|
38
|
+
readonly default: "normal";
|
|
39
|
+
readonly description: "Run priority within your organization (options: low, normal, high). Reorders only your own queued runs across your concurrency pool, for every flow in this upload; it never moves them ahead of other customers. Runs queued longer than 6 hours are promoted first, so low runs are never starved. Retries keep the same priority.";
|
|
40
|
+
};
|
|
36
41
|
readonly retry: {
|
|
37
42
|
readonly type: "string";
|
|
38
43
|
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";
|
|
@@ -33,6 +33,11 @@ export const executionFlags = {
|
|
|
33
33
|
alias: ['maestroVersion'],
|
|
34
34
|
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.',
|
|
35
35
|
},
|
|
36
|
+
priority: {
|
|
37
|
+
type: 'string',
|
|
38
|
+
default: 'normal',
|
|
39
|
+
description: 'Run priority within your organization (options: low, normal, high). Reorders only your own queued runs across your concurrency pool, for every flow in this upload; it never moves them ahead of other customers. Runs queued longer than 6 hours are promoted first, so low runs are never starved. Retries keep the same priority.',
|
|
40
|
+
},
|
|
36
41
|
retry: {
|
|
37
42
|
type: 'string',
|
|
38
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',
|
package/dist/constants.d.ts
CHANGED
|
@@ -115,6 +115,11 @@ export declare const flags: {
|
|
|
115
115
|
readonly alias: ["maestroVersion"];
|
|
116
116
|
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.";
|
|
117
117
|
};
|
|
118
|
+
readonly priority: {
|
|
119
|
+
readonly type: "string";
|
|
120
|
+
readonly default: "normal";
|
|
121
|
+
readonly description: "Run priority within your organization (options: low, normal, high). Reorders only your own queued runs across your concurrency pool, for every flow in this upload; it never moves them ahead of other customers. Runs queued longer than 6 hours are promoted first, so low runs are never starved. Retries keep the same priority.";
|
|
122
|
+
};
|
|
118
123
|
readonly retry: {
|
|
119
124
|
readonly type: "string";
|
|
120
125
|
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";
|
|
@@ -70,6 +70,10 @@ export function registerRunCloudTest(server) {
|
|
|
70
70
|
.enum(['default', 'm4', 'm1', 'gpu1', 'cpu1'])
|
|
71
71
|
.optional()
|
|
72
72
|
.describe('Runner type (default "default"). gpu1 is deprecated and will be removed on 9 November 2026; prefer cpu1.'),
|
|
73
|
+
priority: z
|
|
74
|
+
.enum(['low', 'normal', 'high'])
|
|
75
|
+
.optional()
|
|
76
|
+
.describe('Run priority within the organization (default "normal"). Reorders only the queued runs of this organization, for every flow in this upload; it never moves them ahead of other customers. Runs queued over 6 hours are promoted first, so low runs are never starved.'),
|
|
73
77
|
configFile: z.string().optional().describe('Path to a workspace config.yaml'),
|
|
74
78
|
ignoreShaCheck: z
|
|
75
79
|
.boolean()
|
|
@@ -208,6 +212,7 @@ export function registerRunCloudTest(server) {
|
|
|
208
212
|
iOSDevice: args.iosDevice,
|
|
209
213
|
iOSVersion: args.iosVersion,
|
|
210
214
|
name: args.name,
|
|
215
|
+
priority: args.priority,
|
|
211
216
|
runnerType: args.runnerType ?? 'default',
|
|
212
217
|
maestroVersion: resolvedMaestroVersion,
|
|
213
218
|
retry: args.retry,
|
|
@@ -50,6 +50,13 @@ export interface TestSubmissionConfig {
|
|
|
50
50
|
metadata?: string[];
|
|
51
51
|
name?: string;
|
|
52
52
|
orientation?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Where this upload sits among the org's own queued runs. Like
|
|
55
|
+
* `cancelPrevious`, sent as its own field rather than inside `config`: it is
|
|
56
|
+
* a scheduling directive for the whole upload, not run configuration. Only
|
|
57
|
+
* reorders the org's own queue; it never moves the org ahead of others.
|
|
58
|
+
*/
|
|
59
|
+
priority?: 'low' | 'normal' | 'high';
|
|
53
60
|
raw?: unknown;
|
|
54
61
|
/**
|
|
55
62
|
* Which emulator software renderer to boot with (Android only). Omitted
|
|
@@ -20,7 +20,7 @@ export class TestSubmissionService {
|
|
|
20
20
|
* @returns The flow zip buffer, its SHA-256, and the string-encoded fields
|
|
21
21
|
*/
|
|
22
22
|
async buildTestPayload(config) {
|
|
23
|
-
const { apiUrl, appBinaryId, appPlatform, encrypt, flowFile, executionPlan, commonRoot, cliVersion, env = [], metadata = [], cancelPrevious = false, googlePlay = false, androidApiLevel, androidDevice, androidNoSnapshot, iOSVersion, iOSDevice, name, runnerType, maestroVersion, deviceLocale, orientation, retry, continueOnFailure = true, renderEngine, report, showCrosshairs, maestroChromeOnboarding, raw, disableAnimations, deviceMatrix, debug = false, logger, } = config;
|
|
23
|
+
const { apiUrl, appBinaryId, appPlatform, encrypt, flowFile, executionPlan, commonRoot, cliVersion, env = [], metadata = [], cancelPrevious = false, googlePlay = false, androidApiLevel, androidDevice, androidNoSnapshot, iOSVersion, iOSDevice, name, runnerType, maestroVersion, deviceLocale, orientation, priority, retry, continueOnFailure = true, renderEngine, report, showCrosshairs, maestroChromeOnboarding, raw, disableAnimations, deviceMatrix, debug = false, logger, } = config;
|
|
24
24
|
const { allExcludeTags, allIncludeTags, flowMetadata, flowOverrides, flowsToRun: testFileNames, includedFiles = [], referencedFiles, sequence, workspaceConfig, } = executionPlan;
|
|
25
25
|
const { flows: sequentialFlows = [] } = sequence ?? {};
|
|
26
26
|
const envObject = this.parseKeyValuePairs(env);
|
|
@@ -168,6 +168,11 @@ export class TestSubmissionService {
|
|
|
168
168
|
if (cancelPrevious) {
|
|
169
169
|
fields.cancelPrevious = 'true';
|
|
170
170
|
}
|
|
171
|
+
// Same reasoning: 'normal' is the default and is never sent, so the
|
|
172
|
+
// default path's wire shape is unchanged and an older API never sees it.
|
|
173
|
+
if (priority && priority !== 'normal') {
|
|
174
|
+
fields.priority = priority;
|
|
175
|
+
}
|
|
171
176
|
this.setOptionalFields(fields, {
|
|
172
177
|
androidApiLevel,
|
|
173
178
|
androidDevice,
|
package/package.json
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"chai": "^6.2.2",
|
|
31
31
|
"eslint": "^10.5.0",
|
|
32
32
|
"eslint-config-prettier": "^10.1.8",
|
|
33
|
-
"eslint-plugin-unicorn": "^
|
|
33
|
+
"eslint-plugin-unicorn": "^77.0.0",
|
|
34
34
|
"husky": "^9.1.7",
|
|
35
35
|
"mocha": "^12.0.0",
|
|
36
36
|
"prettier": "^3.8.4",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"test:unit": "node scripts/test-runner.mjs --unit",
|
|
69
69
|
"typecheck": "tsc --noEmit -p tsconfig.test.json"
|
|
70
70
|
},
|
|
71
|
-
"version": "5.8.0-beta.
|
|
71
|
+
"version": "5.8.0-beta.2",
|
|
72
72
|
"bugs": {
|
|
73
73
|
"url": "https://discord.gg/gm3mJwcNw8"
|
|
74
74
|
},
|