@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 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;AAwkB9B,eAAe,OAAO,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 = __importDefault(require("./logger"));
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
@@ -1,4 +1,5 @@
1
1
  import tracer from 'tracer';
2
2
  declare const logger: tracer.Tracer.Logger<string>;
3
+ export declare function enableDebugLogging(): void;
3
4
  export default logger;
4
5
  //# sourceMappingURL=logger.d.ts.map
@@ -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":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5C,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC;AAEhE,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,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,SAAS,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;IAElB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,gBAAgB,CAAC,EAAE,eAAe,GAAG,oBAAoB,CAAC;CAC3D;AAED,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAC,CAAW;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAW;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAW;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAW;IAClC,OAAO,CAAC,KAAK,CAAC,CAAa;IAE3B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,SAAS,CAAC,CAAS;IAE3B,OAAO,CAAC,YAAY,CAAC,CAAS;IAE9B,OAAO,CAAC,gBAAgB,CAAC,CAAyC;IAElE,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAElC,OAAO,CAAC,SAAS,CAAC,CAAc;gBAG9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,eAAe,GAAG,oBAAoB,CAAC;QACzD,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,WAAW,CAAC;KACxB;IAuCH,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,OAAO,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,IAAW,IAAI,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,IAAW,KAAK,IAAI,MAAM,EAAE,GAAG,SAAS,CAEvC;IAED,IAAW,QAAQ,IAAI,MAAM,EAAE,GAAG,SAAS,CAE1C;IAED,IAAW,OAAO,IAAI,MAAM,EAAE,GAAG,SAAS,CAEzC;IAED,IAAW,UAAU,IAAI,MAAM,EAAE,GAAG,SAAS,CAE5C;IAED,IAAW,UAAU,IAAI,MAAM,EAAE,GAAG,SAAS,CAE5C;IAED,IAAW,aAAa,IAAI,MAAM,EAAE,GAAG,SAAS,CAE/C;IAED,IAAW,IAAI,IAAI,QAAQ,EAAE,GAAG,SAAS,CAExC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,WAAW,IAAI,MAAM,GAAG,SAAS,CAE3C;IAED,IAAW,eAAe,IACtB,eAAe,GACf,oBAAoB,GACpB,SAAS,CAEZ;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,MAAM,IAAI,YAAY,GAAG,SAAS,CAE5C;IAED,IAAW,eAAe,IAAI,MAAM,GAAG,SAAS,CAE/C;IAED,IAAW,QAAQ,IAAI,WAAW,GAAG,SAAS,CAE7C;IAEM,eAAe,IAAI,oBAAoB;IAgBvC,kBAAkB,IAAI,kBAAkB,GAAG,SAAS;CA0B5D"}
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":"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"}
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,CAAU;IACzB,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;IAC7B,OAAO,CAAC,MAAM,CAAU;IAExB,OAAO,CAAC,SAAS,CAAC,CAAc;gBAG9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QACR,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,YAAY,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;QACjC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,eAAe,CAAC;QAClC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;QACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;QAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,QAAQ,CAAC,EAAE,WAAW,CAAC;KACxB;IAiCH,IAAW,GAAG,IAAI,MAAM,CAEvB;IAED,IAAW,KAAK,IAAI,MAAM,EAAE,CAE3B;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,WAAW,IAAI,MAAM,EAAE,GAAG,SAAS,CAE7C;IAED,IAAW,WAAW,IAAI,MAAM,EAAE,GAAG,SAAS,CAE7C;IAED,IAAW,YAAY,IAAI,SAAS,GAAG,KAAK,GAAG,SAAS,CAEvD;IAED,IAAW,OAAO,IAAI,MAAM,GAAG,SAAS,CAEvC;IAED,IAAW,IAAI,IAAI,MAAM,GAAG,SAAS,CAEpC;IAED,IAAW,WAAW,IAAI,WAAW,GAAG,SAAS,CAEhD;IAED,IAAW,MAAM,IAAI,MAAM,GAAG,SAAS,CAEtC;IAED,IAAW,QAAQ,IAAI,MAAM,GAAG,SAAS,CAExC;IAED,IAAW,eAAe,IAAI,eAAe,GAAG,SAAS,CAExD;IAED,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED,IAAW,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAEnD;IAED,IAAW,cAAc,IAAI,MAAM,GAAG,SAAS,CAE9C;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,MAAM,IAAI,YAAY,GAAG,SAAS,CAE5C;IAED,IAAW,eAAe,IAAI,MAAM,GAAG,SAAS,CAE/C;IAED,IAAW,UAAU,IAAI,OAAO,CAE/B;IAED,IAAW,iBAAiB,IAAI,oBAAoB,GAAG,SAAS,CAE/D;IAED,IAAW,kBAAkB,IAAI,MAAM,GAAG,SAAS,CAElD;IAED,IAAW,mBAAmB,IAAI,OAAO,CAExC;IAED,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,IAAW,KAAK,IAAI,OAAO,CAE1B;IAED,IAAW,QAAQ,IAAI,WAAW,GAAG,SAAS,CAE7C;IAEM,iBAAiB,IAAI,iBAAiB,GAAG,SAAS;IAmBlD,eAAe,CACpB,gBAAgB,CAAC,EAAE,SAAS,GAAG,KAAK,GACnC,mBAAmB;CAiCvB"}
@@ -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 = MaestroOptions.isIpaFile(app) || (options?.realDevice ?? false);
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":"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"}
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;YA+D7B,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"}
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[], baseDir?: string): Promise<MissingFileReference[]>;
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
- async uploadFlows() {
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
- let zipPath;
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() && node_path_1.default.extname(singlePath).toLowerCase() === '.zip') {
288
- zipPath = singlePath;
289
- await this.upload.upload({
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 use common ancestor or flatten
344
- const baseDir = baseDirs.length === 1 ? baseDirs[0] : undefined;
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.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml')).filter((f) => !this.isConfigFile(f)).length,
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, baseDir);
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
- zipPath = await this.createFlowsZip(allFlowFiles, baseDir);
362
- shouldCleanup = true;
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
- if (shouldCleanup) {
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, baseDir) {
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
- try {
660
- await node_fs_1.default.promises.access(resolvedPath);
661
- // File exists on disk but won't be included - also warn
662
- }
663
- catch {
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
- try {
695
- await node_fs_1.default.promises.access(resolved);
696
- }
697
- catch {
698
- missingReferences.push({
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
- try {
719
- await node_fs_1.default.promises.access(resolved);
720
- }
721
- catch {
722
- missingReferences.push({
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
- try {
751
- await node_fs_1.default.promises.access(resolved);
752
- }
753
- catch {
754
- missingReferences.push({
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
- try {
770
- await node_fs_1.default.promises.access(resolved);
771
- }
772
- catch {
773
- missingReferences.push({
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) => (baseDir ? node_path_1.default.relative(baseDir, f) : node_path_1.default.basename(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
- // Determine the name in the archive
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;YA+D7B,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"}
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 (aggregateError) {
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(', ');
@@ -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;IAMrD;;OAEG;+BACwB,MAAM,GAAG,SAAS,GAAG,OAAO;IAMvD;;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;IAuDR;;OAEG;kCAC2B,MAAM,GAAG,SAAS,GAAG,IAAI;;AA/GzD,wBAyIE"}
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 === '*' || device.includes('*') || device.includes('?') || device.includes('.*');
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 === '*' || version.includes('*') || version.includes('?') || version.includes('.*');
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.4",
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": "^9.39.1",
63
+ "@eslint/js": "^10.0.1",
64
64
  "@tsconfig/node20": "^20.1.8",
65
65
  "@types/archiver": "^7.0.0",
66
- "@types/jest": "^29.5.14",
66
+ "@types/jest": "^30.0.0",
67
67
  "@types/js-yaml": "^4.0.9",
68
- "@types/node": "^20.19.0",
68
+ "@types/node": "^25.4.0",
69
69
  "@types/progress-stream": "^2.0.5",
70
- "babel-jest": "^29.7.0",
71
- "eslint": "^9.39.1",
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": "^29.7.0",
74
+ "jest": "^30.3.0",
75
75
  "prettier": "^3.7.4",
76
76
  "ts-jest": "^29.4.6",
77
77
  "typescript": "^5.9.3",