diff --git a/packages/patrol_cli/lib/src/command_runner.dart b/packages/patrol_cli/lib/src/command_runner.dart index 6cfaa98297..ee9b41b932 100644 --- a/packages/patrol_cli/lib/src/command_runner.dart +++ b/packages/patrol_cli/lib/src/command_runner.dart @@ -116,7 +116,13 @@ class PatrolCommandRunner extends CommandRunner { logger: _logger, ), ); - addCommand(UpdateCommand(pubUpdater: _pubUpdater, logger: _logger)); + addCommand( + UpdateCommand( + pubUpdater: _pubUpdater, + artifactsRepository: _artifactsRepository, + logger: _logger, + ), + ); argParser ..addFlag( diff --git a/packages/patrol_cli/lib/src/common/artifacts_repository.dart b/packages/patrol_cli/lib/src/common/artifacts_repository.dart index acbbf74f17..df32301ed4 100644 --- a/packages/patrol_cli/lib/src/common/artifacts_repository.dart +++ b/packages/patrol_cli/lib/src/common/artifacts_repository.dart @@ -255,33 +255,35 @@ class ArtifactsRepository { } } - /// Downloads artifacts for the current patrol_cli version. - Future downloadArtifacts({String? ver}) async { - ver ??= globalVersion; + /// Downloads and extracts artifacts for [version] of patrol_cli. + Future downloadArtifacts({String? version = globalVersion}) async { + final androidArtifacts = [ + Artifacts.androidApp, + Artifacts.androidInstrumentation, + ].map((artifact) => artifact.copyWith(version: version)); + + final iosArtifacts = [ + Artifacts.ios, + Artifacts.iosDevice, + Artifacts.iosSimulatorArm, + Artifacts.iosSimulatorAmd, + ].map((artifact) => artifact.copyWith(version: version)); await Future.wait([ - _downloadArtifact(Artifacts.androidApp.copyWith(version: ver)), - _downloadArtifact( - Artifacts.androidInstrumentation.copyWith(version: ver), - ), + ...androidArtifacts.map(_downloadArtifact), if (platform.isMacOS) ...[ - _downloadArtifact(Artifacts.ios), - _downloadArtifact(Artifacts.iosDevice), - _downloadArtifact(Artifacts.iosSimulatorArm), - _downloadArtifact(Artifacts.iosSimulatorAmd), + ...iosArtifacts.map(_downloadArtifact), ], ]); if (platform.isMacOS) { - await _extractArtifact(Artifacts.ios); - await _extractArtifact(Artifacts.iosDevice); - await _extractArtifact(Artifacts.iosSimulatorArm); - await _extractArtifact(Artifacts.iosSimulatorAmd); + await Future.wait(iosArtifacts.map(_extractArtifact)); } } Future _downloadArtifact(Artifact artifact) async { final response = await _httpClient.get(artifact.uri); + print('downloading ${artifact.uri.path}'); if (response.statusCode != 200) { throw Exception('Failed to download $artifact from ${artifact.uri}'); diff --git a/packages/patrol_cli/lib/src/features/update/update_command.dart b/packages/patrol_cli/lib/src/features/update/update_command.dart index 605b2d068c..02ba15d08a 100644 --- a/packages/patrol_cli/lib/src/features/update/update_command.dart +++ b/packages/patrol_cli/lib/src/features/update/update_command.dart @@ -1,16 +1,20 @@ import 'package:args/command_runner.dart'; import 'package:logging/logging.dart'; +import 'package:patrol_cli/src/common/artifacts_repository.dart'; import 'package:patrol_cli/src/common/common.dart'; import 'package:pub_updater/pub_updater.dart'; class UpdateCommand extends Command { UpdateCommand({ required PubUpdater pubUpdater, + required ArtifactsRepository artifactsRepository, required Logger logger, }) : _pubUpdater = pubUpdater, + _artifactsRepository = artifactsRepository, _logger = logger; final PubUpdater _pubUpdater; + final ArtifactsRepository _artifactsRepository; final Logger _logger; @override @@ -27,10 +31,10 @@ class UpdateCommand extends Command { ); if (!isLatestVersion) { - final latestVersion = await _pubUpdater.getLatestVersion( - patrolCliPackage, - ); - await _update(latestVersion); + final latestVersion = + await _pubUpdater.getLatestVersion(patrolCliPackage); + await _updateTool(latestVersion); + await _downloadArtifacts(latestVersion); } else { _logger.info( 'You already have the newest version of $patrolCliPackage ($globalVersion)', @@ -40,18 +44,27 @@ class UpdateCommand extends Command { return 0; } - Future _update(String latestVersion) async { + Future _updateTool(String ver) async { final progress = _logger.progress( - 'Updating $patrolCliPackage to version $latestVersion', + 'Updating $patrolCliPackage to version $ver', ); try { await _pubUpdater.update(packageName: patrolCliPackage); - progress.complete('Updated $patrolCliPackage to version $latestVersion'); + progress.complete('Updated $patrolCliPackage to version $ver'); } catch (err) { - progress.fail( - 'Failed to update $patrolCliPackage to version $latestVersion', - ); + progress.fail('Failed to update $patrolCliPackage to version $ver'); + rethrow; + } + } + + Future _downloadArtifacts(String ver) async { + final progress = _logger.progress('Downloading artifacts for version $ver'); + try { + await _artifactsRepository.downloadArtifacts(version: ver); + progress.complete('Downloaded artifacts for version $ver'); + } catch (err) { + progress.fail('Failed to download artifacts for version $ver'); rethrow; } }