diff --git a/packages/shorebird_cli/lib/src/code_push_client_wrapper.dart b/packages/shorebird_cli/lib/src/code_push_client_wrapper.dart index 66865796..c38b893e 100644 --- a/packages/shorebird_cli/lib/src/code_push_client_wrapper.dart +++ b/packages/shorebird_cli/lib/src/code_push_client_wrapper.dart @@ -208,6 +208,7 @@ Please create a release using "shorebird release" and try again. required String appId, required String version, required String flutterRevision, + required ReleasePlatform platform, }) async { final createReleaseProgress = logger.progress('Creating release'); try { @@ -216,6 +217,12 @@ Please create a release using "shorebird release" and try again. version: version, flutterRevision: flutterRevision, ); + await codePushClient.updateReleaseStatus( + appId: appId, + releaseId: release.id, + platform: platform, + status: ReleaseStatus.draft, + ); createReleaseProgress.complete(); return release; } catch (error) { @@ -224,6 +231,27 @@ Please create a release using "shorebird release" and try again. } } + Future updateReleaseStatus({ + required String appId, + required int releaseId, + required ReleasePlatform platform, + required ReleaseStatus status, + }) async { + final updateStatusProgress = logger.progress('Updating release status'); + try { + await codePushClient.updateReleaseStatus( + appId: appId, + releaseId: releaseId, + platform: platform, + status: status, + ); + updateStatusProgress.complete(); + } catch (error) { + updateStatusProgress.fail(); + exit(ExitCode.software.code); + } + } + Future> getReleaseArtifacts({ required String appId, required int releaseId, @@ -490,28 +518,6 @@ aar artifact already exists, continuing...''', createArtifactProgress.complete(); } - /// Updates the specified release's status to [ReleaseStatus.active] for the - /// given platform. - Future completeRelease({ - required String appId, - required int releaseId, - required ReleasePlatform platform, - }) async { - final completeReleaseProgress = logger.progress('Completing release'); - try { - await codePushClient.updateReleaseStatus( - appId: appId, - releaseId: releaseId, - status: ReleaseStatus.active, - platform: platform, - ); - } catch (error) { - completeReleaseProgress.fail('$error'); - exit(ExitCode.software.code); - } - completeReleaseProgress.complete(); - } - @visibleForTesting Future createPatch({ required String appId, diff --git a/packages/shorebird_cli/lib/src/commands/release/release_aar_command.dart b/packages/shorebird_cli/lib/src/commands/release/release_aar_command.dart index 3fa05256..fd4dee2b 100644 --- a/packages/shorebird_cli/lib/src/commands/release/release_aar_command.dart +++ b/packages/shorebird_cli/lib/src/commands/release/release_aar_command.dart @@ -158,12 +158,23 @@ ${summary.join('\n')} return ExitCode.software.code; } - final release = existingRelease ?? - await codePushClientWrapper.createRelease( - appId: appId, - version: releaseVersion, - flutterRevision: shorebirdFlutterRevision, - ); + final Release release; + if (existingRelease != null) { + release = existingRelease; + await codePushClientWrapper.updateReleaseStatus( + appId: appId, + releaseId: release.id, + platform: platform, + status: ReleaseStatus.draft, + ); + } else { + release = await codePushClientWrapper.createRelease( + appId: appId, + version: releaseVersion, + flutterRevision: shorebirdFlutterRevision, + platform: platform, + ); + } final extractAarProgress = logger.progress('Creating artifacts'); final extractedAarDir = await extractAar( @@ -185,10 +196,11 @@ ${summary.join('\n')} architectures: architectures, ); - await codePushClientWrapper.completeRelease( + await codePushClientWrapper.updateReleaseStatus( appId: app.appId, releaseId: release.id, platform: platform, + status: ReleaseStatus.active, ); logger diff --git a/packages/shorebird_cli/lib/src/commands/release/release_android_command.dart b/packages/shorebird_cli/lib/src/commands/release/release_android_command.dart index 80d3d787..9bfc869b 100644 --- a/packages/shorebird_cli/lib/src/commands/release/release_android_command.dart +++ b/packages/shorebird_cli/lib/src/commands/release/release_android_command.dart @@ -166,12 +166,23 @@ ${summary.join('\n')} return ExitCode.software.code; } - final release = existingRelease ?? - await codePushClientWrapper.createRelease( - appId: appId, - version: releaseVersion, - flutterRevision: shorebirdFlutterRevision, - ); + final Release release; + if (existingRelease != null) { + release = existingRelease; + await codePushClientWrapper.updateReleaseStatus( + appId: appId, + releaseId: release.id, + platform: platform, + status: ReleaseStatus.draft, + ); + } else { + release = await codePushClientWrapper.createRelease( + appId: appId, + version: releaseVersion, + flutterRevision: shorebirdFlutterRevision, + platform: platform, + ); + } await codePushClientWrapper.createAndroidReleaseArtifacts( appId: app.appId, @@ -182,10 +193,11 @@ ${summary.join('\n')} flavor: flavor, ); - await codePushClientWrapper.completeRelease( + await codePushClientWrapper.updateReleaseStatus( appId: app.appId, releaseId: release.id, platform: platform, + status: ReleaseStatus.active, ); logger diff --git a/packages/shorebird_cli/lib/src/commands/release/release_ios_command.dart b/packages/shorebird_cli/lib/src/commands/release/release_ios_command.dart index cd9ea03d..eec3b1d8 100644 --- a/packages/shorebird_cli/lib/src/commands/release/release_ios_command.dart +++ b/packages/shorebird_cli/lib/src/commands/release/release_ios_command.dart @@ -161,12 +161,23 @@ ${summary.join('\n')} return ExitCode.software.code; } - final release = existingRelease ?? - await codePushClientWrapper.createRelease( - appId: appId, - version: releaseVersion, - flutterRevision: shorebirdFlutterRevision, - ); + final Release release; + if (existingRelease != null) { + release = existingRelease; + await codePushClientWrapper.updateReleaseStatus( + appId: appId, + releaseId: release.id, + platform: platform, + status: ReleaseStatus.draft, + ); + } else { + release = await codePushClientWrapper.createRelease( + appId: appId, + version: releaseVersion, + flutterRevision: shorebirdFlutterRevision, + platform: platform, + ); + } final relativeIpaPath = p.relative(ipaPath); @@ -176,10 +187,11 @@ ${summary.join('\n')} ipaPath: ipaPath, ); - await codePushClientWrapper.completeRelease( + await codePushClientWrapper.updateReleaseStatus( appId: app.appId, releaseId: release.id, platform: platform, + status: ReleaseStatus.active, ); logger diff --git a/packages/shorebird_cli/test/src/code_push_client_wrapper_test.dart b/packages/shorebird_cli/test/src/code_push_client_wrapper_test.dart index aed29f61..0482919d 100644 --- a/packages/shorebird_cli/test/src/code_push_client_wrapper_test.dart +++ b/packages/shorebird_cli/test/src/code_push_client_wrapper_test.dart @@ -33,6 +33,7 @@ void main() { setUpAll(() { registerFallbackValue(ReleasePlatform.android); + registerFallbackValue(ReleaseStatus.draft); }); setUp(() { @@ -90,6 +91,7 @@ void main() { version: releaseVersion, flutterRevision: flutterRevision, displayName: displayName, + platformStatuses: {}, ); final partchArtifactBundle = PatchArtifactBundle( arch: arch.name, @@ -582,6 +584,7 @@ Please bump your version number and try again.''', appId: appId, version: releaseVersion, flutterRevision: flutterRevision, + platform: releasePlatform, ), ), exitsWithCode(ExitCode.software), @@ -597,62 +600,33 @@ Please bump your version number and try again.''', flutterRevision: any(named: 'flutterRevision'), ), ).thenAnswer((_) async => release); + when( + () => codePushClient.updateReleaseStatus( + appId: any(named: 'appId'), + releaseId: any(named: 'releaseId'), + platform: any(named: 'platform'), + status: any(named: 'status'), + ), + ).thenAnswer((_) async => {}); final result = await runWithOverrides( () async => codePushClientWrapper.createRelease( appId: appId, version: releaseVersion, flutterRevision: flutterRevision, + platform: releasePlatform, ), ); expect(result, release); - verify(() => progress.complete()).called(1); - }); - }); - - group('createRelease', () { - test('exits with code 70 when creating release fails', () async { - const error = 'something went wrong'; - when( - () => codePushClient.createRelease( - appId: any(named: 'appId'), - version: any(named: 'version'), - flutterRevision: any(named: 'flutterRevision'), - ), - ).thenThrow(error); - - await expectLater( - () async => runWithOverrides( - () async => codePushClientWrapper.createRelease( - appId: appId, - version: releaseVersion, - flutterRevision: flutterRevision, - ), - ), - exitsWithCode(ExitCode.software), - ); - verify(() => progress.fail(error)).called(1); - }); - - test('returns release when release is successfully created', () async { - when( - () => codePushClient.createRelease( - appId: any(named: 'appId'), - version: any(named: 'version'), - flutterRevision: any(named: 'flutterRevision'), - ), - ).thenAnswer((_) async => release); - - final result = await runWithOverrides( - () async => codePushClientWrapper.createRelease( + verify( + () => codePushClient.updateReleaseStatus( appId: appId, - version: releaseVersion, - flutterRevision: flutterRevision, + releaseId: result.id, + platform: releasePlatform, + status: ReleaseStatus.draft, ), - ); - - expect(result, release); + ).called(1); verify(() => progress.complete()).called(1); }); }); @@ -1535,11 +1509,7 @@ Please bump your version number and try again.''', }); }); - group('completeRelease', () { - setUp(() { - registerFallbackValue(ReleaseStatus.active); - }); - + group('updateReleaseStatus', () { test( 'exits with code 70 when updating release status fails', () async { @@ -1554,10 +1524,11 @@ Please bump your version number and try again.''', await expectLater( () async => runWithOverrides( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: app.appId, releaseId: releaseId, platform: releasePlatform, + status: ReleaseStatus.active, ), ), exitsWithCode(ExitCode.software), @@ -1576,13 +1547,22 @@ Please bump your version number and try again.''', ).thenAnswer((_) async => {}); await runWithOverrides( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: app.appId, releaseId: releaseId, platform: releasePlatform, + status: ReleaseStatus.active, ), ); + verify( + () => codePushClient.updateReleaseStatus( + appId: app.appId, + releaseId: releaseId, + platform: releasePlatform, + status: ReleaseStatus.active, + ), + ).called(1); verify(() => progress.complete()).called(1); }); }); diff --git a/packages/shorebird_cli/test/src/commands/patch/patch_aar_command_test.dart b/packages/shorebird_cli/test/src/commands/patch/patch_aar_command_test.dart index ab45ff87..5d96182b 100644 --- a/packages/shorebird_cli/test/src/commands/patch/patch_aar_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/patch_aar_command_test.dart @@ -88,6 +88,7 @@ void main() { version: version, flutterRevision: flutterRevision, displayName: '1.2.3+1', + platformStatuses: {}, ); const noModulePubspecYamlContent = ''' name: example diff --git a/packages/shorebird_cli/test/src/commands/patch/patch_android_command_test.dart b/packages/shorebird_cli/test/src/commands/patch/patch_android_command_test.dart index f41c8e93..3eda210c 100644 --- a/packages/shorebird_cli/test/src/commands/patch/patch_android_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/patch_android_command_test.dart @@ -93,6 +93,7 @@ void main() { version: version, flutterRevision: flutterRevision, displayName: '1.2.3+1', + platformStatuses: {}, ); const pubspecYamlContent = ''' name: example diff --git a/packages/shorebird_cli/test/src/commands/patch/patch_ios_command_test.dart b/packages/shorebird_cli/test/src/commands/patch/patch_ios_command_test.dart index 7e789ee1..e8f8c7dd 100644 --- a/packages/shorebird_cli/test/src/commands/patch/patch_ios_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/patch_ios_command_test.dart @@ -87,6 +87,7 @@ flutter: version: version, flutterRevision: flutterRevision, displayName: '1.2.3+1', + platformStatuses: {}, ); group(PatchIosCommand, () { diff --git a/packages/shorebird_cli/test/src/commands/release/release_aar_command_test.dart b/packages/shorebird_cli/test/src/commands/release/release_aar_command_test.dart index f252ce7c..6f681040 100644 --- a/packages/shorebird_cli/test/src/commands/release/release_aar_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/release_aar_command_test.dart @@ -60,6 +60,7 @@ void main() { version: version, flutterRevision: flutterRevision, displayName: '1.2.3+1', + platformStatuses: {}, ); const releasePlatform = ReleasePlatform.android; @@ -161,6 +162,7 @@ flutter: setUpAll(() { registerFallbackValue(ReleasePlatform.android); + registerFallbackValue(ReleaseStatus.draft); }); setUp(() { @@ -249,6 +251,7 @@ flutter: appId: any(named: 'appId'), version: any(named: 'version'), flutterRevision: any(named: 'flutterRevision'), + platform: any(named: 'platform'), ), ).thenAnswer((_) async => release); when( @@ -262,10 +265,11 @@ flutter: ), ).thenAnswer((_) async => {}); when( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: any(named: 'appId'), releaseId: any(named: 'releaseId'), platform: any(named: 'platform'), + status: any(named: 'status'), ), ).thenAnswer((_) async => {}); @@ -447,10 +451,11 @@ flutter: ), ).called(1); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); }); @@ -505,10 +510,11 @@ flavors: ), ).called(1); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); }); @@ -535,13 +541,15 @@ flavors: appId: any(named: 'appId'), version: any(named: 'version'), flutterRevision: any(named: 'flutterRevision'), + platform: any(named: 'platform'), ), ); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); }); @@ -596,10 +604,11 @@ flavors: expect(exitCode, equals(ExitCode.config.code)); verify(() => logger.err('Aborting due to validation errors.')).called(1); verifyNever( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ); }); diff --git a/packages/shorebird_cli/test/src/commands/release/release_android_command_test.dart b/packages/shorebird_cli/test/src/commands/release/release_android_command_test.dart index d13fcac1..51f7290f 100644 --- a/packages/shorebird_cli/test/src/commands/release/release_android_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/release_android_command_test.dart @@ -65,6 +65,7 @@ void main() { version: version, flutterRevision: flutterRevision, displayName: '1.2.3+1', + platformStatuses: {}, ); const pubspecYamlContent = ''' @@ -126,6 +127,7 @@ flutter: setUpAll(() { registerFallbackValue(ReleasePlatform.android); + registerFallbackValue(ReleaseStatus.draft); }); setUp(() { @@ -218,6 +220,7 @@ flutter: appId: any(named: 'appId'), version: any(named: 'version'), flutterRevision: any(named: 'flutterRevision'), + platform: any(named: 'platform'), ), ).thenAnswer((_) async => release); when( @@ -231,10 +234,11 @@ flutter: ), ).thenAnswer((_) async {}); when( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: any(named: 'appId'), releaseId: any(named: 'releaseId'), platform: any(named: 'platform'), + status: any(named: 'status'), ), ).thenAnswer((_) async {}); when(() => flutterValidator.validate(any())).thenAnswer((_) async => []); @@ -344,10 +348,11 @@ flutter: expect(exitCode, ExitCode.success.code); verify(() => logger.info('Aborting.')).called(1); verifyNever( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: any(named: 'appId'), releaseId: any(named: 'releaseId'), platform: any(named: 'platform'), + status: any(named: 'status'), ), ); }); @@ -409,10 +414,11 @@ flutter: ), ).called(1); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); expect(exitCode, ExitCode.success.code); @@ -438,10 +444,11 @@ flutter: ), ).called(1); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); expect(exitCode, ExitCode.success.code); @@ -479,10 +486,11 @@ flavors: ), ).called(1); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); expect(exitCode, ExitCode.success.code); @@ -509,6 +517,7 @@ flavors: appId: any(named: 'appId'), version: any(named: 'version'), flutterRevision: any(named: 'flutterRevision'), + platform: any(named: 'platform'), ), ); }); @@ -563,10 +572,11 @@ flavors: expect(exitCode, equals(ExitCode.config.code)); verify(() => logger.err('Aborting due to validation errors.')).called(1); verifyNever( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: any(named: 'appId'), releaseId: any(named: 'releaseId'), platform: any(named: 'platform'), + status: any(named: 'status'), ), ); }); diff --git a/packages/shorebird_cli/test/src/commands/release/release_ios_command_test.dart b/packages/shorebird_cli/test/src/commands/release/release_ios_command_test.dart index 8e918701..a74e7b25 100644 --- a/packages/shorebird_cli/test/src/commands/release/release_ios_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/release_ios_command_test.dart @@ -62,6 +62,7 @@ void main() { version: version, flutterRevision: flutterRevision, displayName: '1.2.3+1', + platformStatuses: {}, ); const infoPlistContent = ''' @@ -129,6 +130,7 @@ flutter: setUpAll(() { registerFallbackValue(ReleasePlatform.ios); + registerFallbackValue(ReleaseStatus.draft); }); setUp(() { @@ -217,6 +219,7 @@ flutter: appId: any(named: 'appId'), version: any(named: 'version'), flutterRevision: any(named: 'flutterRevision'), + platform: any(named: 'platform'), ), ).thenAnswer((_) async => release); when( @@ -227,10 +230,11 @@ flutter: ), ).thenAnswer((_) async => release); when( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: any(named: 'appId'), releaseId: any(named: 'releaseId'), platform: any(named: 'platform'), + status: any(named: 'status'), ), ).thenAnswer((_) async => {}); @@ -452,10 +456,11 @@ error: exportArchive: No signing certificate "iOS Distribution" found () => logger.prompt(any(), defaultValue: any(named: 'defaultValue')), ); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); }); @@ -489,10 +494,11 @@ error: exportArchive: No signing certificate "iOS Distribution" found ), ).called(1); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); expect(exitCode, ExitCode.success.code); @@ -562,6 +568,7 @@ flavors: appId: any(named: 'appId'), version: any(named: 'version'), flutterRevision: any(named: 'flutterRevision'), + platform: any(named: 'platform'), ), ); verify( @@ -572,10 +579,11 @@ flavors: ), ).called(1); verify( - () => codePushClientWrapper.completeRelease( + () => codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releasePlatform, + status: ReleaseStatus.active, ), ).called(1); }); diff --git a/packages/shorebird_cli/test/src/commands/releases/delete_releases_command_test.dart b/packages/shorebird_cli/test/src/commands/releases/delete_releases_command_test.dart index 5570676d..d9bc7e5a 100644 --- a/packages/shorebird_cli/test/src/commands/releases/delete_releases_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/releases/delete_releases_command_test.dart @@ -92,6 +92,7 @@ flutter: version: '0.1.0', flutterRevision: flutterRevision, displayName: null, + platformStatuses: {ReleasePlatform.android: ReleaseStatus.active}, ), const Release( id: 2, @@ -99,6 +100,7 @@ flutter: version: '0.1.1', flutterRevision: flutterRevision, displayName: null, + platformStatuses: {}, ), const Release( id: releaseId, @@ -106,6 +108,7 @@ flutter: version: versionNumber, flutterRevision: flutterRevision, displayName: null, + platformStatuses: {ReleasePlatform.android: ReleaseStatus.active}, ), ], ); diff --git a/packages/shorebird_cli/test/src/commands/releases/list_releases_command_test.dart b/packages/shorebird_cli/test/src/commands/releases/list_releases_command_test.dart index 9ebc4a3f..eab97dfb 100644 --- a/packages/shorebird_cli/test/src/commands/releases/list_releases_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/releases/list_releases_command_test.dart @@ -155,6 +155,7 @@ flavors: version: '1.0.0', flutterRevision: flutterRevision, displayName: 'v1.0.0 (dev)', + platformStatuses: {ReleasePlatform.ios: ReleaseStatus.draft}, ), ], ); @@ -187,6 +188,7 @@ flavors: version: '1.0.1', flutterRevision: flutterRevision, displayName: 'First', + platformStatuses: {ReleasePlatform.ios: ReleaseStatus.active}, ), const Release( id: 1, @@ -194,6 +196,7 @@ flavors: version: '1.0.2', flutterRevision: flutterRevision, displayName: null, + platformStatuses: {ReleasePlatform.ios: ReleaseStatus.draft}, ), ], ); diff --git a/packages/shorebird_code_push_client/lib/src/code_push_client.dart b/packages/shorebird_code_push_client/lib/src/code_push_client.dart index 73abb8cc..0d4f36d6 100644 --- a/packages/shorebird_code_push_client/lib/src/code_push_client.dart +++ b/packages/shorebird_code_push_client/lib/src/code_push_client.dart @@ -303,7 +303,8 @@ class CodePushClient { throw _parseErrorResponse(response.statusCode, response.body); } final body = json.decode(response.body) as Map; - return Release.fromJson(body); + final createReleaseResponse = CreateReleaseResponse.fromJson(body); + return createReleaseResponse.release; } /// Updates the specified release's status to [status]. diff --git a/packages/shorebird_code_push_client/test/src/code_push_client_test.dart b/packages/shorebird_code_push_client/test/src/code_push_client_test.dart index da2bdcd5..493f1fdc 100644 --- a/packages/shorebird_code_push_client/test/src/code_push_client_test.dart +++ b/packages/shorebird_code_push_client/test/src/code_push_client_test.dart @@ -1109,12 +1109,15 @@ void main() { Stream.value( utf8.encode( json.encode( - Release( - id: releaseId, - appId: appId, - version: version, - flutterRevision: flutterRevision, - displayName: displayName, + CreateReleaseResponse( + release: Release( + id: releaseId, + appId: appId, + version: version, + flutterRevision: flutterRevision, + displayName: displayName, + platformStatuses: {}, + ), ), ), ), @@ -1141,7 +1144,12 @@ void main() { 'flutterRevision', flutterRevision, ) - .having((r) => r.displayName, 'displayName', displayName), + .having((r) => r.displayName, 'displayName', displayName) + .having( + (r) => r.platformStatuses, + 'platformStatuses', + {}, + ), ), ), ); @@ -1840,6 +1848,7 @@ void main() { version: '1.0.0', flutterRevision: flutterRevision, displayName: 'v1.0.0', + platformStatuses: {ReleasePlatform.android: ReleaseStatus.draft}, ), Release( id: 1, @@ -1847,6 +1856,7 @@ void main() { version: '1.0.1', flutterRevision: flutterRevision, displayName: 'v1.0.1', + platformStatuses: {}, ), ]; diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.dart index 7e13ff2f..e21dcdc1 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.dart @@ -1,4 +1,5 @@ import 'package:json_annotation/json_annotation.dart'; +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; part 'create_release_response.g.dart'; @@ -9,11 +10,7 @@ part 'create_release_response.g.dart'; class CreateReleaseResponse { /// {@macro create_release_response} const CreateReleaseResponse({ - required this.id, - required this.appId, - required this.version, - required this.flutterRevision, - required this.displayName, + required this.release, }); /// Converts a Map to a [CreateReleaseResponse] @@ -23,18 +20,6 @@ class CreateReleaseResponse { /// Converts a [CreateReleaseResponse] to a Map Map toJson() => _$CreateReleaseResponseToJson(this); - /// The ID of the release; - final int id; - - /// The ID of the app. - final String appId; - - /// The version of the release. - final String version; - - /// The Flutter revision used to create the release. - final String flutterRevision; - - /// The display name for the release - final String? displayName; + /// The newly-created release. + final Release release; } diff --git a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.g.dart b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.g.dart index ac6e4f9e..f13476d8 100644 --- a/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.g.dart +++ b/packages/shorebird_code_push_protocol/lib/src/messages/create_release/create_release_response.g.dart @@ -15,28 +15,15 @@ CreateReleaseResponse _$CreateReleaseResponseFromJson( json, ($checkedConvert) { final val = CreateReleaseResponse( - id: $checkedConvert('id', (v) => v as int), - appId: $checkedConvert('app_id', (v) => v as String), - version: $checkedConvert('version', (v) => v as String), - flutterRevision: - $checkedConvert('flutter_revision', (v) => v as String), - displayName: $checkedConvert('display_name', (v) => v as String?), + release: $checkedConvert( + 'release', (v) => Release.fromJson(v as Map)), ); return val; }, - fieldKeyMap: const { - 'appId': 'app_id', - 'flutterRevision': 'flutter_revision', - 'displayName': 'display_name' - }, ); Map _$CreateReleaseResponseToJson( CreateReleaseResponse instance) => { - 'id': instance.id, - 'app_id': instance.appId, - 'version': instance.version, - 'flutter_revision': instance.flutterRevision, - 'display_name': instance.displayName, + 'release': instance.release.toJson(), }; diff --git a/packages/shorebird_code_push_protocol/lib/src/models/release.dart b/packages/shorebird_code_push_protocol/lib/src/models/release.dart index 77400737..47f732b2 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/release.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/release.dart @@ -1,4 +1,5 @@ import 'package:json_annotation/json_annotation.dart'; +import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; part 'release.g.dart'; @@ -15,6 +16,7 @@ class Release { required this.version, required this.flutterRevision, required this.displayName, + required this.platformStatuses, }); /// Converts a Map to a [Release] @@ -38,4 +40,7 @@ class Release { /// The display name for the release final String? displayName; + + /// The status of the release for each platform. + final Map platformStatuses; } diff --git a/packages/shorebird_code_push_protocol/lib/src/models/release.g.dart b/packages/shorebird_code_push_protocol/lib/src/models/release.g.dart index f44651bd..20bebf46 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/release.g.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/release.g.dart @@ -19,13 +19,20 @@ Release _$ReleaseFromJson(Map json) => $checkedCreate( flutterRevision: $checkedConvert('flutter_revision', (v) => v as String), displayName: $checkedConvert('display_name', (v) => v as String?), + platformStatuses: $checkedConvert( + 'platform_statuses', + (v) => (v as Map).map( + (k, e) => MapEntry($enumDecode(_$ReleasePlatformEnumMap, k), + $enumDecode(_$ReleaseStatusEnumMap, e)), + )), ); return val; }, fieldKeyMap: const { 'appId': 'app_id', 'flutterRevision': 'flutter_revision', - 'displayName': 'display_name' + 'displayName': 'display_name', + 'platformStatuses': 'platform_statuses' }, ); @@ -35,4 +42,16 @@ Map _$ReleaseToJson(Release instance) => { 'version': instance.version, 'flutter_revision': instance.flutterRevision, 'display_name': instance.displayName, + 'platform_statuses': instance.platformStatuses.map((k, e) => + MapEntry(_$ReleasePlatformEnumMap[k]!, _$ReleaseStatusEnumMap[e]!)), }; + +const _$ReleaseStatusEnumMap = { + ReleaseStatus.draft: 'draft', + ReleaseStatus.active: 'active', +}; + +const _$ReleasePlatformEnumMap = { + ReleasePlatform.android: 'android', + ReleasePlatform.ios: 'ios', +}; diff --git a/packages/shorebird_code_push_protocol/test/src/messages/create_release/create_release_response_test.dart b/packages/shorebird_code_push_protocol/test/src/messages/create_release/create_release_response_test.dart index 85d16f7f..81f9213b 100644 --- a/packages/shorebird_code_push_protocol/test/src/messages/create_release/create_release_response_test.dart +++ b/packages/shorebird_code_push_protocol/test/src/messages/create_release/create_release_response_test.dart @@ -5,11 +5,14 @@ void main() { group(CreateReleaseResponse, () { test('can be (de)serialized', () { const response = CreateReleaseResponse( - id: 0, - appId: 'test-app-id', - version: '1.0.0', - displayName: 'v1.0.0', - flutterRevision: 'flutter-revision', + release: Release( + id: 0, + appId: 'test-app-id', + version: '1.0.0', + displayName: 'v1.0.0', + flutterRevision: 'flutter-revision', + platformStatuses: {}, + ), ); expect( CreateReleaseResponse.fromJson(response.toJson()).toJson(), diff --git a/packages/shorebird_code_push_protocol/test/src/models/release_test.dart b/packages/shorebird_code_push_protocol/test/src/models/release_test.dart index dc813338..c799c864 100644 --- a/packages/shorebird_code_push_protocol/test/src/models/release_test.dart +++ b/packages/shorebird_code_push_protocol/test/src/models/release_test.dart @@ -10,6 +10,7 @@ void main() { version: '1.0.0', flutterRevision: '83305b5088e6fe327fb3334a73ff190828d85713', displayName: 'v1.0.0', + platformStatuses: {ReleasePlatform.android: ReleaseStatus.active}, ); expect( Release.fromJson(release.toJson()).toJson(),