@testingbot/cli 1.0.4 → 1.0.5
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 +39 -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/maestro_options.d.ts +3 -0
- package/dist/models/maestro_options.d.ts.map +1 -1
- package/dist/models/maestro_options.js +7 -1
- package/dist/providers/maestro.d.ts +5 -1
- package/dist/providers/maestro.d.ts.map +1 -1
- package/dist/providers/maestro.js +78 -70
- 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;AA6kB9B,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"));
|
|
@@ -183,6 +216,7 @@ const maestroCommand = program
|
|
|
183
216
|
// Authentication
|
|
184
217
|
.option('--api-key <key>', 'TestingBot API key.')
|
|
185
218
|
.option('--api-secret <secret>', 'TestingBot API secret.')
|
|
219
|
+
.option('--debug', 'Enable debug logging of API responses.')
|
|
186
220
|
.action(async (appFileArg, flowsArgs, args) => {
|
|
187
221
|
try {
|
|
188
222
|
let app;
|
|
@@ -245,6 +279,7 @@ const maestroCommand = program
|
|
|
245
279
|
artifactsOutputDir: args.artifactsOutputDir,
|
|
246
280
|
ignoreChecksumCheck: args.ignoreChecksumCheck,
|
|
247
281
|
shardSplit: args.shardSplit,
|
|
282
|
+
debug: args.debug,
|
|
248
283
|
metadata,
|
|
249
284
|
});
|
|
250
285
|
const credentials = await auth_1.default.getCredentials({
|
|
@@ -258,6 +293,9 @@ const maestroCommand = program
|
|
|
258
293
|
' 3. Set TB_KEY and TB_SECRET environment variables\n' +
|
|
259
294
|
' 4. Create ~/.testingbot file with content: key:secret');
|
|
260
295
|
}
|
|
296
|
+
if (args.debug) {
|
|
297
|
+
(0, logger_1.enableDebugLogging)();
|
|
298
|
+
}
|
|
261
299
|
const maestro = new maestro_1.default(credentials, options);
|
|
262
300
|
const result = await maestro.run();
|
|
263
301
|
if (!result.success) {
|
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;
|
|
@@ -58,6 +58,7 @@ export default class MaestroOptions {
|
|
|
58
58
|
private _artifactsOutputDir?;
|
|
59
59
|
private _ignoreChecksumCheck;
|
|
60
60
|
private _shardSplit?;
|
|
61
|
+
private _debug;
|
|
61
62
|
private _metadata?;
|
|
62
63
|
constructor(app: string, flows: string | string[], device?: string, options?: {
|
|
63
64
|
includeTags?: string[];
|
|
@@ -81,6 +82,7 @@ export default class MaestroOptions {
|
|
|
81
82
|
artifactsOutputDir?: string;
|
|
82
83
|
ignoreChecksumCheck?: boolean;
|
|
83
84
|
shardSplit?: number;
|
|
85
|
+
debug?: boolean;
|
|
84
86
|
metadata?: RunMetadata;
|
|
85
87
|
});
|
|
86
88
|
get app(): string;
|
|
@@ -107,6 +109,7 @@ export default class MaestroOptions {
|
|
|
107
109
|
get artifactsOutputDir(): string | undefined;
|
|
108
110
|
get ignoreChecksumCheck(): boolean;
|
|
109
111
|
get shardSplit(): number | undefined;
|
|
112
|
+
get debug(): boolean;
|
|
110
113
|
get metadata(): RunMetadata | undefined;
|
|
111
114
|
getMaestroOptions(): MaestroRunOptions | undefined;
|
|
112
115
|
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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"}
|
|
@@ -28,6 +28,7 @@ class MaestroOptions {
|
|
|
28
28
|
_artifactsOutputDir;
|
|
29
29
|
_ignoreChecksumCheck;
|
|
30
30
|
_shardSplit;
|
|
31
|
+
_debug;
|
|
31
32
|
// Metadata
|
|
32
33
|
_metadata;
|
|
33
34
|
constructor(app, flows, device, options) {
|
|
@@ -51,11 +52,13 @@ class MaestroOptions {
|
|
|
51
52
|
this._report = options?.report;
|
|
52
53
|
this._reportOutputDir = options?.reportOutputDir;
|
|
53
54
|
// IPA files can only be tested on real iOS devices, so automatically enable realDevice
|
|
54
|
-
this._realDevice =
|
|
55
|
+
this._realDevice =
|
|
56
|
+
MaestroOptions.isIpaFile(app) || (options?.realDevice ?? false);
|
|
55
57
|
this._downloadArtifacts = options?.downloadArtifacts;
|
|
56
58
|
this._artifactsOutputDir = options?.artifactsOutputDir;
|
|
57
59
|
this._ignoreChecksumCheck = options?.ignoreChecksumCheck ?? false;
|
|
58
60
|
this._shardSplit = options?.shardSplit;
|
|
61
|
+
this._debug = options?.debug ?? false;
|
|
59
62
|
this._metadata = options?.metadata;
|
|
60
63
|
}
|
|
61
64
|
get app() {
|
|
@@ -130,6 +133,9 @@ class MaestroOptions {
|
|
|
130
133
|
get shardSplit() {
|
|
131
134
|
return this._shardSplit;
|
|
132
135
|
}
|
|
136
|
+
get debug() {
|
|
137
|
+
return this._debug;
|
|
138
|
+
}
|
|
133
139
|
get metadata() {
|
|
134
140
|
return this._metadata;
|
|
135
141
|
}
|
|
@@ -105,7 +105,7 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
105
105
|
* This validates that all referenced files (runScript, runFlow, addMedia, etc.)
|
|
106
106
|
* will be included in the zip.
|
|
107
107
|
*/
|
|
108
|
-
findMissingReferences(flowFiles: string[], allIncludedFiles: string[]
|
|
108
|
+
findMissingReferences(flowFiles: string[], allIncludedFiles: string[]): Promise<MissingFileReference[]>;
|
|
109
109
|
/**
|
|
110
110
|
* Recursively find missing file references in a YAML value
|
|
111
111
|
*/
|
|
@@ -116,6 +116,10 @@ export default class Maestro extends BaseProvider<MaestroOptions> {
|
|
|
116
116
|
private logMissingReferences;
|
|
117
117
|
private logIncludedFiles;
|
|
118
118
|
private createFlowsZip;
|
|
119
|
+
/**
|
|
120
|
+
* Compute the common parent directory of all files
|
|
121
|
+
*/
|
|
122
|
+
private computeCommonDirectory;
|
|
119
123
|
private runTests;
|
|
120
124
|
private getStatus;
|
|
121
125
|
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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"}
|
|
@@ -279,7 +279,6 @@ class Maestro extends base_provider_1.default {
|
|
|
279
279
|
async uploadFlows() {
|
|
280
280
|
const flowsPaths = this.options.flows;
|
|
281
281
|
let zipPath;
|
|
282
|
-
let shouldCleanup = false;
|
|
283
282
|
// Special case: single zip file - upload directly
|
|
284
283
|
if (flowsPaths.length === 1) {
|
|
285
284
|
const singlePath = flowsPaths[0];
|
|
@@ -342,6 +341,22 @@ class Maestro extends base_provider_1.default {
|
|
|
342
341
|
// Determine base directory for zip structure
|
|
343
342
|
// If we have a single directory, use it as base; otherwise use common ancestor or flatten
|
|
344
343
|
const baseDir = baseDirs.length === 1 ? baseDirs[0] : undefined;
|
|
344
|
+
// Discover dependencies (addMedia, runScript, runFlow, etc.) for all flow files
|
|
345
|
+
// This ensures referenced files are included even when individual YAML files are passed
|
|
346
|
+
const allFilesSet = new Set(allFlowFiles.map((f) => node_path_1.default.resolve(f)));
|
|
347
|
+
for (const flowFile of [...allFlowFiles]) {
|
|
348
|
+
const ext = node_path_1.default.extname(flowFile).toLowerCase();
|
|
349
|
+
if (ext === '.yaml' || ext === '.yml') {
|
|
350
|
+
const deps = await this.discoverDependencies(flowFile, baseDir || node_path_1.default.dirname(flowFile));
|
|
351
|
+
for (const dep of deps) {
|
|
352
|
+
const resolved = node_path_1.default.resolve(dep);
|
|
353
|
+
if (!allFilesSet.has(resolved)) {
|
|
354
|
+
allFilesSet.add(resolved);
|
|
355
|
+
allFlowFiles.push(dep);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
345
360
|
if (!this.options.quiet) {
|
|
346
361
|
this.logIncludedFiles(allFlowFiles, baseDir);
|
|
347
362
|
// Show info about potential slow execution on specific real devices
|
|
@@ -349,17 +364,18 @@ class Maestro extends base_provider_1.default {
|
|
|
349
364
|
realDevice: this.options.realDevice,
|
|
350
365
|
device: this.options.device,
|
|
351
366
|
version: this.options.version,
|
|
352
|
-
flowCount: allFlowFiles
|
|
367
|
+
flowCount: allFlowFiles
|
|
368
|
+
.filter((f) => f.endsWith('.yaml') || f.endsWith('.yml'))
|
|
369
|
+
.filter((f) => !this.isConfigFile(f)).length,
|
|
353
370
|
shardSplit: this.options.shardSplit,
|
|
354
371
|
});
|
|
355
372
|
}
|
|
356
373
|
// Check for missing file references and warn the user
|
|
357
|
-
const missingReferences = await this.findMissingReferences(allFlowFiles, allFlowFiles
|
|
374
|
+
const missingReferences = await this.findMissingReferences(allFlowFiles, allFlowFiles);
|
|
358
375
|
if (!this.options.quiet && missingReferences.length > 0) {
|
|
359
376
|
this.logMissingReferences(missingReferences, baseDir);
|
|
360
377
|
}
|
|
361
378
|
zipPath = await this.createFlowsZip(allFlowFiles, baseDir);
|
|
362
|
-
shouldCleanup = true;
|
|
363
379
|
try {
|
|
364
380
|
await this.upload.upload({
|
|
365
381
|
filePath: zipPath,
|
|
@@ -370,9 +386,7 @@ class Maestro extends base_provider_1.default {
|
|
|
370
386
|
});
|
|
371
387
|
}
|
|
372
388
|
finally {
|
|
373
|
-
|
|
374
|
-
await node_fs_1.default.promises.unlink(zipPath).catch(() => { });
|
|
375
|
-
}
|
|
389
|
+
await node_fs_1.default.promises.unlink(zipPath).catch(() => { });
|
|
376
390
|
}
|
|
377
391
|
return true;
|
|
378
392
|
}
|
|
@@ -621,7 +635,7 @@ class Maestro extends base_provider_1.default {
|
|
|
621
635
|
* This validates that all referenced files (runScript, runFlow, addMedia, etc.)
|
|
622
636
|
* will be included in the zip.
|
|
623
637
|
*/
|
|
624
|
-
async findMissingReferences(flowFiles, allIncludedFiles
|
|
638
|
+
async findMissingReferences(flowFiles, allIncludedFiles) {
|
|
625
639
|
const missingReferences = [];
|
|
626
640
|
const includedFilesSet = new Set(allIncludedFiles.map((f) => node_path_1.default.resolve(f)));
|
|
627
641
|
for (const flowFile of flowFiles) {
|
|
@@ -654,20 +668,12 @@ class Maestro extends base_provider_1.default {
|
|
|
654
668
|
if (typeof value === 'string') {
|
|
655
669
|
if (this.looksLikePath(value)) {
|
|
656
670
|
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
671
|
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
|
-
}
|
|
672
|
+
missingReferences.push({
|
|
673
|
+
flowFile,
|
|
674
|
+
referencedFile: value,
|
|
675
|
+
resolvedPath,
|
|
676
|
+
});
|
|
671
677
|
}
|
|
672
678
|
}
|
|
673
679
|
}
|
|
@@ -691,16 +697,11 @@ class Maestro extends base_provider_1.default {
|
|
|
691
697
|
if (typeof scriptFile === 'string') {
|
|
692
698
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), scriptFile);
|
|
693
699
|
if (!includedFiles.has(resolved)) {
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
flowFile,
|
|
700
|
-
referencedFile: scriptFile,
|
|
701
|
-
resolvedPath: resolved,
|
|
702
|
-
});
|
|
703
|
-
}
|
|
700
|
+
missingReferences.push({
|
|
701
|
+
flowFile,
|
|
702
|
+
referencedFile: scriptFile,
|
|
703
|
+
resolvedPath: resolved,
|
|
704
|
+
});
|
|
704
705
|
}
|
|
705
706
|
}
|
|
706
707
|
// Don't recurse into runScript - it only has file, env, when (no nested file refs)
|
|
@@ -715,16 +716,11 @@ class Maestro extends base_provider_1.default {
|
|
|
715
716
|
if (typeof flowRef === 'string') {
|
|
716
717
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), flowRef);
|
|
717
718
|
if (!includedFiles.has(resolved)) {
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
flowFile,
|
|
724
|
-
referencedFile: flowRef,
|
|
725
|
-
resolvedPath: resolved,
|
|
726
|
-
});
|
|
727
|
-
}
|
|
719
|
+
missingReferences.push({
|
|
720
|
+
flowFile,
|
|
721
|
+
referencedFile: flowRef,
|
|
722
|
+
resolvedPath: resolved,
|
|
723
|
+
});
|
|
728
724
|
}
|
|
729
725
|
}
|
|
730
726
|
// Only recurse into 'commands' if present (for inline commands)
|
|
@@ -747,16 +743,11 @@ class Maestro extends base_provider_1.default {
|
|
|
747
743
|
if (typeof mediaFile === 'string') {
|
|
748
744
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), mediaFile);
|
|
749
745
|
if (!includedFiles.has(resolved)) {
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
flowFile,
|
|
756
|
-
referencedFile: mediaFile,
|
|
757
|
-
resolvedPath: resolved,
|
|
758
|
-
});
|
|
759
|
-
}
|
|
746
|
+
missingReferences.push({
|
|
747
|
+
flowFile,
|
|
748
|
+
referencedFile: mediaFile,
|
|
749
|
+
resolvedPath: resolved,
|
|
750
|
+
});
|
|
760
751
|
}
|
|
761
752
|
}
|
|
762
753
|
}
|
|
@@ -766,16 +757,11 @@ class Maestro extends base_provider_1.default {
|
|
|
766
757
|
handledKeys.add('file');
|
|
767
758
|
const resolved = node_path_1.default.resolve(node_path_1.default.dirname(flowFile), obj.file);
|
|
768
759
|
if (!includedFiles.has(resolved)) {
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
flowFile,
|
|
775
|
-
referencedFile: obj.file,
|
|
776
|
-
resolvedPath: resolved,
|
|
777
|
-
});
|
|
778
|
-
}
|
|
760
|
+
missingReferences.push({
|
|
761
|
+
flowFile,
|
|
762
|
+
referencedFile: obj.file,
|
|
763
|
+
resolvedPath: resolved,
|
|
764
|
+
});
|
|
779
765
|
}
|
|
780
766
|
}
|
|
781
767
|
// Handle onFlowStart, onFlowComplete, commands
|
|
@@ -817,8 +803,9 @@ class Maestro extends base_provider_1.default {
|
|
|
817
803
|
}
|
|
818
804
|
logIncludedFiles(files, baseDir) {
|
|
819
805
|
// Get relative paths for display
|
|
806
|
+
const effectiveBase = baseDir || this.computeCommonDirectory(files);
|
|
820
807
|
const relativePaths = files
|
|
821
|
-
.map((f) =>
|
|
808
|
+
.map((f) => node_path_1.default.relative(effectiveBase, f))
|
|
822
809
|
.sort();
|
|
823
810
|
// Group by file type
|
|
824
811
|
const groups = {
|
|
@@ -872,20 +859,38 @@ class Maestro extends base_provider_1.default {
|
|
|
872
859
|
output.on('close', () => resolve(zipPath));
|
|
873
860
|
archive.on('error', (err) => reject(err));
|
|
874
861
|
archive.pipe(output);
|
|
862
|
+
// Compute effective base directory for archive paths
|
|
863
|
+
const effectiveBase = baseDir || this.computeCommonDirectory(files);
|
|
875
864
|
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
|
-
}
|
|
865
|
+
const archiveName = node_path_1.default.relative(effectiveBase, file);
|
|
884
866
|
archive.file(file, { name: archiveName });
|
|
885
867
|
}
|
|
886
868
|
archive.finalize();
|
|
887
869
|
});
|
|
888
870
|
}
|
|
871
|
+
/**
|
|
872
|
+
* Compute the common parent directory of all files
|
|
873
|
+
*/
|
|
874
|
+
computeCommonDirectory(files) {
|
|
875
|
+
if (files.length === 0)
|
|
876
|
+
return process.cwd();
|
|
877
|
+
if (files.length === 1)
|
|
878
|
+
return node_path_1.default.dirname(files[0]);
|
|
879
|
+
const dirs = files.map((f) => node_path_1.default.dirname(node_path_1.default.resolve(f)));
|
|
880
|
+
const parts = dirs[0].split(node_path_1.default.sep);
|
|
881
|
+
let commonLength = parts.length;
|
|
882
|
+
for (let i = 1; i < dirs.length; i++) {
|
|
883
|
+
const dirParts = dirs[i].split(node_path_1.default.sep);
|
|
884
|
+
commonLength = Math.min(commonLength, dirParts.length);
|
|
885
|
+
for (let j = 0; j < commonLength; j++) {
|
|
886
|
+
if (parts[j] !== dirParts[j]) {
|
|
887
|
+
commonLength = j;
|
|
888
|
+
break;
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
return parts.slice(0, commonLength).join(node_path_1.default.sep) || node_path_1.default.sep;
|
|
893
|
+
}
|
|
889
894
|
async runTests() {
|
|
890
895
|
try {
|
|
891
896
|
const capabilities = this.options.getCapabilities(this.detectedPlatform);
|
|
@@ -950,6 +955,9 @@ class Maestro extends base_provider_1.default {
|
|
|
950
955
|
// Check for version update notification
|
|
951
956
|
const latestVersion = response.headers?.['x-testingbotctl-version'];
|
|
952
957
|
utils_1.default.checkForUpdate(latestVersion);
|
|
958
|
+
if (this.options.debug) {
|
|
959
|
+
logger_1.default.debug(`API response: ${JSON.stringify(response.data, null, 2)}`);
|
|
960
|
+
}
|
|
953
961
|
return response.data;
|
|
954
962
|
});
|
|
955
963
|
}
|
|
@@ -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.5",
|
|
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",
|