fix(shorebird_cli): use platform status instead of artifacts when checking existing release (#904)
This commit is contained in:
@@ -129,31 +129,16 @@ This app may not exist or you may not have permission to view it.''',
|
||||
}
|
||||
}
|
||||
|
||||
/// Exits if [platform] release artifacts already exist for an
|
||||
/// [existingRelease].
|
||||
Future<void> ensureReleaseHasNoArtifacts({
|
||||
required String appId,
|
||||
required Release existingRelease,
|
||||
/// Prints an error message and exits with code 70 if [release] is in an
|
||||
/// active state for [platform].
|
||||
void ensureReleaseIsNotActive({
|
||||
required Release release,
|
||||
required ReleasePlatform platform,
|
||||
}) async {
|
||||
logger.detail('Verifying ability to release');
|
||||
|
||||
final artifacts = await codePushClient.getReleaseArtifacts(
|
||||
appId: appId,
|
||||
releaseId: existingRelease.id,
|
||||
platform: platform,
|
||||
);
|
||||
|
||||
logger.detail(
|
||||
'''
|
||||
Artifacts for release:${existingRelease.version} platform:$platform
|
||||
$artifacts''',
|
||||
);
|
||||
|
||||
if (artifacts.isNotEmpty) {
|
||||
}) {
|
||||
if (release.platformStatuses[platform] == ReleaseStatus.active) {
|
||||
logger.err(
|
||||
'''
|
||||
It looks like you have an existing ${platform.name} release for version ${lightCyan.wrap(existingRelease.version)}.
|
||||
It looks like you have an existing ${platform.name} release for version ${lightCyan.wrap(release.version)}.
|
||||
Please bump your version number and try again.''',
|
||||
);
|
||||
exit(ExitCode.software.code);
|
||||
|
||||
@@ -102,9 +102,8 @@ make smaller updates to your app.
|
||||
releaseVersion: releaseVersion,
|
||||
);
|
||||
if (existingRelease != null) {
|
||||
await codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: app.appId,
|
||||
existingRelease: existingRelease,
|
||||
codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: existingRelease,
|
||||
platform: platform,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -122,9 +122,8 @@ make smaller updates to your app.
|
||||
);
|
||||
|
||||
if (existingRelease != null) {
|
||||
await codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: app.appId,
|
||||
existingRelease: existingRelease,
|
||||
codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: existingRelease,
|
||||
platform: platform,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -126,9 +126,8 @@ make smaller updates to your app.
|
||||
releaseVersion: releaseVersion,
|
||||
);
|
||||
if (existingRelease != null) {
|
||||
await codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: app.appId,
|
||||
existingRelease: existingRelease,
|
||||
codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: existingRelease,
|
||||
platform: platform,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -392,24 +392,23 @@ void main() {
|
||||
});
|
||||
|
||||
group('release', () {
|
||||
group('ensureReleaseHasNoArtifacts', () {
|
||||
const appId = 'test-app-id';
|
||||
group('ensureReleaseIsIsNotActive', () {
|
||||
test(
|
||||
'''exits with code 70 if release artifacts exist for the given release and platform''',
|
||||
() async {
|
||||
when(
|
||||
() => codePushClient.getReleaseArtifacts(
|
||||
appId: any(named: 'appId'),
|
||||
releaseId: any(named: 'releaseId'),
|
||||
platform: any(named: 'platform'),
|
||||
),
|
||||
).thenAnswer((_) async => [releaseArtifact]);
|
||||
|
||||
await expectLater(
|
||||
runWithOverrides(
|
||||
() async => codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: appId,
|
||||
existingRelease: release,
|
||||
'''exits with code 70 if release is in an active state for the given platform''',
|
||||
() {
|
||||
expect(
|
||||
() => runWithOverrides(
|
||||
() => codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: const Release(
|
||||
id: releaseId,
|
||||
appId: appId,
|
||||
version: releaseVersion,
|
||||
flutterRevision: flutterRevision,
|
||||
displayName: displayName,
|
||||
platformStatuses: {
|
||||
releasePlatform: ReleaseStatus.active,
|
||||
},
|
||||
),
|
||||
platform: releasePlatform,
|
||||
),
|
||||
),
|
||||
@@ -427,21 +426,41 @@ Please bump your version number and try again.''',
|
||||
);
|
||||
|
||||
test(
|
||||
'''completes without error if release artifacts exist for the given release and platform''',
|
||||
'''completes without error if release has no status for the given platform''',
|
||||
() async {
|
||||
when(
|
||||
() => codePushClient.getReleaseArtifacts(
|
||||
appId: any(named: 'appId'),
|
||||
releaseId: any(named: 'releaseId'),
|
||||
platform: any(named: 'platform'),
|
||||
),
|
||||
).thenAnswer((_) async => []);
|
||||
|
||||
await expectLater(
|
||||
runWithOverrides(
|
||||
() => codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: appId,
|
||||
existingRelease: release,
|
||||
() async => codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: const Release(
|
||||
id: releaseId,
|
||||
appId: appId,
|
||||
version: releaseVersion,
|
||||
flutterRevision: flutterRevision,
|
||||
displayName: displayName,
|
||||
platformStatuses: {},
|
||||
),
|
||||
platform: releasePlatform,
|
||||
),
|
||||
),
|
||||
completes,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
test(
|
||||
'''completes without error if release has draft status for the given platform''',
|
||||
() async {
|
||||
await expectLater(
|
||||
runWithOverrides(
|
||||
() async => codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: const Release(
|
||||
id: releaseId,
|
||||
appId: appId,
|
||||
version: releaseVersion,
|
||||
flutterRevision: flutterRevision,
|
||||
displayName: displayName,
|
||||
platformStatuses: {releasePlatform: ReleaseStatus.draft},
|
||||
),
|
||||
platform: releasePlatform,
|
||||
),
|
||||
),
|
||||
|
||||
@@ -246,9 +246,8 @@ flutter:
|
||||
),
|
||||
).thenAnswer((_) async => null);
|
||||
when(
|
||||
() => codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: any(named: 'appId'),
|
||||
existingRelease: any(named: 'existingRelease'),
|
||||
() => codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: any(named: 'release'),
|
||||
platform: any(named: 'platform'),
|
||||
),
|
||||
).thenAnswer((_) async => {});
|
||||
|
||||
@@ -215,9 +215,8 @@ flutter:
|
||||
),
|
||||
).thenAnswer((_) async => null);
|
||||
when(
|
||||
() => codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: any(named: 'appId'),
|
||||
existingRelease: any(named: 'existingRelease'),
|
||||
() => codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: any(named: 'release'),
|
||||
platform: any(named: 'platform'),
|
||||
),
|
||||
).thenAnswer((_) async => {});
|
||||
|
||||
@@ -214,9 +214,8 @@ flutter:
|
||||
),
|
||||
).thenAnswer((_) async => null);
|
||||
when(
|
||||
() => codePushClientWrapper.ensureReleaseHasNoArtifacts(
|
||||
appId: any(named: 'appId'),
|
||||
existingRelease: any(named: 'existingRelease'),
|
||||
() => codePushClientWrapper.ensureReleaseIsNotActive(
|
||||
release: any(named: 'release'),
|
||||
platform: any(named: 'platform'),
|
||||
),
|
||||
).thenAnswer((_) async => {});
|
||||
|
||||
Reference in New Issue
Block a user