fix: better error handling for release with no platforms provided (#2264)

This commit is contained in:
Erick
2024-06-18 15:18:35 -03:00
committed by GitHub
parent 4400b0e1db
commit c253f638db
5 changed files with 75 additions and 37 deletions
@@ -142,6 +142,13 @@ of the iOS app that is using this module. (aar and ios-framework only)''',
@override
Future<int> run() async {
if (results.releaseTypes.isEmpty) {
logger.err(
'''No platforms were provided, use the --platforms argument to provide one or more platforms''',
);
return ExitCode.usage.code;
}
final releaserFutures =
results.releaseTypes.map(_resolveReleaser).map(createRelease);
@@ -49,21 +49,25 @@ enum ReleaseType {
extension ReleaseTypeArgs on ArgResults {
Iterable<ReleaseType> get releaseTypes {
final List<String> releaseTypeCliNames;
List<String>? releaseTypeCliNames;
if (wasParsed('platforms')) {
releaseTypeCliNames = this['platforms'] as List<String>;
} else {
final platformCliName = arguments.first;
if (ReleaseType.values
.none((target) => target.cliName == platformCliName)) {
throw ArgumentError('Invalid platform: $platformCliName');
if (arguments.isNotEmpty) {
final platformCliName = arguments.first;
if (ReleaseType.values
.none((target) => target.cliName == platformCliName)) {
throw ArgumentError('Invalid platform: $platformCliName');
}
releaseTypeCliNames = [platformCliName];
}
releaseTypeCliNames = [platformCliName];
}
return releaseTypeCliNames.map(
(cliName) =>
ReleaseType.values.firstWhere((target) => target.cliName == cliName),
);
return releaseTypeCliNames?.map(
(cliName) => ReleaseType.values.firstWhere(
(target) => target.cliName == cliName,
),
) ??
const [];
}
}
+2 -2
View File
@@ -330,10 +330,10 @@ packages:
dependency: transitive
description:
name: http_parser
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
sha256: "40f592dd352890c3b60fec1b68e786cefb9603e05ff303dbc4dda49b304ecdf4"
url: "https://pub.dev"
source: hosted
version: "4.0.2"
version: "4.1.0"
intl:
dependency: "direct main"
description:
@@ -521,5 +521,23 @@ $exception''',
});
});
});
group('when no platform argument is provided', () {
setUp(() {
when(() => argResults['platforms']).thenReturn(const <String>[]);
});
test('fails and log the correct message', () async {
final exitCode = await runWithOverrides(command.run);
expect(exitCode, equals(ExitCode.usage.code));
verify(
() => logger.err(
'''No platforms were provided, use the --platforms argument to provide one or more platforms''',
),
).called(1);
});
});
});
}
@@ -29,6 +29,15 @@ void main() {
);
});
group('when nothing is provided', () {
test('parses and return empty', () {
expect(
parser.parse([]).releaseTypes.toList(),
isEmpty,
);
});
});
group('when the platforms argument is provided', () {
test('parses the release types', () {
expect(
@@ -51,33 +60,33 @@ void main() {
[ReleaseType.aar],
);
});
});
group('when the platforms is provided as a raw arg', () {
test('throws an ArgumentError if the platform is invalid', () {
expect(
() => parser.parse(['foo']).releaseTypes.toList(),
throwsArgumentError,
);
});
group('when the platforms 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],
);
});
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],
);
});
});
});