fix(shorebird_cli): fix release status check in patch command (#2123)

This commit is contained in:
Bryan Oltman
2024-05-17 13:42:33 -04:00
committed by GitHub
parent fba8dddd06
commit fe8abbe264
2 changed files with 52 additions and 16 deletions
@@ -204,10 +204,7 @@ NOTE: this is ${styleBold.wrap('not')} recommended. Asset changes cannot be incl
);
}
codePushClientWrapper.ensureReleaseIsNotActive(
release: release,
platform: patcher.releaseType.releasePlatform,
);
assertReleaseIsActive(release: release, patcher: patcher);
try {
await shorebirdFlutter.installRevision(revision: release.flutterRevision);
@@ -285,6 +282,20 @@ NOTE: this is ${styleBold.wrap('not')} recommended. Asset changes cannot be incl
);
}
void assertReleaseIsActive({
required Release release,
required Patcher patcher,
}) {
final releaseStatus =
release.platformStatuses[patcher.releaseType.releasePlatform];
if (releaseStatus != ReleaseStatus.active) {
logger.err('''
Release ${release.version} is in an incomplete state. It's possible that the original release was terminated or failed to complete.
Please re-run the release command for this version or create a new release.''');
exit(ExitCode.software.code);
}
}
Future<DiffStatus> assertUnpatchableDiffs({
required File releaseArtifact,
required File patchArtifact,
@@ -441,10 +441,6 @@ void main() {
appId: appId,
releaseVersion: releaseVersion,
),
() => codePushClientWrapper.ensureReleaseIsNotActive(
release: any(named: 'release'),
platform: releasePlatform,
),
() => codePushClientWrapper.getReleaseArtifact(
appId: appId,
releaseId: release.id,
@@ -499,10 +495,6 @@ void main() {
choices: any(named: 'choices'),
display: captureAny(named: 'display'),
),
() => codePushClientWrapper.ensureReleaseIsNotActive(
release: any(named: 'release'),
platform: releasePlatform,
),
() => codePushClientWrapper.getReleaseArtifact(
appId: appId,
releaseId: release.id,
@@ -581,10 +573,6 @@ void main() {
),
() => patcher.buildPatchArtifact(),
() => patcher.extractReleaseVersionFromArtifact(any()),
() => codePushClientWrapper.ensureReleaseIsNotActive(
release: any(named: 'release'),
platform: releasePlatform,
),
() => shorebirdFlutter.installRevision(
revision: releaseFlutterRevision,
),
@@ -663,6 +651,43 @@ void main() {
});
});
group('when the target release is in a draft state', () {
setUp(() {
when(
() => codePushClientWrapper.getRelease(
appId: any(named: 'appId'),
releaseVersion: any(named: 'releaseVersion'),
),
).thenAnswer(
(_) async => Release(
id: 0,
appId: appId,
version: releaseVersion,
flutterRevision: flutterRevision,
displayName: '1.2.3+1',
platformStatuses: {releasePlatform: ReleaseStatus.draft},
createdAt: DateTime(2023),
updatedAt: DateTime(2023),
),
);
});
test('logs error and exits with code 70', () async {
await expectLater(
() => runWithOverrides(command.run),
exitsWithCode(ExitCode.software),
);
verify(
() => logger.err(
'''
Release ${release.version} is in an incomplete state. It's possible that the original release was terminated or failed to complete.
Please re-run the release command for this version or create a new release.''',
),
).called(1);
});
});
group('when primary release artifact fails to download', () {
final error = Exception('Failed to download primary release artifact.');