@devicecloud.dev/dcd
Version:
Better cloud maestro testing
93 lines (92 loc) • 6.93 kB
TypeScript
import { Command } from '@oclif/core';
/**
* Primary CLI command for executing tests on DeviceCloud.
* Orchestrates the complete test workflow:
* - Binary upload with SHA deduplication
* - Flow file analysis and dependency resolution
* - Device compatibility validation
* - Test submission with parallel execution
* - Real-time result polling with 10-second intervals
* - Artifact download (reports, videos, logs)
*
* Replaces `maestro cloud` with DeviceCloud-specific functionality.
*/
export default class Cloud extends Command {
static args: {
firstFile: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
secondFile: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
};
static description: string;
static enableJsonFlag: boolean;
static examples: string[];
static flags: {
'artifacts-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'junit-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'allure-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'html-path': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
async: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
debug: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'download-artifacts': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'dry-run': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
json: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'json-file': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'json-file-name': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
report: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
config: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'exclude-flows': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
'exclude-tags': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
flows: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'include-tags': import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
'maestro-version': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
retry: import("@oclif/core/lib/interfaces").OptionFlag<number, import("@oclif/core/lib/interfaces").CustomOptions>;
'runner-type': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
env: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
metadata: import("@oclif/core/lib/interfaces").OptionFlag<string[], import("@oclif/core/lib/interfaces").CustomOptions>;
mitmHost: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
mitmPath: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'moropo-v1-api-key': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
name: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'android-api-level': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'android-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'device-locale': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'google-play': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'ios-device': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'ios-version': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
orientation: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'show-crosshairs': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'maestro-chrome-onboarding': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'android-no-snapshot': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
'app-binary-id': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'app-file': import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
'ignore-sha-check': import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
apiKey: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
apiUrl: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
};
/** Service for device/OS compatibility validation */
private deviceValidationService;
/** Service for Moropo test framework integration */
private moropoService;
/** Service for downloading test reports and artifacts */
private reportDownloadService;
/** Service for polling test results with 10-second intervals */
private resultsPollingService;
/** Service for submitting tests to the API */
private testSubmissionService;
/**
* Check for CLI updates and notify user if outdated
* Compares current version with latest npm release
* @returns Promise that resolves when version check is complete
*/
private versionCheck;
/** Service for CLI version checking */
private versionService;
/**
* Main command execution entry point
* Orchestrates the complete test submission and monitoring workflow
* @returns Promise that resolves when command execution is complete
* @throws RunFailedError if tests fail
* @throws Error for infrastructure or configuration errors
*/
run(): Promise<any>;
}