fix(shorebird_cli): use platform status instead of artifacts when checking existing release (#904)

This commit is contained in:
Bryan Oltman
2023-07-25 14:06:47 -04:00
committed by GitHub
parent 319b7622f4
commit 5422bfe5fc
8 changed files with 67 additions and 69 deletions
@@ -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 => {});