refactor(shorebird_cli): add releaseTypes ArgResults extension, move release_type.dart (#2033)

This commit is contained in:
Bryan Oltman
2024-05-07 23:41:38 -04:00
committed by GitHub
parent 63f21f97c4
commit 18a944d43a
19 changed files with 126 additions and 55 deletions
@@ -7,10 +7,10 @@ import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/patch_new/patcher.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/platform/platform.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_android_artifacts.dart';
import 'package:shorebird_cli/src/shorebird_flutter.dart';
import 'package:shorebird_cli/src/shorebird_validator.dart';
@@ -5,9 +5,7 @@ import 'package:shorebird_cli/src/archive_analysis/archive_differ.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/command.dart';
import 'package:shorebird_cli/src/commands/patch_new/android_patcher.dart';
import 'package:shorebird_cli/src/commands/patch_new/patcher.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/commands/patch_new/patch_new.dart';
import 'package:shorebird_cli/src/config/config.dart';
import 'package:shorebird_cli/src/deployment_track.dart';
import 'package:shorebird_cli/src/extensions/arg_results.dart';
@@ -16,6 +14,7 @@ import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/patch_diff_checker.dart';
import 'package:shorebird_cli/src/platform.dart';
import 'package:shorebird_cli/src/platform/platform.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart';
import 'package:shorebird_cli/src/version.dart';
@@ -102,14 +101,8 @@ NOTE: this is ${styleBold.wrap('not')} recommended. Asset changes cannot be incl
@override
Future<int> run() async {
final patcherFutures = (results['platform'] as List<String>)
.map(
(platformArg) => ReleaseType.values.firstWhere(
(target) => target.cliName == platformArg,
),
)
.map(_resolvePatcher)
.map(createPatch);
final patcherFutures =
results.releaseTypes.map(_resolvePatcher).map(createPatch);
for (final patcherFuture in patcherFutures) {
await patcherFuture;
@@ -3,8 +3,8 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:shorebird_cli/src/archive_analysis/archive_differ.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/platform/platform.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
/// {@template patcher}
@@ -4,11 +4,11 @@ import 'package:mason_logger/mason_logger.dart';
import 'package:path/path.dart' as p;
import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/commands/release_new/releaser.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/platform.dart';
import 'package:shorebird_cli/src/platform/platform.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_android_artifacts.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_cli/src/shorebird_flutter.dart';
@@ -1,7 +1,7 @@
import 'package:mason_logger/mason_logger.dart';
import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/commands/release_new/releaser.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/logger.dart';
@@ -5,7 +5,7 @@ import 'package:platform/platform.dart';
import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/commands/release_new/releaser.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/executables/xcodebuild.dart';
@@ -5,13 +5,13 @@ import 'package:shorebird_cli/src/archive_analysis/plist.dart';
import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/commands/release_new/releaser.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/executables/xcodebuild.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/platform.dart';
import 'package:shorebird_cli/src/platform/ios.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_flutter.dart';
import 'package:shorebird_cli/src/shorebird_validator.dart';
import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart';
@@ -6,7 +6,7 @@ import 'package:scoped/scoped.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/command.dart';
import 'package:shorebird_cli/src/commands/release_new/release_new.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/config/config.dart';
import 'package:shorebird_cli/src/extensions/arg_results.dart';
import 'package:shorebird_cli/src/logger.dart';
@@ -107,14 +107,8 @@ of the iOS app that is using this module.''',
@override
Future<int> run() async {
final releaserFutures = (results['platform'] as List<String>)
.map(
(platformArg) => ReleaseType.values.firstWhere(
(target) => target.cliName == platformArg,
),
)
.map(_resolveReleaser)
.map(createRelease);
final releaserFutures =
results.releaseTypes.map(_resolveReleaser).map(createRelease);
for (final future in releaserFutures) {
await future;
@@ -1,7 +1,7 @@
import 'dart:io';
import 'package:args/args.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_code_push_client/shorebird_code_push_client.dart';
import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart';
@@ -1,3 +1,5 @@
import 'package:args/args.dart';
import 'package:collection/collection.dart';
import 'package:shorebird_code_push_client/shorebird_code_push_client.dart';
/// The different types of shorebird releases that can be created.
@@ -42,3 +44,24 @@ enum ReleaseType {
}
}
}
extension ReleaseTypeArgs on ArgResults {
Iterable<ReleaseType> get releaseTypes {
final List<String> releaseTypeCliNames;
if (wasParsed('platform')) {
releaseTypeCliNames = this['platform'] as List<String>;
} else {
final platformCliName = arguments.first;
if (ReleaseType.values
.none((target) => target.cliName == platformCliName)) {
throw ArgumentError('Invalid platform: $platformCliName');
}
releaseTypeCliNames = [platformCliName];
}
return releaseTypeCliNames.map(
(cliName) =>
ReleaseType.values.firstWhere((target) => target.cliName == cliName),
);
}
}
@@ -8,12 +8,12 @@ import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/patch_new/patch_new.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/config/config.dart';
import 'package:shorebird_cli/src/deployment_track.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/patch_diff_checker.dart';
import 'package:shorebird_cli/src/platform/platform.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_cli/src/shorebird_flutter.dart';
import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart';
@@ -7,7 +7,7 @@ import 'package:scoped/scoped.dart';
import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/aar_releaser.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/engine_config.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/os/operating_system_interface.dart';
@@ -7,13 +7,13 @@ import 'package:scoped/scoped.dart';
import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/android_releaser.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/engine_config.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/os/operating_system_interface.dart';
import 'package:shorebird_cli/src/platform.dart';
import 'package:shorebird_cli/src/platform/platform.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_android_artifacts.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_cli/src/shorebird_flutter.dart';
@@ -8,12 +8,12 @@ import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/ios_framework_releaser.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/executables/executables.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/os/operating_system_interface.dart';
import 'package:shorebird_cli/src/platform.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_cli/src/shorebird_flutter.dart';
import 'package:shorebird_cli/src/shorebird_process.dart';
@@ -8,13 +8,13 @@ import 'package:shorebird_cli/src/artifact_builder.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/ios_releaser.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/doctor.dart';
import 'package:shorebird_cli/src/executables/xcodebuild.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/os/operating_system_interface.dart';
import 'package:shorebird_cli/src/platform.dart';
import 'package:shorebird_cli/src/platform/ios.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_cli/src/shorebird_flutter.dart';
import 'package:shorebird_cli/src/shorebird_process.dart';
@@ -4,7 +4,7 @@ import 'package:mocktail/mocktail.dart';
import 'package:scoped/scoped.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/commands/release_new/release_new.dart';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/config/config.dart';
import 'package:shorebird_cli/src/logger.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
@@ -1,21 +0,0 @@
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_code_push_client/shorebird_code_push_client.dart';
import 'package:test/test.dart';
void main() {
group(ReleaseType, () {
test('cliName', () {
expect(ReleaseType.android.cliName, 'android');
expect(ReleaseType.ios.cliName, 'ios');
expect(ReleaseType.iosFramework.cliName, 'ios-framework');
expect(ReleaseType.aar.cliName, 'aar');
});
test('releasePlatform', () {
expect(ReleaseType.android.releasePlatform, ReleasePlatform.android);
expect(ReleaseType.ios.releasePlatform, ReleasePlatform.ios);
expect(ReleaseType.iosFramework.releasePlatform, ReleasePlatform.ios);
expect(ReleaseType.aar.releasePlatform, ReleasePlatform.android);
});
});
}
@@ -1,7 +1,7 @@
import 'dart:io';
import 'package:shorebird_cli/src/commands/release_new/release_type.dart';
import 'package:shorebird_cli/src/commands/release_new/releaser.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_code_push_protocol/src/models/release.dart';
import 'package:shorebird_code_push_protocol/src/models/update_release_metadata.dart';
import 'package:test/test.dart';
@@ -0,0 +1,82 @@
import 'package:args/args.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_code_push_client/shorebird_code_push_client.dart';
import 'package:test/test.dart';
void main() {
group(ReleaseType, () {
test('cliName', () {
expect(ReleaseType.android.cliName, 'android');
expect(ReleaseType.ios.cliName, 'ios');
expect(ReleaseType.iosFramework.cliName, 'ios-framework');
expect(ReleaseType.aar.cliName, 'aar');
});
test('releasePlatform', () {
expect(ReleaseType.android.releasePlatform, ReleasePlatform.android);
expect(ReleaseType.ios.releasePlatform, ReleasePlatform.ios);
expect(ReleaseType.iosFramework.releasePlatform, ReleasePlatform.ios);
expect(ReleaseType.aar.releasePlatform, ReleasePlatform.android);
});
group('releaseTypes', () {
late ArgParser parser;
setUp(() {
parser = ArgParser()
..addMultiOption(
'platform',
allowed: ReleaseType.values.map((e) => e.cliName),
);
});
group('when the platform argument is provided', () {
test('parses the release types', () {
expect(
parser.parse(['--platform', 'android']).releaseTypes.toList(),
[ReleaseType.android],
);
expect(
parser.parse(['--platform', 'ios']).releaseTypes.toList(),
[ReleaseType.ios],
);
expect(
parser.parse(['--platform', 'ios-framework']).releaseTypes.toList(),
[ReleaseType.iosFramework],
);
expect(
parser.parse(['--platform', 'aar']).releaseTypes.toList(),
[ReleaseType.aar],
);
});
group('when the platform is provided as a raw arg', () {
test('throws an ArgumentError if the platform is invalid', () {
expect(
() => parser.parse(['foo']).releaseTypes.toList(),
throwsArgumentError,
);
});
test('parses the release types', () {
expect(
parser.parse(['android', 'foo']).releaseTypes.toList(),
[ReleaseType.android],
);
expect(
parser.parse(['ios', 'foo']).releaseTypes.toList(),
[ReleaseType.ios],
);
expect(
parser.parse(['ios-framework', 'foo']).releaseTypes.toList(),
[ReleaseType.iosFramework],
);
expect(
parser.parse(['aar', 'foo']).releaseTypes.toList(),
[ReleaseType.aar],
);
});
});
});
});
});
}