@testingbot/cli 1.0.4 → 1.0.6
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/cli.d.ts.map +1 -1
- package/dist/cli.js +45 -1
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +4 -0
- package/dist/models/espresso_options.d.ts +3 -0
- package/dist/models/espresso_options.d.ts.map +1 -1
- package/dist/models/espresso_options.js +5 -0
- package/dist/models/maestro_options.d.ts +6 -0
- package/dist/models/maestro_options.d.ts.map +1 -1
- package/dist/models/maestro_options.js +12 -1
- package/dist/models/xcuitest_options.d.ts +3 -0
- package/dist/models/xcuitest_options.d.ts.map +1 -1
- package/dist/models/xcuitest_options.js +5 -0
- package/dist/providers/base_provider.d.ts +14 -0
- package/dist/providers/base_provider.d.ts.map +1 -1
- package/dist/providers/base_provider.js +18 -0
- package/dist/providers/espresso.d.ts.map +1 -1
- package/dist/providers/espresso.js +27 -0
- package/dist/providers/maestro.d.ts +22 -1
- package/dist/providers/maestro.d.ts.map +1 -1
- package/dist/providers/maestro.js +222 -89
- package/dist/providers/xcuitest.d.ts.map +1 -1
- package/dist/providers/xcuitest.js +27 -0
- package/dist/utils/connectivity.js +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +8 -2
- package/package.json +7 -7
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA4lB9B,eAAe,OAAO,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,10 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
const commander_1 = require("commander");
|
|
7
|
-
const logger_1 =
|
|
40
|
+
const logger_1 = __importStar(require("./logger"));
|
|
8
41
|
const auth_1 = __importDefault(require("./auth"));
|
|
9
42
|
const espresso_1 = __importDefault(require("./providers/espresso"));
|
|
10
43
|
const espresso_options_1 = __importDefault(require("./models/espresso_options"));
|
|
@@ -57,6 +90,7 @@ const espressoCommand = program
|
|
|
57
90
|
// Execution mode
|
|
58
91
|
.option('-q, --quiet', 'Quieter console output without progress updates.')
|
|
59
92
|
.option('--async', 'Start tests and exit immediately without waiting for results.')
|
|
93
|
+
.option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
|
|
60
94
|
// Report options
|
|
61
95
|
.option('--report <format>', 'Download test report after completion: html or junit.', (val) => val.toLowerCase())
|
|
62
96
|
.option('--report-output-dir <path>', 'Directory to save test reports (required when --report is used).')
|
|
@@ -107,6 +141,7 @@ const espressoCommand = program
|
|
|
107
141
|
throttleNetwork: args.throttleNetwork,
|
|
108
142
|
quiet: args.quiet,
|
|
109
143
|
async: args.async,
|
|
144
|
+
dryRun: args.dryRun,
|
|
110
145
|
report: args.report,
|
|
111
146
|
reportOutputDir: args.reportOutputDir,
|
|
112
147
|
metadata,
|
|
@@ -167,6 +202,7 @@ const maestroCommand = program
|
|
|
167
202
|
// Execution mode
|
|
168
203
|
.option('-q, --quiet', 'Quieter console output without progress updates.')
|
|
169
204
|
.option('--async', 'Start tests and exit immediately without waiting for results.')
|
|
205
|
+
.option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
|
|
170
206
|
// Report options
|
|
171
207
|
.option('--report <format>', 'Download test report after completion: html or junit.', (val) => val.toLowerCase())
|
|
172
208
|
.option('--report-output-dir <path>', 'Directory to save test reports (required when --report is used).')
|
|
@@ -183,6 +219,7 @@ const maestroCommand = program
|
|
|
183
219
|
// Authentication
|
|
184
220
|
.option('--api-key <key>', 'TestingBot API key.')
|
|
185
221
|
.option('--api-secret <secret>', 'TestingBot API secret.')
|
|
222
|
+
.option('--debug', 'Enable debug logging of API responses.')
|
|
186
223
|
.action(async (appFileArg, flowsArgs, args) => {
|
|
187
224
|
try {
|
|
188
225
|
let app;
|
|
@@ -236,6 +273,7 @@ const maestroCommand = program
|
|
|
236
273
|
maestroVersion: args.maestroVersion,
|
|
237
274
|
quiet: args.quiet,
|
|
238
275
|
async: args.async,
|
|
276
|
+
dryRun: args.dryRun,
|
|
239
277
|
report: args.report,
|
|
240
278
|
reportOutputDir: args.reportOutputDir,
|
|
241
279
|
realDevice: args.realDevice,
|
|
@@ -245,6 +283,7 @@ const maestroCommand = program
|
|
|
245
283
|
artifactsOutputDir: args.artifactsOutputDir,
|
|
246
284
|
ignoreChecksumCheck: args.ignoreChecksumCheck,
|
|
247
285
|
shardSplit: args.shardSplit,
|
|
286
|
+
debug: args.debug,
|
|
248
287
|
metadata,
|
|
249
288
|
});
|
|
250
289
|
const credentials = await auth_1.default.getCredentials({
|
|
@@ -258,6 +297,9 @@ const maestroCommand = program
|
|
|
258
297
|
' 3. Set TB_KEY and TB_SECRET environment variables\n' +
|
|
259
298
|
' 4. Create ~/.testingbot file with content: key:secret');
|
|
260
299
|
}
|
|
300
|
+
if (args.debug) {
|
|
301
|
+
(0, logger_1.enableDebugLogging)();
|
|
302
|
+
}
|
|
261
303
|
const maestro = new maestro_1.default(credentials, options);
|
|
262
304
|
const result = await maestro.run();
|
|
263
305
|
if (!result.success) {
|
|
@@ -299,6 +341,7 @@ const xcuitestCommand = program
|
|
|
299
341
|
// Execution mode
|
|
300
342
|
.option('-q, --quiet', 'Quieter console output without progress updates.')
|
|
301
343
|
.option('--async', 'Start tests and exit immediately without waiting for results.')
|
|
344
|
+
.option('--dry-run', 'Validate and prepare everything but skip HTTP calls. Shows what would be sent.')
|
|
302
345
|
// Report options
|
|
303
346
|
.option('--report <format>', 'Download test report after completion: html or junit.', (val) => val.toLowerCase())
|
|
304
347
|
.option('--report-output-dir <path>', 'Directory to save test reports (required when --report is used).')
|
|
@@ -342,6 +385,7 @@ const xcuitestCommand = program
|
|
|
342
385
|
throttleNetwork: args.throttleNetwork,
|
|
343
386
|
quiet: args.quiet,
|
|
344
387
|
async: args.async,
|
|
388
|
+
dryRun: args.dryRun,
|
|
345
389
|
report: args.report,
|
|
346
390
|
reportOutputDir: args.reportOutputDir,
|
|
347
391
|
metadata,
|
package/dist/logger.d.ts
CHANGED
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,8BAWV,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,QAAA,MAAM,MAAM,8BAWV,CAAC;AAEH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,eAAe,MAAM,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.enableDebugLogging = enableDebugLogging;
|
|
6
7
|
const picocolors_1 = __importDefault(require("picocolors"));
|
|
7
8
|
const tracer_1 = __importDefault(require("tracer"));
|
|
8
9
|
const logger = tracer_1.default.colorConsole({
|
|
@@ -17,4 +18,7 @@ const logger = tracer_1.default.colorConsole({
|
|
|
17
18
|
},
|
|
18
19
|
],
|
|
19
20
|
});
|
|
21
|
+
function enableDebugLogging() {
|
|
22
|
+
tracer_1.default.setLevel('debug');
|
|
23
|
+
}
|
|
20
24
|
exports.default = logger;
|
|
@@ -63,6 +63,7 @@ export default class EspressoOptions {
|
|
|
63
63
|
private _throttleNetwork?;
|
|
64
64
|
private _quiet;
|
|
65
65
|
private _async;
|
|
66
|
+
private _dryRun;
|
|
66
67
|
private _report?;
|
|
67
68
|
private _reportOutputDir?;
|
|
68
69
|
private _metadata?;
|
|
@@ -88,6 +89,7 @@ export default class EspressoOptions {
|
|
|
88
89
|
throttleNetwork?: ThrottleNetwork | CustomNetworkProfile;
|
|
89
90
|
quiet?: boolean;
|
|
90
91
|
async?: boolean;
|
|
92
|
+
dryRun?: boolean;
|
|
91
93
|
report?: ReportFormat;
|
|
92
94
|
reportOutputDir?: string;
|
|
93
95
|
metadata?: RunMetadata;
|
|
@@ -116,6 +118,7 @@ export default class EspressoOptions {
|
|
|
116
118
|
get throttleNetwork(): ThrottleNetwork | CustomNetworkProfile | undefined;
|
|
117
119
|
get quiet(): boolean;
|
|
118
120
|
get async(): boolean;
|
|
121
|
+
get dryRun(): boolean;
|
|
119
122
|
get report(): ReportFormat | undefined;
|
|
120
123
|
get reportOutputDir(): string | undefined;
|
|
121
124
|
get metadata(): RunMetadata | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"espresso_options.d.ts","sourceRoot":"","sources":["../../src/models/espresso_options.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"espresso_options.d.ts","sourceRoot":"","sources":["../../src/models/espresso_options.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,7 @@ class EspressoOptions {
|
|
|
34
34
|
// Execution mode
|
|
35
35
|
_quiet;
|
|
36
36
|
_async;
|
|
37
|
+
_dryRun;
|
|
37
38
|
_report;
|
|
38
39
|
_reportOutputDir;
|
|
39
40
|
// Metadata
|
|
@@ -67,6 +68,7 @@ class EspressoOptions {
|
|
|
67
68
|
this._throttleNetwork = options?.throttleNetwork;
|
|
68
69
|
this._quiet = options?.quiet ?? false;
|
|
69
70
|
this._async = options?.async ?? false;
|
|
71
|
+
this._dryRun = options?.dryRun ?? false;
|
|
70
72
|
this._report = options?.report;
|
|
71
73
|
this._reportOutputDir = options?.reportOutputDir;
|
|
72
74
|
this._metadata = options?.metadata;
|
|
@@ -143,6 +145,9 @@ class EspressoOptions {
|
|
|
143
145
|
get async() {
|
|
144
146
|
return this._async;
|
|
145
147
|
}
|
|
148
|
+
get dryRun() {
|
|
149
|
+
return this._dryRun;
|
|
150
|
+
}
|
|
146
151
|
get report() {
|
|
147
152
|
return this._report;
|
|
148
153
|
}
|
|
@@ -51,6 +51,7 @@ export default class MaestroOptions {
|
|
|
51
51
|
private _maestroVersion?;
|
|
52
52
|
private _quiet;
|
|
53
53
|
private _async;
|
|
54
|
+
private _dryRun;
|
|
54
55
|
private _report?;
|
|
55
56
|
private _reportOutputDir?;
|
|
56
57
|
private _realDevice;
|
|
@@ -58,6 +59,7 @@ export default class MaestroOptions {
|
|
|
58
59
|
private _artifactsOutputDir?;
|
|
59
60
|
private _ignoreChecksumCheck;
|
|
60
61
|
private _shardSplit?;
|
|
62
|
+
private _debug;
|
|
61
63
|
private _metadata?;
|
|
62
64
|
constructor(app: string, flows: string | string[], device?: string, options?: {
|
|
63
65
|
includeTags?: string[];
|
|
@@ -74,6 +76,7 @@ export default class MaestroOptions {
|
|
|
74
76
|
maestroVersion?: string;
|
|
75
77
|
quiet?: boolean;
|
|
76
78
|
async?: boolean;
|
|
79
|
+
dryRun?: boolean;
|
|
77
80
|
report?: ReportFormat;
|
|
78
81
|
reportOutputDir?: string;
|
|
79
82
|
realDevice?: boolean;
|
|
@@ -81,6 +84,7 @@ export default class MaestroOptions {
|
|
|
81
84
|
artifactsOutputDir?: string;
|
|
82
85
|
ignoreChecksumCheck?: boolean;
|
|
83
86
|
shardSplit?: number;
|
|
87
|
+
debug?: boolean;
|
|
84
88
|
metadata?: RunMetadata;
|
|
85
89
|
});
|
|
86
90
|
get app(): string;
|
|
@@ -100,6 +104,7 @@ export default class MaestroOptions {
|
|
|
100
104
|
get maestroVersion(): string | undefined;
|
|
101
105
|
get quiet(): boolean;
|
|
102
106
|
get async(): boolean;
|
|
107
|
+
get dryRun(): boolean;
|
|
103
108
|
get report(): ReportFormat | undefined;
|
|
104
109
|
get reportOutputDir(): string | undefined;
|
|
105
110
|
get realDevice(): boolean;
|
|
@@ -107,6 +112,7 @@ export default class MaestroOptions {
|
|
|
107
112
|
get artifactsOutputDir(): string | undefined;
|
|
108
113
|
get ignoreChecksumCheck(): boolean;
|
|
109
114
|
get shardSplit(): number | undefined;
|
|
115
|
+
get debug(): boolean;
|
|
110
116
|
get metadata(): RunMetadata | undefined;
|
|
111
117
|
getMaestroOptions(): MaestroRunOptions | undefined;
|
|
112
118
|
getCapabilities(detectedPlatform?: 'Android' | 'iOS'): MaestroCapabilities;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CACtC;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5C,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,YAAY,CAAC,CAAW;IAChC,OAAO,CAAC,aAAa,CAAC,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAC3C,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,IAAI,CAAC,CAAyB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAClC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,kBAAkB,CAAC,CAAuB;IAClD,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,WAAW,CAAC,CAAS;
|
|
1
|
+
{"version":3,"file":"maestro_options.d.ts","sourceRoot":"","sources":["../../src/models/maestro_options.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,6 +21,7 @@ class MaestroOptions {
|
|
|
21
21
|
_maestroVersion;
|
|
22
22
|
_quiet;
|
|
23
23
|
_async;
|
|
24
|
+
_dryRun;
|
|
24
25
|
_report;
|
|
25
26
|
_reportOutputDir;
|
|
26
27
|
_realDevice;
|
|
@@ -28,6 +29,7 @@ class MaestroOptions {
|
|
|
28
29
|
_artifactsOutputDir;
|
|
29
30
|
_ignoreChecksumCheck;
|
|
30
31
|
_shardSplit;
|
|
32
|
+
_debug;
|
|
31
33
|
// Metadata
|
|
32
34
|
_metadata;
|
|
33
35
|
constructor(app, flows, device, options) {
|
|
@@ -48,14 +50,17 @@ class MaestroOptions {
|
|
|
48
50
|
this._maestroVersion = options?.maestroVersion;
|
|
49
51
|
this._quiet = options?.quiet ?? false;
|
|
50
52
|
this._async = options?.async ?? false;
|
|
53
|
+
this._dryRun = options?.dryRun ?? false;
|
|
51
54
|
this._report = options?.report;
|
|
52
55
|
this._reportOutputDir = options?.reportOutputDir;
|
|
53
56
|
// IPA files can only be tested on real iOS devices, so automatically enable realDevice
|
|
54
|
-
this._realDevice =
|
|
57
|
+
this._realDevice =
|
|
58
|
+
MaestroOptions.isIpaFile(app) || (options?.realDevice ?? false);
|
|
55
59
|
this._downloadArtifacts = options?.downloadArtifacts;
|
|
56
60
|
this._artifactsOutputDir = options?.artifactsOutputDir;
|
|
57
61
|
this._ignoreChecksumCheck = options?.ignoreChecksumCheck ?? false;
|
|
58
62
|
this._shardSplit = options?.shardSplit;
|
|
63
|
+
this._debug = options?.debug ?? false;
|
|
59
64
|
this._metadata = options?.metadata;
|
|
60
65
|
}
|
|
61
66
|
get app() {
|
|
@@ -109,6 +114,9 @@ class MaestroOptions {
|
|
|
109
114
|
get async() {
|
|
110
115
|
return this._async;
|
|
111
116
|
}
|
|
117
|
+
get dryRun() {
|
|
118
|
+
return this._dryRun;
|
|
119
|
+
}
|
|
112
120
|
get report() {
|
|
113
121
|
return this._report;
|
|
114
122
|
}
|
|
@@ -130,6 +138,9 @@ class MaestroOptions {
|
|
|
130
138
|
get shardSplit() {
|
|
131
139
|
return this._shardSplit;
|
|
132
140
|
}
|
|
141
|
+
get debug() {
|
|
142
|
+
return this._debug;
|
|
143
|
+
}
|
|
133
144
|
get metadata() {
|
|
134
145
|
return this._metadata;
|
|
135
146
|
}
|
|
@@ -49,6 +49,7 @@ export default class XCUITestOptions {
|
|
|
49
49
|
private _throttleNetwork?;
|
|
50
50
|
private _quiet;
|
|
51
51
|
private _async;
|
|
52
|
+
private _dryRun;
|
|
52
53
|
private _report?;
|
|
53
54
|
private _reportOutputDir?;
|
|
54
55
|
private _metadata?;
|
|
@@ -67,6 +68,7 @@ export default class XCUITestOptions {
|
|
|
67
68
|
throttleNetwork?: ThrottleNetwork | CustomNetworkProfile;
|
|
68
69
|
quiet?: boolean;
|
|
69
70
|
async?: boolean;
|
|
71
|
+
dryRun?: boolean;
|
|
70
72
|
report?: ReportFormat;
|
|
71
73
|
reportOutputDir?: string;
|
|
72
74
|
metadata?: RunMetadata;
|
|
@@ -88,6 +90,7 @@ export default class XCUITestOptions {
|
|
|
88
90
|
get throttleNetwork(): ThrottleNetwork | CustomNetworkProfile | undefined;
|
|
89
91
|
get quiet(): boolean;
|
|
90
92
|
get async(): boolean;
|
|
93
|
+
get dryRun(): boolean;
|
|
91
94
|
get report(): ReportFormat | undefined;
|
|
92
95
|
get reportOutputDir(): string | undefined;
|
|
93
96
|
get metadata(): RunMetadata | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcuitest_options.d.ts","sourceRoot":"","sources":["../../src/models/xcuitest_options.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"xcuitest_options.d.ts","sourceRoot":"","sources":["../../src/models/xcuitest_options.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,7 @@ class XCUITestOptions {
|
|
|
27
27
|
// Execution mode
|
|
28
28
|
_quiet;
|
|
29
29
|
_async;
|
|
30
|
+
_dryRun;
|
|
30
31
|
_report;
|
|
31
32
|
_reportOutputDir;
|
|
32
33
|
// Metadata
|
|
@@ -53,6 +54,7 @@ class XCUITestOptions {
|
|
|
53
54
|
this._throttleNetwork = options?.throttleNetwork;
|
|
54
55
|
this._quiet = options?.quiet ?? false;
|
|
55
56
|
this._async = options?.async ?? false;
|
|
57
|
+
this._dryRun = options?.dryRun ?? false;
|
|
56
58
|
this._report = options?.report;
|
|
57
59
|
this._reportOutputDir = options?.reportOutputDir;
|
|
58
60
|
this._metadata = options?.metadata;
|
|
@@ -108,6 +110,9 @@ class XCUITestOptions {
|
|
|
108
110
|
get async() {
|
|
109
111
|
return this._async;
|
|
110
112
|
}
|
|
113
|
+
get dryRun() {
|
|
114
|
+
return this._dryRun;
|
|
115
|
+
}
|
|
111
116
|
get report() {
|
|
112
117
|
return this._report;
|
|
113
118
|
}
|
|
@@ -21,6 +21,7 @@ export interface BaseRunInfo {
|
|
|
21
21
|
export interface BaseProviderOptions {
|
|
22
22
|
quiet?: boolean;
|
|
23
23
|
reportOutputDir?: string;
|
|
24
|
+
dryRun?: boolean;
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* Abstract base class for test providers (Espresso, XCUITest, Maestro)
|
|
@@ -115,5 +116,18 @@ export default abstract class BaseProvider<TOptions extends BaseProviderOptions>
|
|
|
115
116
|
* Formats elapsed time in human-readable format
|
|
116
117
|
*/
|
|
117
118
|
protected formatElapsedTime(seconds: number): string;
|
|
119
|
+
/**
|
|
120
|
+
* Prints dry-run summary showing what would be sent to the API.
|
|
121
|
+
*/
|
|
122
|
+
protected printDryRunSummary(sections: {
|
|
123
|
+
provider: string;
|
|
124
|
+
apiUrl: string;
|
|
125
|
+
uploads: {
|
|
126
|
+
label: string;
|
|
127
|
+
filePath: string;
|
|
128
|
+
endpoint: string;
|
|
129
|
+
}[];
|
|
130
|
+
runPayload: Record<string, unknown>;
|
|
131
|
+
}): void;
|
|
118
132
|
}
|
|
119
133
|
//# sourceMappingURL=base_provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_provider.d.ts","sourceRoot":"","sources":["../../src/providers/base_provider.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAGhD,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,MAAM,MAAM,WAAW,CAAC;AAa/B;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"base_provider.d.ts","sourceRoot":"","sources":["../../src/providers/base_provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -292,5 +292,23 @@ class BaseProvider {
|
|
|
292
292
|
const remainingSeconds = seconds % 60;
|
|
293
293
|
return `${minutes}m ${remainingSeconds}s`;
|
|
294
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Prints dry-run summary showing what would be sent to the API.
|
|
297
|
+
*/
|
|
298
|
+
printDryRunSummary(sections) {
|
|
299
|
+
logger_1.default.info(`[DRY RUN] ${sections.provider}`);
|
|
300
|
+
logger_1.default.info('');
|
|
301
|
+
logger_1.default.info('Files to upload:');
|
|
302
|
+
for (const upload of sections.uploads) {
|
|
303
|
+
logger_1.default.info(` ${upload.label}: ${upload.filePath}`);
|
|
304
|
+
logger_1.default.info(` -> POST ${upload.endpoint}`);
|
|
305
|
+
}
|
|
306
|
+
logger_1.default.info('');
|
|
307
|
+
logger_1.default.info('Test run payload:');
|
|
308
|
+
logger_1.default.info(` POST ${sections.apiUrl}/<appId>/run`);
|
|
309
|
+
logger_1.default.info(JSON.stringify(sections.runPayload, null, 2));
|
|
310
|
+
logger_1.default.info('');
|
|
311
|
+
logger_1.default.info('No HTTP requests were made.');
|
|
312
|
+
}
|
|
295
313
|
}
|
|
296
314
|
exports.default = BaseProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"espresso.d.ts","sourceRoot":"","sources":["../../src/providers/espresso.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAOhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY,CAAC,eAAe,CAAC;IACjE,SAAS,CAAC,QAAQ,CAAC,GAAG,yDACkC;IAExD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;gBAErB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe;YAIvD,QAAQ;IAuCT,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"espresso.d.ts","sourceRoot":"","sources":["../../src/providers/espresso.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAOhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY,CAAC,eAAe,CAAC;IACjE,SAAS,CAAC,QAAQ,CAAC,GAAG,yDACkC;IAExD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;gBAErB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe;YAIvD,QAAQ;IAuCT,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;YA6F7B,SAAS;YAcT,aAAa;YAab,QAAQ;YA0DR,SAAS;YA4BT,iBAAiB;IAwE/B,OAAO,CAAC,gBAAgB;IAmCxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;YAkBP,YAAY;IAwD1B,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,mBAAmB;CAa5B"}
|
|
@@ -49,6 +49,33 @@ class Espresso extends base_provider_1.default {
|
|
|
49
49
|
if (!(await this.validate())) {
|
|
50
50
|
return { success: false, runs: [] };
|
|
51
51
|
}
|
|
52
|
+
if (this.options.dryRun) {
|
|
53
|
+
const capabilities = this.options.getCapabilities();
|
|
54
|
+
const espressoOptions = this.options.getEspressoOptions();
|
|
55
|
+
const metadata = this.options.metadata;
|
|
56
|
+
this.printDryRunSummary({
|
|
57
|
+
provider: 'Espresso',
|
|
58
|
+
apiUrl: this.URL,
|
|
59
|
+
uploads: [
|
|
60
|
+
{
|
|
61
|
+
label: 'App',
|
|
62
|
+
filePath: this.options.app,
|
|
63
|
+
endpoint: `${this.URL}/app`,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
label: 'Test App',
|
|
67
|
+
filePath: this.options.testApp,
|
|
68
|
+
endpoint: `${this.URL}/<appId>/tests`,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
runPayload: {
|
|
72
|
+
capabilities: [capabilities],
|
|
73
|
+
...(espressoOptions && { espressoOptions }),
|
|
74
|
+
...(metadata && { metadata }),
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
return { success: true, runs: [] };
|
|
78
|
+
}
|
|
52
79
|
try {
|
|
53
80
|
// Quick connectivity check before starting uploads
|
|
54
81
|
await this.ensureConnectivity();
|
|
@@ -81,7 +81,24 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
81
81
|
*/
|
|
82
82
|
private zipAppBundle;
|
|
83
83
|
private checkAppChecksum;
|
|
84
|
+
/**
|
|
85
|
+
* Collect and resolve all flow files, their dependencies, and determine the
|
|
86
|
+
* base directory for the zip structure. This is shared by both uploadFlows
|
|
87
|
+
* and the dry-run path.
|
|
88
|
+
*
|
|
89
|
+
* Returns null if the input is a single .zip file (direct upload, no processing).
|
|
90
|
+
*/
|
|
91
|
+
collectFlows(): Promise<{
|
|
92
|
+
allFlowFiles: string[];
|
|
93
|
+
baseDir: string | undefined;
|
|
94
|
+
} | null>;
|
|
84
95
|
private uploadFlows;
|
|
96
|
+
/**
|
|
97
|
+
* Search ancestor directories of the given flow files for a Maestro config file
|
|
98
|
+
* (config.yaml or config.yml). This identifies the project root so the zip
|
|
99
|
+
* preserves the directory structure needed for relative paths like ../../screens/.
|
|
100
|
+
*/
|
|
101
|
+
private findMaestroProjectRoot;
|
|
85
102
|
private discoverFlows;
|
|
86
103
|
private discoverDependencies;
|
|
87
104
|
/**
|
|
@@ -105,7 +122,7 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
105
122
|
* This validates that all referenced files (runScript, runFlow, addMedia, etc.)
|
|
106
123
|
* will be included in the zip.
|
|
107
124
|
*/
|
|
108
|
-
findMissingReferences(flowFiles: string[], allIncludedFiles: string[]
|
|
125
|
+
findMissingReferences(flowFiles: string[], allIncludedFiles: string[]): Promise<MissingFileReference[]>;
|
|
109
126
|
/**
|
|
110
127
|
* Recursively find missing file references in a YAML value
|
|
111
128
|
*/
|
|
@@ -116,6 +133,10 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
116
133
|
private logMissingReferences;
|
|
117
134
|
private logIncludedFiles;
|
|
118
135
|
private createFlowsZip;
|
|
136
|
+
/**
|
|
137
|
+
* Compute the common parent directory of all files
|
|
138
|
+
*/
|
|
139
|
+
private computeCommonDirectory;
|
|
119
140
|
private runTests;
|
|
120
141
|
private getStatus;
|
|
121
142
|
private waitForCompletion;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maestro.d.ts","sourceRoot":"","sources":["../../src/providers/maestro.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"maestro.d.ts","sourceRoot":"","sources":["../../src/providers/maestro.ts"],"names":[],"mappings":"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"}
|
|
@@ -121,6 +121,56 @@ class Maestro extends base_provider_1.default {
|
|
|
121
121
|
if (!(await this.validate())) {
|
|
122
122
|
return { success: false, runs: [] };
|
|
123
123
|
}
|
|
124
|
+
if (this.options.dryRun) {
|
|
125
|
+
// Detect platform for dry-run output (no network call needed)
|
|
126
|
+
if (!this.options.platformName) {
|
|
127
|
+
this.detectedPlatform = await this.detectPlatform();
|
|
128
|
+
}
|
|
129
|
+
const capabilities = this.options.getCapabilities(this.detectedPlatform);
|
|
130
|
+
const maestroOptions = this.options.getMaestroOptions();
|
|
131
|
+
const metadata = this.options.metadata;
|
|
132
|
+
// Process flows to show actual zip structure
|
|
133
|
+
const flowResult = await this.collectFlows();
|
|
134
|
+
this.printDryRunSummary({
|
|
135
|
+
provider: 'Maestro',
|
|
136
|
+
apiUrl: this.URL,
|
|
137
|
+
uploads: [
|
|
138
|
+
{
|
|
139
|
+
label: 'App',
|
|
140
|
+
filePath: this.options.app,
|
|
141
|
+
endpoint: `${this.URL}/app`,
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
label: 'Flows',
|
|
145
|
+
filePath: this.options.flows.join(', '),
|
|
146
|
+
endpoint: `${this.URL}/<appId>/tests`,
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
runPayload: {
|
|
150
|
+
capabilities: [capabilities],
|
|
151
|
+
...(maestroOptions && { maestroOptions }),
|
|
152
|
+
...(this.options.shardSplit && {
|
|
153
|
+
shardSplit: this.options.shardSplit,
|
|
154
|
+
}),
|
|
155
|
+
...(metadata && { metadata }),
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// Show zip structure details
|
|
159
|
+
if (flowResult) {
|
|
160
|
+
const { allFlowFiles, baseDir } = flowResult;
|
|
161
|
+
const effectiveBase = baseDir || this.computeCommonDirectory(allFlowFiles);
|
|
162
|
+
logger_1.default.info('Zip structure (files as they will appear in the archive):');
|
|
163
|
+
for (const file of allFlowFiles) {
|
|
164
|
+
const archiveName = node_path_1.default.relative(effectiveBase, node_path_1.default.resolve(file));
|
|
165
|
+
logger_1.default.info(` ${archiveName}`);
|
|
166
|
+
}
|
|
167
|
+
logger_1.default.info(` Base directory: ${node_path_1.default.resolve(effectiveBase)}`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
logger_1.default.info('Flows: single .zip file (uploaded as-is)');
|
|
171
|
+
}
|
|
172
|
+
return { success: true, runs: [] };
|
|
173
|
+
}
|
|
124
174
|
try {
|
|
125
175
|
// Quick connectivity check before starting uploads
|
|
126
176
|
await this.ensureConnectivity();
|
|
@@ -276,25 +326,22 @@ class Maestro extends base_provider_1.default {
|
|
|
276
326
|
return null;
|
|
277
327
|
}
|
|
278
328
|
}
|
|
279
|
-
|
|
329
|
+
/**
|
|
330
|
+
* Collect and resolve all flow files, their dependencies, and determine the
|
|
331
|
+
* base directory for the zip structure. This is shared by both uploadFlows
|
|
332
|
+
* and the dry-run path.
|
|
333
|
+
*
|
|
334
|
+
* Returns null if the input is a single .zip file (direct upload, no processing).
|
|
335
|
+
*/
|
|
336
|
+
async collectFlows() {
|
|
280
337
|
const flowsPaths = this.options.flows;
|
|
281
|
-
|
|
282
|
-
let shouldCleanup = false;
|
|
283
|
-
// Special case: single zip file - upload directly
|
|
338
|
+
// Special case: single zip file - no processing needed
|
|
284
339
|
if (flowsPaths.length === 1) {
|
|
285
340
|
const singlePath = flowsPaths[0];
|
|
286
341
|
const stat = await node_fs_1.default.promises.stat(singlePath).catch(() => null);
|
|
287
|
-
if (stat?.isFile() &&
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
filePath: zipPath,
|
|
291
|
-
url: `${this.URL}/${this.appId}/tests`,
|
|
292
|
-
credentials: this.credentials,
|
|
293
|
-
contentType: 'application/zip',
|
|
294
|
-
showProgress: !this.options.quiet,
|
|
295
|
-
validateZipFormat: true,
|
|
296
|
-
});
|
|
297
|
-
return true;
|
|
342
|
+
if (stat?.isFile() &&
|
|
343
|
+
node_path_1.default.extname(singlePath).toLowerCase() === '.zip') {
|
|
344
|
+
return null;
|
|
298
345
|
}
|
|
299
346
|
}
|
|
300
347
|
// Collect all flow files from all paths
|
|
@@ -340,8 +387,38 @@ class Maestro extends base_provider_1.default {
|
|
|
340
387
|
throw new testingbot_error_1.default(`No flow files (.yaml, .yml) found in the provided paths`);
|
|
341
388
|
}
|
|
342
389
|
// Determine base directory for zip structure
|
|
343
|
-
// If we have a single directory, use it as base; otherwise
|
|
344
|
-
|
|
390
|
+
// If we have a single directory, use it as base; otherwise try to find the Maestro project root
|
|
391
|
+
let baseDir = baseDirs.length === 1 ? baseDirs[0] : undefined;
|
|
392
|
+
// When individual files are passed (not a directory), search ancestor directories
|
|
393
|
+
// for config.yaml to find the Maestro project root. This ensures the zip preserves
|
|
394
|
+
// the full directory structure needed for relative runFlow paths (e.g., ../../screens/).
|
|
395
|
+
if (!baseDir && allFlowFiles.length > 0) {
|
|
396
|
+
const projectRoot = await this.findMaestroProjectRoot(allFlowFiles);
|
|
397
|
+
if (projectRoot) {
|
|
398
|
+
baseDir = projectRoot.dir;
|
|
399
|
+
// Include config.yaml and discover its dependencies
|
|
400
|
+
const configResolved = node_path_1.default.resolve(projectRoot.configPath);
|
|
401
|
+
if (!allFlowFiles.some((f) => node_path_1.default.resolve(f) === configResolved)) {
|
|
402
|
+
allFlowFiles.push(projectRoot.configPath);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Discover dependencies (addMedia, runScript, runFlow, etc.) for all flow files
|
|
407
|
+
// This ensures referenced files are included even when individual YAML files are passed
|
|
408
|
+
const allFilesSet = new Set(allFlowFiles.map((f) => node_path_1.default.resolve(f)));
|
|
409
|
+
for (const flowFile of [...allFlowFiles]) {
|
|
410
|
+
const ext = node_path_1.default.extname(flowFile).toLowerCase();
|
|
411
|
+
if (ext === '.yaml' || ext === '.yml') {
|
|
412
|
+
const deps = await this.discoverDependencies(flowFile, baseDir || node_path_1.default.dirname(flowFile));
|
|
413
|
+
for (const dep of deps) {
|
|
414
|
+
const resolved = node_path_1.default.resolve(dep);
|
|
415
|
+
if (!allFilesSet.has(resolved)) {
|
|
416
|
+
allFilesSet.add(resolved);
|
|
417
|
+
allFlowFiles.push(dep);
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
345
422
|
if (!this.options.quiet) {
|
|
346
423
|
this.logIncludedFiles(allFlowFiles, baseDir);
|
|
347
424
|
// Show info about potential slow execution on specific real devices
|
|
@@ -349,17 +426,36 @@ class Maestro extends base_provider_1.default {
|
|
|
349
426
|
realDevice: this.options.realDevice,
|
|
350
427
|
device: this.options.device,
|
|
351
428
|
version: this.options.version,
|
|
352
|
-
flowCount: allFlowFiles
|
|
429
|
+
flowCount: allFlowFiles
|
|
430
|
+
.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'))
|
|
431
|
+
.filter((f) => !this.isConfigFile(f)).length,
|
|
353
432
|
shardSplit: this.options.shardSplit,
|
|
354
433
|
});
|
|
355
434
|
}
|
|
356
435
|
// Check for missing file references and warn the user
|
|
357
|
-
const missingReferences = await this.findMissingReferences(allFlowFiles, allFlowFiles
|
|
436
|
+
const missingReferences = await this.findMissingReferences(allFlowFiles, allFlowFiles);
|
|
358
437
|
if (!this.options.quiet && missingReferences.length > 0) {
|
|
359
438
|
this.logMissingReferences(missingReferences, baseDir);
|
|
360
439
|
}
|
|
361
|
-
|
|
362
|
-
|
|
440
|
+
return { allFlowFiles, baseDir };
|
|
441
|
+
}
|
|
442
|
+
async uploadFlows() {
|
|
443
|
+
const result = await this.collectFlows();
|
|
444
|
+
if (result === null) {
|
|
445
|
+
// Single zip file - upload directly
|
|
446
|
+
const zipPath = this.options.flows[0];
|
|
447
|
+
await this.upload.upload({
|
|
448
|
+
filePath: zipPath,
|
|
449
|
+
url: `${this.URL}/${this.appId}/tests`,
|
|
450
|
+
credentials: this.credentials,
|
|
451
|
+
contentType: 'application/zip',
|
|
452
|
+
showProgress: !this.options.quiet,
|
|
453
|
+
validateZipFormat: true,
|
|
454
|
+
});
|
|
455
|
+
return true;
|
|
456
|
+
}
|
|
457
|
+
const { allFlowFiles, baseDir } = result;
|
|
458
|
+
const zipPath = await this.createFlowsZip(allFlowFiles, baseDir);
|
|
363
459
|
try {
|
|
364
460
|
await this.upload.upload({
|
|
365
461
|
filePath: zipPath,
|
|
@@ -370,12 +466,35 @@ class Maestro extends base_provider_1.default {
|
|
|
370
466
|
});
|
|
371
467
|
}
|
|
372
468
|
finally {
|
|
373
|
-
|
|
374
|
-
await node_fs_1.default.promises.unlink(zipPath).catch(() => { });
|
|
375
|
-
}
|
|
469
|
+
await node_fs_1.default.promises.unlink(zipPath).catch(() => { });
|
|
376
470
|
}
|
|
377
471
|
return true;
|
|
378
472
|
}
|
|
473
|
+
/**
|
|
474
|
+
* Search ancestor directories of the given flow files for a Maestro config file
|
|
475
|
+
* (config.yaml or config.yml). This identifies the project root so the zip
|
|
476
|
+
* preserves the directory structure needed for relative paths like ../../screens/.
|
|
477
|
+
*/
|
|
478
|
+
async findMaestroProjectRoot(flowFiles) {
|
|
479
|
+
// Start from the first flow file and walk up
|
|
480
|
+
const startDir = node_path_1.default.dirname(node_path_1.default.resolve(flowFiles[0]));
|
|
481
|
+
const rootDir = node_path_1.default.parse(startDir).root;
|
|
482
|
+
let currentDir = startDir;
|
|
483
|
+
while (currentDir !== rootDir) {
|
|
484
|
+
for (const configName of ['config.yaml', 'config.yml']) {
|
|
485
|
+
const candidatePath = node_path_1.default.join(currentDir, configName);
|
|
486
|
+
try {
|
|
487
|
+
await node_fs_1.default.promises.access(candidatePath);
|
|
488
|
+
return { dir: currentDir, configPath: candidatePath };
|
|
489
|
+
}
|
|
490
|
+
catch {
|
|
491
|
+
// Config not found here, keep searching
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
currentDir = node_path_1.default.dirname(currentDir);
|
|
495
|
+
}
|
|
496
|
+
return null;
|
|
497
|
+
}
|
|
379
498
|
async discoverFlows(directory) {
|
|
380
499
|
const entries = await node_fs_1.default.promises.readdir(directory, {
|
|
381
500
|
withFileTypes: true,
|
|
@@ -607,8 +726,18 @@ class Maestro extends base_provider_1.default {
|
|
|
607
726
|
await this.tryAddDependency(obj.file, flowFile, baseDir, dependencies, visited);
|
|
608
727
|
}
|
|
609
728
|
// Recursively check remaining object properties for nested structures
|
|
729
|
+
// Skip config-only keys that contain path-like strings but aren't runtime
|
|
730
|
+
// file dependencies (e.g., executionOrder.flowsOrder, flows glob patterns)
|
|
731
|
+
const configOnlyKeys = new Set([
|
|
732
|
+
'executionOrder',
|
|
733
|
+
'flows',
|
|
734
|
+
'tags',
|
|
735
|
+
'includeTags',
|
|
736
|
+
'excludeTags',
|
|
737
|
+
'env',
|
|
738
|
+
]);
|
|
610
739
|
for (const [key, propValue] of Object.entries(obj)) {
|
|
611
|
-
if (!handledKeys.has(key)) {
|
|
740
|
+
if (!handledKeys.has(key) && !configOnlyKeys.has(key)) {
|
|
612
741
|
const deps = await this.extractPathsFromValue(propValue, flowFile, baseDir, visited);
|
|
613
742
|
dependencies.push(...deps);
|
|
614
743
|
}
|
|
@@ -621,7 +750,7 @@ class Maestro extends base_provider_1.default {
|
|
|
621
750
|
* This validates that all referenced files (runScript, runFlow, addMedia, etc.)
|
|
622
751
|
* will be included in the zip.
|
|
623
752
|
*/
|
|
624
|
-
async findMissingReferences(flowFiles, allIncludedFiles
|
|
753
|
+
async findMissingReferences(flowFiles, allIncludedFiles) {
|
|
625
754
|
const missingReferences = [];
|
|
626
755
|
const includedFilesSet = new Set(allIncludedFiles.map((f) => node_path_1.default.resolve(f)));
|
|
627
756
|
for (const flowFile of flowFiles) {
|
|
@@ -654,20 +783,12 @@ class Maestro extends base_provider_1.default {
|
|
|
654
783
|
if (typeof value === 'string') {
|
|
655
784
|
if (this.looksLikePath(value)) {
|
|
656
785
|
const resolvedPath = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), value);
|
|
657
|
-
// Check if the file is in included files OR exists on disk
|
|
658
786
|
if (!includedFiles.has(resolvedPath)) {
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
// File doesn't exist
|
|
665
|
-
missingReferences.push({
|
|
666
|
-
flowFile,
|
|
667
|
-
referencedFile: value,
|
|
668
|
-
resolvedPath,
|
|
669
|
-
});
|
|
670
|
-
}
|
|
787
|
+
missingReferences.push({
|
|
788
|
+
flowFile,
|
|
789
|
+
referencedFile: value,
|
|
790
|
+
resolvedPath,
|
|
791
|
+
});
|
|
671
792
|
}
|
|
672
793
|
}
|
|
673
794
|
}
|
|
@@ -691,16 +812,11 @@ class Maestro extends base_provider_1.default {
|
|
|
691
812
|
if (typeof scriptFile === 'string') {
|
|
692
813
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), scriptFile);
|
|
693
814
|
if (!includedFiles.has(resolved)) {
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
flowFile,
|
|
700
|
-
referencedFile: scriptFile,
|
|
701
|
-
resolvedPath: resolved,
|
|
702
|
-
});
|
|
703
|
-
}
|
|
815
|
+
missingReferences.push({
|
|
816
|
+
flowFile,
|
|
817
|
+
referencedFile: scriptFile,
|
|
818
|
+
resolvedPath: resolved,
|
|
819
|
+
});
|
|
704
820
|
}
|
|
705
821
|
}
|
|
706
822
|
// Don't recurse into runScript - it only has file, env, when (no nested file refs)
|
|
@@ -715,16 +831,11 @@ class Maestro extends base_provider_1.default {
|
|
|
715
831
|
if (typeof flowRef === 'string') {
|
|
716
832
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), flowRef);
|
|
717
833
|
if (!includedFiles.has(resolved)) {
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
flowFile,
|
|
724
|
-
referencedFile: flowRef,
|
|
725
|
-
resolvedPath: resolved,
|
|
726
|
-
});
|
|
727
|
-
}
|
|
834
|
+
missingReferences.push({
|
|
835
|
+
flowFile,
|
|
836
|
+
referencedFile: flowRef,
|
|
837
|
+
resolvedPath: resolved,
|
|
838
|
+
});
|
|
728
839
|
}
|
|
729
840
|
}
|
|
730
841
|
// Only recurse into 'commands' if present (for inline commands)
|
|
@@ -747,16 +858,11 @@ class Maestro extends base_provider_1.default {
|
|
|
747
858
|
if (typeof mediaFile === 'string') {
|
|
748
859
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), mediaFile);
|
|
749
860
|
if (!includedFiles.has(resolved)) {
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
flowFile,
|
|
756
|
-
referencedFile: mediaFile,
|
|
757
|
-
resolvedPath: resolved,
|
|
758
|
-
});
|
|
759
|
-
}
|
|
861
|
+
missingReferences.push({
|
|
862
|
+
flowFile,
|
|
863
|
+
referencedFile: mediaFile,
|
|
864
|
+
resolvedPath: resolved,
|
|
865
|
+
});
|
|
760
866
|
}
|
|
761
867
|
}
|
|
762
868
|
}
|
|
@@ -766,16 +872,11 @@ class Maestro extends base_provider_1.default {
|
|
|
766
872
|
handledKeys.add('file');
|
|
767
873
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), obj.file);
|
|
768
874
|
if (!includedFiles.has(resolved)) {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
flowFile,
|
|
775
|
-
referencedFile: obj.file,
|
|
776
|
-
resolvedPath: resolved,
|
|
777
|
-
});
|
|
778
|
-
}
|
|
875
|
+
missingReferences.push({
|
|
876
|
+
flowFile,
|
|
877
|
+
referencedFile: obj.file,
|
|
878
|
+
resolvedPath: resolved,
|
|
879
|
+
});
|
|
779
880
|
}
|
|
780
881
|
}
|
|
781
882
|
// Handle onFlowStart, onFlowComplete, commands
|
|
@@ -790,8 +891,18 @@ class Maestro extends base_provider_1.default {
|
|
|
790
891
|
}
|
|
791
892
|
}
|
|
792
893
|
// Recursively check remaining properties
|
|
894
|
+
// Skip config-only keys that contain path-like strings but aren't runtime
|
|
895
|
+
// file dependencies (e.g., executionOrder.flowsOrder, flows glob patterns)
|
|
896
|
+
const configOnlyKeys = new Set([
|
|
897
|
+
'executionOrder',
|
|
898
|
+
'flows',
|
|
899
|
+
'tags',
|
|
900
|
+
'includeTags',
|
|
901
|
+
'excludeTags',
|
|
902
|
+
'env',
|
|
903
|
+
]);
|
|
793
904
|
for (const [key, propValue] of Object.entries(obj)) {
|
|
794
|
-
if (!handledKeys.has(key)) {
|
|
905
|
+
if (!handledKeys.has(key) && !configOnlyKeys.has(key)) {
|
|
795
906
|
const nestedMissing = await this.findMissingInValue(propValue, flowFile, includedFiles);
|
|
796
907
|
missingReferences.push(...nestedMissing);
|
|
797
908
|
}
|
|
@@ -817,8 +928,9 @@ class Maestro extends base_provider_1.default {
|
|
|
817
928
|
}
|
|
818
929
|
logIncludedFiles(files, baseDir) {
|
|
819
930
|
// Get relative paths for display
|
|
931
|
+
const effectiveBase = baseDir || this.computeCommonDirectory(files);
|
|
820
932
|
const relativePaths = files
|
|
821
|
-
.map((f) =>
|
|
933
|
+
.map((f) => node_path_1.default.relative(effectiveBase, f))
|
|
822
934
|
.sort();
|
|
823
935
|
// Group by file type
|
|
824
936
|
const groups = {
|
|
@@ -872,20 +984,38 @@ class Maestro extends base_provider_1.default {
|
|
|
872
984
|
output.on('close', () => resolve(zipPath));
|
|
873
985
|
archive.on('error', (err) => reject(err));
|
|
874
986
|
archive.pipe(output);
|
|
987
|
+
// Compute effective base directory for archive paths
|
|
988
|
+
const effectiveBase = baseDir || this.computeCommonDirectory(files);
|
|
875
989
|
for (const file of files) {
|
|
876
|
-
|
|
877
|
-
let archiveName;
|
|
878
|
-
if (baseDir) {
|
|
879
|
-
archiveName = node_path_1.default.relative(baseDir, file);
|
|
880
|
-
}
|
|
881
|
-
else {
|
|
882
|
-
archiveName = node_path_1.default.basename(file);
|
|
883
|
-
}
|
|
990
|
+
const archiveName = node_path_1.default.relative(effectiveBase, file);
|
|
884
991
|
archive.file(file, { name: archiveName });
|
|
885
992
|
}
|
|
886
993
|
archive.finalize();
|
|
887
994
|
});
|
|
888
995
|
}
|
|
996
|
+
/**
|
|
997
|
+
* Compute the common parent directory of all files
|
|
998
|
+
*/
|
|
999
|
+
computeCommonDirectory(files) {
|
|
1000
|
+
if (files.length === 0)
|
|
1001
|
+
return process.cwd();
|
|
1002
|
+
if (files.length === 1)
|
|
1003
|
+
return node_path_1.default.dirname(files[0]);
|
|
1004
|
+
const dirs = files.map((f) => node_path_1.default.dirname(node_path_1.default.resolve(f)));
|
|
1005
|
+
const parts = dirs[0].split(node_path_1.default.sep);
|
|
1006
|
+
let commonLength = parts.length;
|
|
1007
|
+
for (let i = 1; i < dirs.length; i++) {
|
|
1008
|
+
const dirParts = dirs[i].split(node_path_1.default.sep);
|
|
1009
|
+
commonLength = Math.min(commonLength, dirParts.length);
|
|
1010
|
+
for (let j = 0; j < commonLength; j++) {
|
|
1011
|
+
if (parts[j] !== dirParts[j]) {
|
|
1012
|
+
commonLength = j;
|
|
1013
|
+
break;
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
return parts.slice(0, commonLength).join(node_path_1.default.sep) || node_path_1.default.sep;
|
|
1018
|
+
}
|
|
889
1019
|
async runTests() {
|
|
890
1020
|
try {
|
|
891
1021
|
const capabilities = this.options.getCapabilities(this.detectedPlatform);
|
|
@@ -950,6 +1080,9 @@ class Maestro extends base_provider_1.default {
|
|
|
950
1080
|
// Check for version update notification
|
|
951
1081
|
const latestVersion = response.headers?.['x-testingbotctl-version'];
|
|
952
1082
|
utils_1.default.checkForUpdate(latestVersion);
|
|
1083
|
+
if (this.options.debug) {
|
|
1084
|
+
logger_1.default.debug(`API response: ${JSON.stringify(response.data, null, 2)}`);
|
|
1085
|
+
}
|
|
953
1086
|
return response.data;
|
|
954
1087
|
});
|
|
955
1088
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xcuitest.d.ts","sourceRoot":"","sources":["../../src/providers/xcuitest.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAOhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY,CAAC,eAAe,CAAC;IACjE,SAAS,CAAC,QAAQ,CAAC,GAAG,yDACkC;IAExD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;gBAErB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe;YAIvD,QAAQ;IAuCT,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"xcuitest.d.ts","sourceRoot":"","sources":["../../src/providers/xcuitest.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,4BAA4B,CAAC;AAEzD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAOhD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD,YAAY,EAAE;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,eAAe,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,eAAe,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,YAAY,CAAC,eAAe,CAAC;IACjE,SAAS,CAAC,QAAQ,CAAC,GAAG,yDACkC;IAExD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;gBAErB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe;YAIvD,QAAQ;IAuCT,GAAG,IAAI,OAAO,CAAC,cAAc,CAAC;YA6F7B,SAAS;YAcT,aAAa;YAab,QAAQ;YA0DR,SAAS;YA4BT,iBAAiB;IAwE/B,OAAO,CAAC,gBAAgB;IAmCxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,aAAa;YAkBP,YAAY;IA2D1B,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,mBAAmB;CAa5B"}
|
|
@@ -49,6 +49,33 @@ class XCUITest extends base_provider_1.default {
|
|
|
49
49
|
if (!(await this.validate())) {
|
|
50
50
|
return { success: false, runs: [] };
|
|
51
51
|
}
|
|
52
|
+
if (this.options.dryRun) {
|
|
53
|
+
const capabilities = this.options.getCapabilities();
|
|
54
|
+
const xcuitestOptions = this.options.getXCUITestOptions();
|
|
55
|
+
const metadata = this.options.metadata;
|
|
56
|
+
this.printDryRunSummary({
|
|
57
|
+
provider: 'XCUITest',
|
|
58
|
+
apiUrl: this.URL,
|
|
59
|
+
uploads: [
|
|
60
|
+
{
|
|
61
|
+
label: 'App',
|
|
62
|
+
filePath: this.options.app,
|
|
63
|
+
endpoint: `${this.URL}/app`,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
label: 'Test App',
|
|
67
|
+
filePath: this.options.testApp,
|
|
68
|
+
endpoint: `${this.URL}/<appId>/tests`,
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
runPayload: {
|
|
72
|
+
capabilities: [capabilities],
|
|
73
|
+
...(xcuitestOptions && { options: xcuitestOptions }),
|
|
74
|
+
...(metadata && { metadata }),
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
return { success: true, runs: [] };
|
|
78
|
+
}
|
|
52
79
|
try {
|
|
53
80
|
// Quick connectivity check before starting uploads
|
|
54
81
|
await this.ensureConnectivity();
|
|
@@ -94,7 +94,7 @@ async function checkInternetConnectivity() {
|
|
|
94
94
|
message: `Internet connectivity verified via ${successResult.endpoint} (${successResult.latencyMs}ms)`,
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
-
catch
|
|
97
|
+
catch {
|
|
98
98
|
// All endpoints failed - collect all results
|
|
99
99
|
const endpointResults = await Promise.all(endpointPromises);
|
|
100
100
|
const testedEndpoints = endpointResults.map((r) => r.endpoint).join(', ');
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";oBAQkB,MAAM;yBAID,MAAM;IAI3B;;;OAGG;wBACiB,MAAM,MAAM,MAAM,GAAG,MAAM;IAa/C;;OAEG;6BACsB,MAAM,GAAG,SAAS,GAAG,OAAO;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";oBAQkB,MAAM;yBAID,MAAM;IAI3B;;;OAGG;wBACiB,MAAM,MAAM,MAAM,GAAG,MAAM;IAa/C;;OAEG;6BACsB,MAAM,GAAG,SAAS,GAAG,OAAO;IAWrD;;OAEG;+BACwB,MAAM,GAAG,SAAS,GAAG,OAAO;IAWvD;;OAEG;qCAC8B;QAC/B,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAyDR;;OAEG;kCAC2B,MAAM,GAAG,SAAS,GAAG,IAAI;;AA3HzD,wBAqJE"}
|
package/dist/utils.js
CHANGED
|
@@ -39,7 +39,10 @@ exports.default = {
|
|
|
39
39
|
if (!device)
|
|
40
40
|
return true;
|
|
41
41
|
// Check for common wildcard/regex characters
|
|
42
|
-
return device === '*' ||
|
|
42
|
+
return (device === '*' ||
|
|
43
|
+
device.includes('*') ||
|
|
44
|
+
device.includes('?') ||
|
|
45
|
+
device.includes('.*'));
|
|
43
46
|
},
|
|
44
47
|
/**
|
|
45
48
|
* Check if a version specification is a wildcard or regex pattern
|
|
@@ -48,7 +51,10 @@ exports.default = {
|
|
|
48
51
|
if (!version)
|
|
49
52
|
return true;
|
|
50
53
|
// Check for common wildcard/regex characters
|
|
51
|
-
return version === '*' ||
|
|
54
|
+
return (version === '*' ||
|
|
55
|
+
version.includes('*') ||
|
|
56
|
+
version.includes('?') ||
|
|
57
|
+
version.includes('.*'));
|
|
52
58
|
},
|
|
53
59
|
/**
|
|
54
60
|
* Show info message when running many flows on a specific real device without sharding
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testingbot/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "CLI tool to run Espresso, XCUITest and Maestro tests on TestingBot's cloud infrastructure",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -60,18 +60,18 @@
|
|
|
60
60
|
"tracer": "^1.3.0"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@eslint/js": "^
|
|
63
|
+
"@eslint/js": "^10.0.1",
|
|
64
64
|
"@tsconfig/node20": "^20.1.8",
|
|
65
65
|
"@types/archiver": "^7.0.0",
|
|
66
|
-
"@types/jest": "^
|
|
66
|
+
"@types/jest": "^30.0.0",
|
|
67
67
|
"@types/js-yaml": "^4.0.9",
|
|
68
|
-
"@types/node": "^
|
|
68
|
+
"@types/node": "^25.4.0",
|
|
69
69
|
"@types/progress-stream": "^2.0.5",
|
|
70
|
-
"babel-jest": "^
|
|
71
|
-
"eslint": "^
|
|
70
|
+
"babel-jest": "^30.3.0",
|
|
71
|
+
"eslint": "^10.0.3",
|
|
72
72
|
"eslint-config-prettier": "^10.1.8",
|
|
73
73
|
"eslint-plugin-prettier": "^5.5.4",
|
|
74
|
-
"jest": "^
|
|
74
|
+
"jest": "^30.3.0",
|
|
75
75
|
"prettier": "^3.7.4",
|
|
76
76
|
"ts-jest": "^29.4.6",
|
|
77
77
|
"typescript": "^5.9.3",
|