From 5d845fc7ae71a28bb89ab13991ee7a438062a262 Mon Sep 17 00:00:00 2001 From: Bryan Oltman Date: Fri, 23 Aug 2024 17:06:30 -0400 Subject: [PATCH] refactor(shorebird_cli): update how command metadata is populated (#2441) --- .../lib/src/commands/patch/aar_patcher.dart | 21 ----- .../src/commands/patch/android_patcher.dart | 22 ----- .../commands/patch/ios_framework_patcher.dart | 28 +++---- .../lib/src/commands/patch/ios_patcher.dart | 28 +++---- .../lib/src/commands/patch/patch_command.dart | 25 +++++- .../lib/src/commands/patch/patcher.dart | 9 ++- .../src/commands/release/aar_releaser.dart | 17 ---- .../commands/release/android_releaser.dart | 20 +---- .../release/ios_framework_releaser.dart | 27 +++---- .../src/commands/release/ios_releaser.dart | 27 +++---- .../src/commands/release/release_command.dart | 15 +++- .../lib/src/commands/release/releaser.dart | 9 ++- .../src/commands/patch/aar_patcher_test.dart | 52 +++--------- .../commands/patch/android_patcher_test.dart | 54 +++---------- .../patch/ios_framework_patcher_test.dart | 80 +++++++++---------- .../src/commands/patch/ios_patcher_test.dart | 80 +++++++++---------- .../commands/patch/patch_command_test.dart | 10 ++- .../test/src/commands/patch/patcher_test.dart | 4 +- .../commands/release/aar_releaser_test.dart | 38 +-------- .../release/android_releaser_test.dart | 75 ++++++++--------- .../release/ios_framework_releaser_test.dart | 28 ++++--- .../commands/release/ios_releaser_test.dart | 49 ++++++------ .../release/release_command_test.dart | 3 +- .../src/commands/release/releaser_test.dart | 5 +- .../example/main.dart | 2 - .../models/build_environment_metadata.dart | 20 ++++- .../lib/src/models/create_patch_metadata.dart | 25 +++++- .../src/models/update_release_metadata.dart | 18 ++++- .../build_environment_metadata_test.dart | 43 ++++++++++ .../models/create_patch_metadata_test.dart | 77 ++++++++++++++++++ .../models/update_release_metadata_test.dart | 65 +++++++++++++++ 31 files changed, 540 insertions(+), 436 deletions(-) diff --git a/packages/shorebird_cli/lib/src/commands/patch/aar_patcher.dart b/packages/shorebird_cli/lib/src/commands/patch/aar_patcher.dart index 6a1f4d5c..2dddede1 100644 --- a/packages/shorebird_cli/lib/src/commands/patch/aar_patcher.dart +++ b/packages/shorebird_cli/lib/src/commands/patch/aar_patcher.dart @@ -13,7 +13,6 @@ import 'package:shorebird_cli/src/commands/patch/patch.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_android_artifacts.dart'; @@ -21,7 +20,6 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; /// {@template aar_patcher} @@ -180,23 +178,4 @@ class AarPatcher extends Patcher { 'Release version must be specified using --release-version.', ); } - - @override - Future createPatchMetadata(DiffStatus diffStatus) async { - return CreatePatchMetadata( - releasePlatform: releaseType.releasePlatform, - usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, - usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: null, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, - ), - ); - } } diff --git a/packages/shorebird_cli/lib/src/commands/patch/android_patcher.dart b/packages/shorebird_cli/lib/src/commands/patch/android_patcher.dart index 7be4fa3e..387aeea8 100644 --- a/packages/shorebird_cli/lib/src/commands/patch/android_patcher.dart +++ b/packages/shorebird_cli/lib/src/commands/patch/android_patcher.dart @@ -14,15 +14,12 @@ import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_android_artifacts.dart'; -import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; /// {@template android_patcher} @@ -204,23 +201,4 @@ Looked in: artifact.path, ); } - - @override - Future createPatchMetadata(DiffStatus diffStatus) async { - return CreatePatchMetadata( - releasePlatform: releaseType.releasePlatform, - usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, - usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: null, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, - ), - ); - } } diff --git a/packages/shorebird_cli/lib/src/commands/patch/ios_framework_patcher.dart b/packages/shorebird_cli/lib/src/commands/patch/ios_framework_patcher.dart index 52fd948a..ce470035 100644 --- a/packages/shorebird_cli/lib/src/commands/patch/ios_framework_patcher.dart +++ b/packages/shorebird_cli/lib/src/commands/patch/ios_framework_patcher.dart @@ -17,7 +17,6 @@ import 'package:shorebird_cli/src/executables/xcodebuild.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_artifacts.dart'; @@ -25,7 +24,6 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; /// {@template ios_framework_patcher} @@ -228,23 +226,15 @@ class IosFrameworkPatcher extends Patcher { } @override - Future createPatchMetadata(DiffStatus diffStatus) async { - return CreatePatchMetadata( - releasePlatform: releaseType.releasePlatform, - usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, - usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: lastBuildLinkPercentage, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: await xcodeBuild.version(), - ), - ); - } + Future updatedCreatePatchMetadata( + CreatePatchMetadata metadata, + ) async => + metadata.copyWith( + linkPercentage: lastBuildLinkPercentage, + environment: metadata.environment.copyWith( + xcodeVersion: await xcodeBuild.version(), + ), + ); Future _runLinker({ required File aotSnapshot, diff --git a/packages/shorebird_cli/lib/src/commands/patch/ios_patcher.dart b/packages/shorebird_cli/lib/src/commands/patch/ios_patcher.dart index ca681fd5..90864bc0 100644 --- a/packages/shorebird_cli/lib/src/commands/patch/ios_patcher.dart +++ b/packages/shorebird_cli/lib/src/commands/patch/ios_patcher.dart @@ -21,7 +21,6 @@ import 'package:shorebird_cli/src/executables/executables.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_artifacts.dart'; @@ -30,7 +29,6 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; @@ -339,23 +337,15 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''', } @override - Future createPatchMetadata(DiffStatus diffStatus) async { - return CreatePatchMetadata( - releasePlatform: releaseType.releasePlatform, - usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, - usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: lastBuildLinkPercentage, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: await xcodeBuild.version(), - ), - ); - } + Future updatedCreatePatchMetadata( + CreatePatchMetadata metadata, + ) async => + metadata.copyWith( + linkPercentage: lastBuildLinkPercentage, + environment: metadata.environment.copyWith( + xcodeVersion: await xcodeBuild.version(), + ), + ); Future<_LinkResult> _runLinker({ required File releaseArtifact, diff --git a/packages/shorebird_cli/lib/src/commands/patch/patch_command.dart b/packages/shorebird_cli/lib/src/commands/patch/patch_command.dart index a29f943b..1d1d81ac 100644 --- a/packages/shorebird_cli/lib/src/commands/patch/patch_command.dart +++ b/packages/shorebird_cli/lib/src/commands/patch/patch_command.dart @@ -17,6 +17,7 @@ import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/formatters/formatters.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; +import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_command.dart'; @@ -24,6 +25,7 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; +import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; typedef ResolvePatcher = Patcher Function(ReleaseType releaseType); @@ -149,6 +151,12 @@ NOTE: this is ${styleBold.wrap('not')} recommended. Asset changes cannot be incl /// The target script, if provided. late String? target = results.findOption('target', argParser: argParser); + /// Whether to allow changes in assets (--allow-asset-diffs). + bool get allowAssetDiffs => results['allow-asset-diffs'] == true; + + /// Whether to allow changes in native code (--allow-native-diffs). + bool get allowNativeDiffs => results['allow-native-diffs'] == true; + bool get isStaging => results['staging'] == true; @override @@ -293,10 +301,25 @@ NOTE: this is ${styleBold.wrap('not')} recommended. Asset changes cannot be incl patcher: patcher, patchArtifactBundles: patchArtifactBundles, ); + + final baseMetadata = CreatePatchMetadata( + releasePlatform: patcher.releaseType.releasePlatform, + usedIgnoreAssetChangesFlag: allowAssetDiffs, + hasAssetChanges: diffStatus.hasAssetChanges, + usedIgnoreNativeChangesFlag: allowNativeDiffs, + hasNativeChanges: diffStatus.hasNativeChanges, + environment: BuildEnvironmentMetadata( + flutterRevision: shorebirdEnv.flutterRevision, + operatingSystem: platform.operatingSystem, + operatingSystemVersion: platform.operatingSystemVersion, + shorebirdVersion: packageVersion, + ), + ); + await codePushClientWrapper.publishPatch( appId: appId, releaseId: release.id, - metadata: await patcher.createPatchMetadata(diffStatus), + metadata: await patcher.updatedCreatePatchMetadata(baseMetadata), platform: patcher.releaseType.releasePlatform, track: isStaging ? DeploymentTrack.staging : DeploymentTrack.production, diff --git a/packages/shorebird_cli/lib/src/commands/patch/patcher.dart b/packages/shorebird_cli/lib/src/commands/patch/patcher.dart index c5d9d781..e6339809 100644 --- a/packages/shorebird_cli/lib/src/commands/patch/patcher.dart +++ b/packages/shorebird_cli/lib/src/commands/patch/patcher.dart @@ -92,9 +92,12 @@ ${iOSLinkPercentageUrl.toLink()} required File releaseArtifact, }); - /// Metadata to attach to the patch when creating it, used for debugging - /// and support. - Future createPatchMetadata(DiffStatus diffStatus); + /// Updates the provided metadata to include patcher-specific fields. + Future updatedCreatePatchMetadata( + CreatePatchMetadata metadata, + ) async { + return metadata; + } /// Whether to allow changes in assets (--allow-asset-diffs). bool get allowAssetDiffs => argResults['allow-asset-diffs'] == true; diff --git a/packages/shorebird_cli/lib/src/commands/release/aar_releaser.dart b/packages/shorebird_cli/lib/src/commands/release/aar_releaser.dart index b26bffb3..c5befc08 100644 --- a/packages/shorebird_cli/lib/src/commands/release/aar_releaser.dart +++ b/packages/shorebird_cli/lib/src/commands/release/aar_releaser.dart @@ -9,7 +9,6 @@ import 'package:shorebird_cli/src/code_push_client_wrapper.dart'; import 'package:shorebird_cli/src/commands/release/releaser.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_android_artifacts.dart'; @@ -17,7 +16,6 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; /// {@template aar_releaser} @@ -144,21 +142,6 @@ class AarReleaser extends Releaser { ); } - @override - Future releaseMetadata() async => - UpdateReleaseMetadata( - releasePlatform: releaseType.releasePlatform, - flutterVersionOverride: argResults['flutter-version'] as String?, - generatedApks: false, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, - ), - ); - @override String get postReleaseInstructions { final targetLibraryDirectory = Directory( diff --git a/packages/shorebird_cli/lib/src/commands/release/android_releaser.dart b/packages/shorebird_cli/lib/src/commands/release/android_releaser.dart index 54abf9b8..93451457 100644 --- a/packages/shorebird_cli/lib/src/commands/release/android_releaser.dart +++ b/packages/shorebird_cli/lib/src/commands/release/android_releaser.dart @@ -8,15 +8,12 @@ import 'package:shorebird_cli/src/commands/release/releaser.dart'; import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_android_artifacts.dart'; -import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; /// {@template android_releaser} @@ -188,19 +185,10 @@ Please comment and upvote ${link(uri: Uri.parse('https://github.com/shorebirdtec } @override - Future releaseMetadata() async => - UpdateReleaseMetadata( - releasePlatform: releaseType.releasePlatform, - flutterVersionOverride: argResults['flutter-version'] as String?, - generatedApks: generateApk, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, - ), - ); + Future updatedReleaseMetadata( + UpdateReleaseMetadata metadata, + ) async => + metadata.copyWith(generatedApks: generateApk); @override String get postReleaseInstructions { diff --git a/packages/shorebird_cli/lib/src/commands/release/ios_framework_releaser.dart b/packages/shorebird_cli/lib/src/commands/release/ios_framework_releaser.dart index bb8943d3..a70d8c45 100644 --- a/packages/shorebird_cli/lib/src/commands/release/ios_framework_releaser.dart +++ b/packages/shorebird_cli/lib/src/commands/release/ios_framework_releaser.dart @@ -12,13 +12,11 @@ import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/executables/xcodebuild.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; /// {@template ios_framework_releaser} @@ -132,6 +130,16 @@ class IosFrameworkReleaser extends Releaser { ); } + @override + Future updatedReleaseMetadata( + UpdateReleaseMetadata metadata, + ) async => + metadata.copyWith( + environment: metadata.environment.copyWith( + xcodeVersion: await xcodeBuild.version(), + ), + ); + @override String get postReleaseInstructions { final relativeFrameworkDirectoryPath = p.relative(releaseDirectory.path); @@ -146,19 +154,4 @@ To do this: Instructions for these steps can be found at https://docs.flutter.dev/add-to-app/ios/project-setup#option-b---embed-frameworks-in-xcode. '''; } - - @override - Future releaseMetadata() async => - UpdateReleaseMetadata( - releasePlatform: releaseType.releasePlatform, - flutterVersionOverride: argResults['flutter-version'] as String?, - generatedApks: false, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: await xcodeBuild.version(), - ), - ); } diff --git a/packages/shorebird_cli/lib/src/commands/release/ios_releaser.dart b/packages/shorebird_cli/lib/src/commands/release/ios_releaser.dart index 90aa6574..bcfeb2ad 100644 --- a/packages/shorebird_cli/lib/src/commands/release/ios_releaser.dart +++ b/packages/shorebird_cli/lib/src/commands/release/ios_releaser.dart @@ -14,7 +14,6 @@ import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/executables/xcodebuild.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/logger.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/ios.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_documentation.dart'; @@ -22,7 +21,6 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; /// {@template ios_releaser} @@ -198,6 +196,16 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''', ); } + @override + Future updatedReleaseMetadata( + UpdateReleaseMetadata metadata, + ) async => + metadata.copyWith( + environment: metadata.environment.copyWith( + xcodeVersion: await xcodeBuild.version(), + ), + ); + @override String get postReleaseInstructions { final relativeArchivePath = p.relative( @@ -227,19 +235,4 @@ ${styleBold.wrap('Make sure to uncheck "Manage Version and Build Number", or els '''; } } - - @override - Future releaseMetadata() async => - UpdateReleaseMetadata( - releasePlatform: releaseType.releasePlatform, - flutterVersionOverride: argResults['flutter-version'] as String?, - generatedApks: false, - environment: BuildEnvironmentMetadata( - flutterRevision: shorebirdEnv.flutterRevision, - operatingSystem: platform.operatingSystem, - operatingSystemVersion: platform.operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: await xcodeBuild.version(), - ), - ); } diff --git a/packages/shorebird_cli/lib/src/commands/release/release_command.dart b/packages/shorebird_cli/lib/src/commands/release/release_command.dart index 8f56d052..285dca9f 100644 --- a/packages/shorebird_cli/lib/src/commands/release/release_command.dart +++ b/packages/shorebird_cli/lib/src/commands/release/release_command.dart @@ -11,6 +11,7 @@ import 'package:shorebird_cli/src/config/config.dart'; import 'package:shorebird_cli/src/extensions/arg_results.dart'; import 'package:shorebird_cli/src/extensions/version.dart'; import 'package:shorebird_cli/src/logger.dart'; +import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_command.dart'; @@ -18,6 +19,7 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; import 'package:shorebird_cli/src/third_party/flutter_tools/lib/flutter_tools.dart'; +import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart'; @@ -476,12 +478,23 @@ ${summary.join('\n')} required Release release, required Releaser releaser, }) async { + final baseMetadata = UpdateReleaseMetadata( + releasePlatform: releaser.releaseType.releasePlatform, + flutterVersionOverride: results['flutter-version'] as String?, + environment: BuildEnvironmentMetadata( + flutterRevision: shorebirdEnv.flutterRevision, + operatingSystem: platform.operatingSystem, + operatingSystemVersion: platform.operatingSystemVersion, + shorebirdVersion: packageVersion, + ), + ); + await codePushClientWrapper.updateReleaseStatus( appId: appId, releaseId: release.id, platform: releaser.releaseType.releasePlatform, status: ReleaseStatus.active, - metadata: await releaser.releaseMetadata(), + metadata: await releaser.updatedReleaseMetadata(baseMetadata), ); } diff --git a/packages/shorebird_cli/lib/src/commands/release/releaser.dart b/packages/shorebird_cli/lib/src/commands/release/releaser.dart index 7fe8027a..2fbb9956 100644 --- a/packages/shorebird_cli/lib/src/commands/release/releaser.dart +++ b/packages/shorebird_cli/lib/src/commands/release/releaser.dart @@ -54,9 +54,12 @@ abstract class Releaser { required String appId, }); - /// Metadata to attach to the release when creating it, used for debugging - /// and support. - Future releaseMetadata(); + /// Creates a copy of [metadata] with releaser-specific fields updated. + Future updatedReleaseMetadata( + UpdateReleaseMetadata metadata, + ) async { + return metadata; + } /// Instructions explaining next steps after running `shorebird release`. This /// could include how to upload the generated artifact to a store and how to diff --git a/packages/shorebird_cli/test/src/commands/patch/aar_patcher_test.dart b/packages/shorebird_cli/test/src/commands/patch/aar_patcher_test.dart index 58cd97be..f8d81e38 100644 --- a/packages/shorebird_cli/test/src/commands/patch/aar_patcher_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/aar_patcher_test.dart @@ -4,7 +4,6 @@ import 'package:args/args.dart'; import 'package:mason_logger/mason_logger.dart'; import 'package:mocktail/mocktail.dart'; import 'package:path/path.dart' as p; -import 'package:platform/platform.dart'; import 'package:scoped_deps/scoped_deps.dart'; import 'package:shorebird_cli/src/archive_analysis/android_archive_differ.dart'; import 'package:shorebird_cli/src/artifact_builder.dart'; @@ -41,7 +40,6 @@ void main() { late Directory projectRoot; late ShorebirdLogger logger; late PatchDiffChecker patchDiffChecker; - late Platform platform; late Progress progress; late ShorebirdEnv shorebirdEnv; late ShorebirdFlutter shorebirdFlutter; @@ -98,7 +96,6 @@ void main() { artifactManager = MockArtifactManager(); codePushClientWrapper = MockCodePushClientWrapper(); patchDiffChecker = MockPatchDiffChecker(); - platform = MockPlatform(); progress = MockProgress(); projectRoot = Directory.systemTemp.createTempSync(); logger = MockShorebirdLogger(); @@ -511,54 +508,31 @@ void main() { }); }); - group('createPatchMetadata', () { + group('updatedCreatePatchMetadata', () { const allowAssetDiffs = false; const allowNativeDiffs = true; const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; const operatingSystem = 'Mac OS X'; const operatingSystemVersion = '10.15.7'; - setUp(() { - when(() => argResults['allow-asset-diffs']).thenReturn(allowAssetDiffs); - when( - () => argResults['allow-native-diffs'], - ).thenReturn(allowNativeDiffs); - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); - }); - test('returns correct metadata', () async { - const diffStatus = DiffStatus( + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.android, + usedIgnoreAssetChangesFlag: allowAssetDiffs, hasAssetChanges: false, + usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, - ); - - final metadata = await runWithOverrides( - () => patcher.createPatchMetadata(diffStatus), + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ); expect( - metadata, - equals( - CreatePatchMetadata( - releasePlatform: ReleasePlatform.android, - usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, - usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: null, - environment: const BuildEnvironmentMetadata( - flutterRevision: flutterRevision, - operatingSystem: operatingSystem, - operatingSystemVersion: operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, - ), - ), - ), + runWithOverrides(() => patcher.updatedCreatePatchMetadata(metadata)), + completion(metadata), ); }); }); diff --git a/packages/shorebird_cli/test/src/commands/patch/android_patcher_test.dart b/packages/shorebird_cli/test/src/commands/patch/android_patcher_test.dart index d1912834..e78b6220 100644 --- a/packages/shorebird_cli/test/src/commands/patch/android_patcher_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/android_patcher_test.dart @@ -5,7 +5,6 @@ import 'package:crypto/crypto.dart'; import 'package:mason_logger/mason_logger.dart'; import 'package:mocktail/mocktail.dart'; import 'package:path/path.dart' as p; -import 'package:platform/platform.dart'; import 'package:scoped_deps/scoped_deps.dart'; import 'package:shorebird_cli/src/archive_analysis/android_archive_differ.dart'; import 'package:shorebird_cli/src/artifact_builder.dart'; @@ -18,7 +17,6 @@ import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/engine_config.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/shorebird_android_artifacts.dart'; import 'package:shorebird_cli/src/shorebird_env.dart'; @@ -43,7 +41,6 @@ void main() { late CodePushClientWrapper codePushClientWrapper; late CodeSigner codeSigner; late Doctor doctor; - late Platform platform; late Directory projectRoot; late ShorebirdLogger logger; late PatchDiffChecker patchDiffChecker; @@ -97,7 +94,6 @@ void main() { engineConfigRef.overrideWith(() => const EngineConfig.empty()), loggerRef.overrideWith(() => logger), patchDiffCheckerRef.overrideWith(() => patchDiffChecker), - platformRef.overrideWith(() => platform), processRef.overrideWith(() => shorebirdProcess), shorebirdEnvRef.overrideWith(() => shorebirdEnv), shorebirdFlutterRef.overrideWith(() => shorebirdFlutter), @@ -125,7 +121,6 @@ void main() { codeSigner = MockCodeSigner(); doctor = MockDoctor(); patchDiffChecker = MockPatchDiffChecker(); - platform = MockPlatform(); progress = MockProgress(); projectRoot = Directory.systemTemp.createTempSync(); logger = MockShorebirdLogger(); @@ -630,54 +625,31 @@ Looked in: }); }); - group('createPatchMetadata', () { + group('updatedCreatePatchMetadata', () { const allowAssetDiffs = false; const allowNativeDiffs = true; const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; const operatingSystem = 'Mac OS X'; const operatingSystemVersion = '10.15.7'; - setUp(() { - when(() => argResults['allow-asset-diffs']).thenReturn(allowAssetDiffs); - when( - () => argResults['allow-native-diffs'], - ).thenReturn(allowNativeDiffs); - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); - }); - test('returns correct metadata', () async { - const diffStatus = DiffStatus( + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.android, + usedIgnoreAssetChangesFlag: allowAssetDiffs, hasAssetChanges: false, + usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, - ); - - final metadata = await runWithOverrides( - () => patcher.createPatchMetadata(diffStatus), + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ); expect( - metadata, - equals( - CreatePatchMetadata( - releasePlatform: ReleasePlatform.android, - usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, - usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: null, - environment: const BuildEnvironmentMetadata( - flutterRevision: flutterRevision, - operatingSystem: operatingSystem, - operatingSystemVersion: operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, - ), - ), - ), + runWithOverrides(() => patcher.updatedCreatePatchMetadata(metadata)), + completion(metadata), ); }); }); diff --git a/packages/shorebird_cli/test/src/commands/patch/ios_framework_patcher_test.dart b/packages/shorebird_cli/test/src/commands/patch/ios_framework_patcher_test.dart index 7e7a7711..9b3f0b1c 100644 --- a/packages/shorebird_cli/test/src/commands/patch/ios_framework_patcher_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/ios_framework_patcher_test.dart @@ -19,7 +19,6 @@ import 'package:shorebird_cli/src/executables/xcodebuild.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/os/operating_system_interface.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_artifacts.dart'; @@ -52,7 +51,6 @@ void main() { late ShorebirdLogger logger; late OperatingSystemInterface operatingSystemInterface; late PatchDiffChecker patchDiffChecker; - late Platform platform; late Progress progress; late ShorebirdArtifacts shorebirdArtifacts; late ShorebirdFlutterValidator flutterValidator; @@ -76,7 +74,6 @@ void main() { loggerRef.overrideWith(() => logger), osInterfaceRef.overrideWith(() => operatingSystemInterface), patchDiffCheckerRef.overrideWith(() => patchDiffChecker), - platformRef.overrideWith(() => platform), processRef.overrideWith(() => shorebirdProcess), shorebirdArtifactsRef.overrideWith(() => shorebirdArtifacts), shorebirdEnvRef.overrideWith(() => shorebirdEnv), @@ -105,7 +102,6 @@ void main() { engineConfig = MockEngineConfig(); operatingSystemInterface = MockOperatingSystemInterface(); patchDiffChecker = MockPatchDiffChecker(); - platform = MockPlatform(); progress = MockProgress(); projectRoot = Directory.systemTemp.createTempSync(); logger = MockShorebirdLogger(); @@ -819,7 +815,7 @@ void main() { }); }); - group('createPatchMetadata', () { + group('updatedCreatePatchMetadata', () { const allowAssetDiffs = false; const allowNativeDiffs = true; const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; @@ -828,17 +824,6 @@ void main() { const xcodeVersion = '11'; setUp(() { - when( - () => argResults['allow-asset-diffs'], - ).thenReturn(allowAssetDiffs); - when( - () => argResults['allow-native-diffs'], - ).thenReturn(allowNativeDiffs); - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); when( () => xcodeBuild.version(), ).thenAnswer((_) async => xcodeVersion); @@ -846,26 +831,32 @@ void main() { group('when linker is not enabled', () { test('returns correct metadata', () async { - const diffStatus = DiffStatus( - hasAssetChanges: false, - hasNativeChanges: false, - ); - - final metadata = await runWithOverrides( - () => patcher.createPatchMetadata(diffStatus), + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.ios, + usedIgnoreAssetChangesFlag: allowAssetDiffs, + hasAssetChanges: true, + usedIgnoreNativeChangesFlag: allowNativeDiffs, + hasNativeChanges: true, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ); expect( - metadata, - equals( - CreatePatchMetadata( + runWithOverrides( + () => patcher.updatedCreatePatchMetadata(metadata), + ), + completion( + const CreatePatchMetadata( releasePlatform: ReleasePlatform.ios, usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, + hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: null, - environment: const BuildEnvironmentMetadata( + hasNativeChanges: true, + environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, operatingSystemVersion: operatingSystemVersion, @@ -886,26 +877,33 @@ void main() { }); test('returns correct metadata', () async { - const diffStatus = DiffStatus( + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.ios, + usedIgnoreAssetChangesFlag: allowAssetDiffs, hasAssetChanges: false, + usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, - ); - - final metadata = await runWithOverrides( - () => patcher.createPatchMetadata(diffStatus), + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ); expect( - metadata, - equals( - CreatePatchMetadata( + runWithOverrides( + () => patcher.updatedCreatePatchMetadata(metadata), + ), + completion( + const CreatePatchMetadata( releasePlatform: ReleasePlatform.ios, usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, + hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, + hasNativeChanges: false, linkPercentage: linkPercentage, - environment: const BuildEnvironmentMetadata( + environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, operatingSystemVersion: operatingSystemVersion, diff --git a/packages/shorebird_cli/test/src/commands/patch/ios_patcher_test.dart b/packages/shorebird_cli/test/src/commands/patch/ios_patcher_test.dart index c1c9adf2..0da629f2 100644 --- a/packages/shorebird_cli/test/src/commands/patch/ios_patcher_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/ios_patcher_test.dart @@ -23,7 +23,6 @@ import 'package:shorebird_cli/src/executables/xcodebuild.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/os/operating_system_interface.dart'; import 'package:shorebird_cli/src/patch_diff_checker.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_artifacts.dart'; @@ -59,7 +58,6 @@ void main() { late ShorebirdLogger logger; late OperatingSystemInterface operatingSystemInterface; late PatchDiffChecker patchDiffChecker; - late Platform platform; late Progress progress; late ShorebirdArtifacts shorebirdArtifacts; late ShorebirdFlutterValidator flutterValidator; @@ -86,7 +84,6 @@ void main() { loggerRef.overrideWith(() => logger), osInterfaceRef.overrideWith(() => operatingSystemInterface), patchDiffCheckerRef.overrideWith(() => patchDiffChecker), - platformRef.overrideWith(() => platform), processRef.overrideWith(() => shorebirdProcess), shorebirdArtifactsRef.overrideWith(() => shorebirdArtifacts), shorebirdEnvRef.overrideWith(() => shorebirdEnv), @@ -118,7 +115,6 @@ void main() { ios = MockIos(); operatingSystemInterface = MockOperatingSystemInterface(); patchDiffChecker = MockPatchDiffChecker(); - platform = MockPlatform(); progress = MockProgress(); projectRoot = Directory.systemTemp.createTempSync(); logger = MockShorebirdLogger(); @@ -1584,7 +1580,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''', }); }); - group('createPatchMetadata', () { + group('updatedCreatePatchMetadata', () { const allowAssetDiffs = false; const allowNativeDiffs = true; const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; @@ -1593,17 +1589,6 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''', const xcodeVersion = '11'; setUp(() { - when( - () => argResults['allow-asset-diffs'], - ).thenReturn(allowAssetDiffs); - when( - () => argResults['allow-native-diffs'], - ).thenReturn(allowNativeDiffs); - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); when( () => xcodeBuild.version(), ).thenAnswer((_) async => xcodeVersion); @@ -1611,26 +1596,32 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''', group('when linker is not enabled', () { test('returns correct metadata', () async { - const diffStatus = DiffStatus( + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.ios, + usedIgnoreAssetChangesFlag: allowAssetDiffs, hasAssetChanges: false, - hasNativeChanges: false, - ); - - final metadata = await runWithOverrides( - () => patcher.createPatchMetadata(diffStatus), + usedIgnoreNativeChangesFlag: allowNativeDiffs, + hasNativeChanges: true, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ); expect( - metadata, - equals( - CreatePatchMetadata( + runWithOverrides( + () => patcher.updatedCreatePatchMetadata(metadata), + ), + completion( + const CreatePatchMetadata( releasePlatform: ReleasePlatform.ios, usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, + hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, - linkPercentage: null, - environment: const BuildEnvironmentMetadata( + hasNativeChanges: true, + environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, operatingSystemVersion: operatingSystemVersion, @@ -1651,26 +1642,33 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}''', }); test('returns correct metadata', () async { - const diffStatus = DiffStatus( - hasAssetChanges: false, + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.ios, + usedIgnoreAssetChangesFlag: allowAssetDiffs, + hasAssetChanges: true, + usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, - ); - - final metadata = await runWithOverrides( - () => patcher.createPatchMetadata(diffStatus), + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ); expect( - metadata, - equals( - CreatePatchMetadata( + runWithOverrides( + () => patcher.updatedCreatePatchMetadata(metadata), + ), + completion( + const CreatePatchMetadata( releasePlatform: ReleasePlatform.ios, usedIgnoreAssetChangesFlag: allowAssetDiffs, - hasAssetChanges: diffStatus.hasAssetChanges, + hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, - hasNativeChanges: diffStatus.hasNativeChanges, + hasNativeChanges: false, linkPercentage: linkPercentage, - environment: const BuildEnvironmentMetadata( + environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, operatingSystemVersion: operatingSystemVersion, diff --git a/packages/shorebird_cli/test/src/commands/patch/patch_command_test.dart b/packages/shorebird_cli/test/src/commands/patch/patch_command_test.dart index dad7a77b..7ac4113f 100644 --- a/packages/shorebird_cli/test/src/commands/patch/patch_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/patch_command_test.dart @@ -49,6 +49,10 @@ void main() { ), }; const shorebirdYaml = ShorebirdYaml(appId: appId); + const diffStatus = DiffStatus( + hasAssetChanges: false, + hasNativeChanges: false, + ); final patchMetadata = CreatePatchMetadata.forTest(); final appMetadata = AppMetadata( @@ -241,7 +245,7 @@ void main() { ), ).thenAnswer((_) async => patchArtifactBundles); when( - () => patcher.createPatchMetadata(any()), + () => patcher.updatedCreatePatchMetadata(any()), ).thenAnswer((_) async => patchMetadata); when( () => patcher.assertUnpatchableDiffs( @@ -249,7 +253,7 @@ void main() { releaseArchive: any(named: 'releaseArchive'), patchArchive: any(named: 'patchArchive'), ), - ).thenAnswer((_) async => FakeDiffStatus()); + ).thenAnswer((_) async => diffStatus); when(() => shorebirdEnv.getShorebirdYaml()).thenReturn(shorebirdYaml); when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); @@ -596,7 +600,7 @@ void main() { releaseArtifact: any(named: 'releaseArtifact'), ), () => logger.confirm('Would you like to continue?'), - () => patcher.createPatchMetadata(any()), + () => patcher.updatedCreatePatchMetadata(any()), () => codePushClientWrapper.publishPatch( appId: appId, releaseId: release.id, diff --git a/packages/shorebird_cli/test/src/commands/patch/patcher_test.dart b/packages/shorebird_cli/test/src/commands/patch/patcher_test.dart index 9286a98f..67f9171d 100644 --- a/packages/shorebird_cli/test/src/commands/patch/patcher_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/patcher_test.dart @@ -193,7 +193,9 @@ class _TestPatcher extends Patcher { } @override - Future createPatchMetadata(DiffStatus diffStatus) { + Future updatedCreatePatchMetadata( + CreatePatchMetadata metadata, + ) { throw UnimplementedError(); } diff --git a/packages/shorebird_cli/test/src/commands/release/aar_releaser_test.dart b/packages/shorebird_cli/test/src/commands/release/aar_releaser_test.dart index 5d93b567..e092e3e9 100644 --- a/packages/shorebird_cli/test/src/commands/release/aar_releaser_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/aar_releaser_test.dart @@ -4,7 +4,6 @@ import 'package:args/args.dart'; import 'package:mason_logger/mason_logger.dart'; import 'package:mocktail/mocktail.dart'; import 'package:path/path.dart' as p; -import 'package:platform/platform.dart'; import 'package:scoped_deps/scoped_deps.dart'; import 'package:shorebird_cli/src/artifact_builder.dart'; import 'package:shorebird_cli/src/code_push_client_wrapper.dart'; @@ -12,7 +11,6 @@ import 'package:shorebird_cli/src/commands/release/aar_releaser.dart'; import 'package:shorebird_cli/src/engine_config.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/os/operating_system_interface.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_android_artifacts.dart'; @@ -20,7 +18,6 @@ import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; import 'package:shorebird_cli/src/shorebird_process.dart'; import 'package:shorebird_cli/src/shorebird_validator.dart'; -import 'package:shorebird_cli/src/version.dart'; import 'package:shorebird_code_push_client/shorebird_code_push_client.dart'; import 'package:test/test.dart'; @@ -35,7 +32,6 @@ void main() { late ArgResults argResults; late ArtifactBuilder artifactBuilder; late CodePushClientWrapper codePushClientWrapper; - late Platform platform; late Directory projectRoot; late ShorebirdLogger logger; late OperatingSystemInterface operatingSystemInterface; @@ -56,7 +52,6 @@ void main() { engineConfigRef.overrideWith(() => const EngineConfig.empty()), loggerRef.overrideWith(() => logger), osInterfaceRef.overrideWith(() => operatingSystemInterface), - platformRef.overrideWith(() => platform), processRef.overrideWith(() => shorebirdProcess), shorebirdEnvRef.overrideWith(() => shorebirdEnv), shorebirdFlutterRef.overrideWith(() => shorebirdFlutter), @@ -77,7 +72,6 @@ void main() { artifactBuilder = MockArtifactBuilder(); codePushClientWrapper = MockCodePushClientWrapper(); operatingSystemInterface = MockOperatingSystemInterface(); - platform = MockPlatform(); progress = MockProgress(); projectRoot = Directory.systemTemp.createTempSync(); logger = MockShorebirdLogger(); @@ -424,36 +418,12 @@ void main() { }); }); - group('releaseMetadata', () { - const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; - const operatingSystem = 'macos'; - const operatingSystemVersion = '11.0.0'; - - setUp(() { - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); - }); - + group('updatedReleaseMetadata', () { test('returns expected metadata', () async { + final metadata = UpdateReleaseMetadata.forTest(); expect( - await runWithOverrides(aarReleaser.releaseMetadata), - equals( - const UpdateReleaseMetadata( - releasePlatform: ReleasePlatform.android, - flutterVersionOverride: null, - generatedApks: false, - environment: BuildEnvironmentMetadata( - flutterRevision: flutterRevision, - operatingSystem: operatingSystem, - operatingSystemVersion: operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, - ), - ), - ), + aarReleaser.updatedReleaseMetadata(metadata), + completion(metadata), ); }); }); diff --git a/packages/shorebird_cli/test/src/commands/release/android_releaser_test.dart b/packages/shorebird_cli/test/src/commands/release/android_releaser_test.dart index 7490be8b..5461877b 100644 --- a/packages/shorebird_cli/test/src/commands/release/android_releaser_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/android_releaser_test.dart @@ -4,7 +4,6 @@ import 'package:args/args.dart'; import 'package:mason_logger/mason_logger.dart'; import 'package:mocktail/mocktail.dart'; import 'package:path/path.dart' as p; -import 'package:platform/platform.dart'; import 'package:scoped_deps/scoped_deps.dart'; import 'package:shorebird_cli/src/artifact_builder.dart'; import 'package:shorebird_cli/src/code_push_client_wrapper.dart'; @@ -15,7 +14,6 @@ import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/engine_config.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/os/operating_system_interface.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_android_artifacts.dart'; @@ -38,7 +36,6 @@ void main() { late CodePushClientWrapper codePushClientWrapper; late CodeSigner codeSigner; late Doctor doctor; - late Platform platform; late Directory projectRoot; late ShorebirdLogger logger; late OperatingSystemInterface operatingSystemInterface; @@ -62,7 +59,6 @@ void main() { engineConfigRef.overrideWith(() => const EngineConfig.empty()), loggerRef.overrideWith(() => logger), osInterfaceRef.overrideWith(() => operatingSystemInterface), - platformRef.overrideWith(() => platform), processRef.overrideWith(() => shorebirdProcess), shorebirdEnvRef.overrideWith(() => shorebirdEnv), shorebirdFlutterRef.overrideWith(() => shorebirdFlutter), @@ -86,7 +82,6 @@ void main() { codeSigner = MockCodeSigner(); doctor = MockDoctor(); operatingSystemInterface = MockOperatingSystemInterface(); - platform = MockPlatform(); progress = MockProgress(); projectRoot = Directory.systemTemp.createTempSync(); logger = MockShorebirdLogger(); @@ -647,18 +642,20 @@ To change the version of this release, change your app's version in your pubspec }); }); - group('releaseMetadata', () { + group('updatedReleaseMetadata', () { const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; const operatingSystem = 'macos'; const operatingSystemVersion = '11.0.0'; - - setUp(() { - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); - }); + const metadata = UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.android, + flutterVersionOverride: null, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), + ); group('when an apk is generated', () { setUp(() { @@ -667,17 +664,20 @@ To change the version of this release, change your app's version in your pubspec test('returns expected metadata', () async { expect( - await runWithOverrides(() => androidReleaser.releaseMetadata()), - const UpdateReleaseMetadata( - releasePlatform: ReleasePlatform.android, - flutterVersionOverride: null, - generatedApks: true, - environment: BuildEnvironmentMetadata( - flutterRevision: flutterRevision, - operatingSystem: operatingSystem, - operatingSystemVersion: operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, + runWithOverrides( + () => androidReleaser.updatedReleaseMetadata(metadata), + ), + completion( + const UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.android, + flutterVersionOverride: null, + generatedApks: true, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ), ), ); @@ -691,17 +691,20 @@ To change the version of this release, change your app's version in your pubspec test('returns expected metadata', () async { expect( - await runWithOverrides(() => androidReleaser.releaseMetadata()), - const UpdateReleaseMetadata( - releasePlatform: ReleasePlatform.android, - flutterVersionOverride: null, - generatedApks: false, - environment: BuildEnvironmentMetadata( - flutterRevision: flutterRevision, - operatingSystem: operatingSystem, - operatingSystemVersion: operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: null, + runWithOverrides( + () => androidReleaser.updatedReleaseMetadata(metadata), + ), + completion( + const UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.android, + flutterVersionOverride: null, + generatedApks: false, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), ), ), ); diff --git a/packages/shorebird_cli/test/src/commands/release/ios_framework_releaser_test.dart b/packages/shorebird_cli/test/src/commands/release/ios_framework_releaser_test.dart index a5d48349..40efe4b2 100644 --- a/packages/shorebird_cli/test/src/commands/release/ios_framework_releaser_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/ios_framework_releaser_test.dart @@ -14,7 +14,6 @@ import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/executables/executables.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/os/operating_system_interface.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_env.dart'; import 'package:shorebird_cli/src/shorebird_flutter.dart'; @@ -37,7 +36,6 @@ void main() { late ArtifactManager artifactManager; late CodePushClientWrapper codePushClientWrapper; late Doctor doctor; - late Platform platform; late Directory projectRoot; late ShorebirdLogger logger; late OperatingSystemInterface operatingSystemInterface; @@ -60,7 +58,6 @@ void main() { doctorRef.overrideWith(() => doctor), loggerRef.overrideWith(() => logger), osInterfaceRef.overrideWith(() => operatingSystemInterface), - platformRef.overrideWith(() => platform), processRef.overrideWith(() => shorebirdProcess), shorebirdEnvRef.overrideWith(() => shorebirdEnv), shorebirdFlutterRef.overrideWith(() => shorebirdFlutter), @@ -82,7 +79,6 @@ void main() { codePushClientWrapper = MockCodePushClientWrapper(); doctor = MockDoctor(); operatingSystemInterface = MockOperatingSystemInterface(); - platform = MockPlatform(); progress = MockProgress(); projectRoot = Directory.systemTemp.createTempSync(); logger = MockShorebirdLogger(); @@ -388,18 +384,23 @@ void main() { }); }); - group('releaseMetadata', () { + group('updatedReleaseMetadata', () { const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; const operatingSystem = 'macos'; const operatingSystemVersion = '11.0.0'; const xcodeVersion = '123'; + const metadata = UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.ios, + flutterVersionOverride: null, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), + ); setUp(() { - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); when( () => xcodeBuild.version(), ).thenAnswer((_) async => xcodeVersion); @@ -407,12 +408,13 @@ void main() { test('returns expected metadata', () async { expect( - await runWithOverrides(iosFrameworkReleaser.releaseMetadata), - equals( + runWithOverrides( + () => iosFrameworkReleaser.updatedReleaseMetadata(metadata), + ), + completion( const UpdateReleaseMetadata( releasePlatform: ReleasePlatform.ios, flutterVersionOverride: null, - generatedApks: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, diff --git a/packages/shorebird_cli/test/src/commands/release/ios_releaser_test.dart b/packages/shorebird_cli/test/src/commands/release/ios_releaser_test.dart index ef8dc2e9..179c575e 100644 --- a/packages/shorebird_cli/test/src/commands/release/ios_releaser_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/ios_releaser_test.dart @@ -18,7 +18,6 @@ import 'package:shorebird_cli/src/doctor.dart'; import 'package:shorebird_cli/src/executables/xcodebuild.dart'; import 'package:shorebird_cli/src/logger.dart'; import 'package:shorebird_cli/src/os/operating_system_interface.dart'; -import 'package:shorebird_cli/src/platform.dart'; import 'package:shorebird_cli/src/platform/ios.dart'; import 'package:shorebird_cli/src/release_type.dart'; import 'package:shorebird_cli/src/shorebird_documentation.dart'; @@ -45,7 +44,6 @@ void main() { late CodeSigner codeSigner; late Directory projectRoot; late Doctor doctor; - late Platform platform; late Progress progress; late ShorebirdLogger logger; late Ios ios; @@ -70,7 +68,6 @@ void main() { iosRef.overrideWith(() => ios), loggerRef.overrideWith(() => logger), osInterfaceRef.overrideWith(() => operatingSystemInterface), - platformRef.overrideWith(() => platform), processRef.overrideWith(() => shorebirdProcess), shorebirdEnvRef.overrideWith(() => shorebirdEnv), shorebirdFlutterRef.overrideWith(() => shorebirdFlutter), @@ -93,7 +90,6 @@ void main() { codePushClientWrapper = MockCodePushClientWrapper(); codeSigner = MockCodeSigner(); doctor = MockDoctor(); - platform = MockPlatform(); projectRoot = Directory.systemTemp.createTempSync(); operatingSystemInterface = MockOperatingSystemInterface(); progress = MockProgress(); @@ -757,22 +753,24 @@ To change the version of this release, change your app's version in your pubspec }); }); - group('releaseMetadata', () { + group('updatedReleaseMetadata', () { const flutterRevision = '853d13d954df3b6e9c2f07b72062f33c52a9a64b'; const operatingSystem = 'macOS'; const operatingSystemVersion = '11.0.0'; const xcodeVersion = '123'; const flutterVersionOverride = '1.2.3'; + const metadata = UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.ios, + flutterVersionOverride: flutterVersionOverride, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + ), + ); setUp(() { - when( - () => argResults['flutter-version'], - ).thenReturn(flutterVersionOverride); - when(() => platform.operatingSystem).thenReturn(operatingSystem); - when( - () => platform.operatingSystemVersion, - ).thenReturn(operatingSystemVersion); - when(() => shorebirdEnv.flutterRevision).thenReturn(flutterRevision); when( () => xcodeBuild.version(), ).thenAnswer((_) async => xcodeVersion); @@ -780,17 +778,20 @@ To change the version of this release, change your app's version in your pubspec test('returns expected metadata', () async { expect( - await runWithOverrides(iosReleaser.releaseMetadata), - const UpdateReleaseMetadata( - releasePlatform: ReleasePlatform.ios, - flutterVersionOverride: flutterVersionOverride, - generatedApks: false, - environment: BuildEnvironmentMetadata( - flutterRevision: flutterRevision, - operatingSystem: operatingSystem, - operatingSystemVersion: operatingSystemVersion, - shorebirdVersion: packageVersion, - xcodeVersion: xcodeVersion, + runWithOverrides( + () => iosReleaser.updatedReleaseMetadata(metadata), + ), + completion( + const UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.ios, + flutterVersionOverride: flutterVersionOverride, + environment: BuildEnvironmentMetadata( + flutterRevision: flutterRevision, + operatingSystem: operatingSystem, + operatingSystemVersion: operatingSystemVersion, + shorebirdVersion: packageVersion, + xcodeVersion: xcodeVersion, + ), ), ), ); diff --git a/packages/shorebird_cli/test/src/commands/release/release_command_test.dart b/packages/shorebird_cli/test/src/commands/release/release_command_test.dart index c80710d2..9810fce7 100644 --- a/packages/shorebird_cli/test/src/commands/release/release_command_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/release_command_test.dart @@ -81,6 +81,7 @@ void main() { registerFallbackValue(release); registerFallbackValue(ReleasePlatform.android); registerFallbackValue(ReleaseStatus.draft); + registerFallbackValue(UpdateReleaseMetadata.forTest()); }); setUp(() { @@ -153,7 +154,7 @@ void main() { ).thenReturn(postReleaseInstructions); when(() => releaser.releaseType).thenReturn(ReleaseType.android); when( - () => releaser.releaseMetadata(), + () => releaser.updatedReleaseMetadata(any()), ).thenAnswer((_) async => UpdateReleaseMetadata.forTest()); when(() => releaser.requiresReleaseVersionArg).thenReturn(false); diff --git a/packages/shorebird_cli/test/src/commands/release/releaser_test.dart b/packages/shorebird_cli/test/src/commands/release/releaser_test.dart index 45680a3b..306c1145 100644 --- a/packages/shorebird_cli/test/src/commands/release/releaser_test.dart +++ b/packages/shorebird_cli/test/src/commands/release/releaser_test.dart @@ -46,7 +46,10 @@ class FakeReleaser extends Releaser { String get postReleaseInstructions => throw UnimplementedError(); @override - Future releaseMetadata() => throw UnimplementedError(); + Future updatedReleaseMetadata( + UpdateReleaseMetadata metadata, + ) => + throw UnimplementedError(); @override ReleaseType get releaseType => throw UnimplementedError(); diff --git a/packages/shorebird_code_push_client/example/main.dart b/packages/shorebird_code_push_client/example/main.dart index cbfcb7e0..20867513 100644 --- a/packages/shorebird_code_push_client/example/main.dart +++ b/packages/shorebird_code_push_client/example/main.dart @@ -50,13 +50,11 @@ Future main() async { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, - linkPercentage: null, environment: BuildEnvironmentMetadata( flutterRevision: '', // e.g. '83305b5088e6' operatingSystem: 'Windows', operatingSystemVersion: '10', shorebirdVersion: '1.2.3', - xcodeVersion: null, ), ).toJson(), ); diff --git a/packages/shorebird_code_push_protocol/lib/src/models/build_environment_metadata.dart b/packages/shorebird_code_push_protocol/lib/src/models/build_environment_metadata.dart index c42bbeff..d8a04d47 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/build_environment_metadata.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/build_environment_metadata.dart @@ -21,7 +21,7 @@ class BuildEnvironmentMetadata extends Equatable { required this.shorebirdVersion, required this.operatingSystem, required this.operatingSystemVersion, - required this.xcodeVersion, + this.xcodeVersion, }); /// coverage:ignore-start @@ -50,6 +50,24 @@ class BuildEnvironmentMetadata extends Equatable { /// Converts a [BuildEnvironmentMetadata] to a Map Map toJson() => _$BuildEnvironmentMetadataToJson(this); + /// Creates a copy of this [BuildEnvironmentMetadata] with the given fields + /// replaced by the new values. + BuildEnvironmentMetadata copyWith({ + String? flutterRevision, + String? shorebirdVersion, + String? operatingSystem, + String? operatingSystemVersion, + String? xcodeVersion, + }) => + BuildEnvironmentMetadata( + flutterRevision: flutterRevision ?? this.flutterRevision, + shorebirdVersion: shorebirdVersion ?? this.shorebirdVersion, + operatingSystem: operatingSystem ?? this.operatingSystem, + operatingSystemVersion: + operatingSystemVersion ?? this.operatingSystemVersion, + xcodeVersion: xcodeVersion ?? this.xcodeVersion, + ); + /// The revision of Flutter used to run the command. /// /// Reason: often times we want to track things like link percentage diff --git a/packages/shorebird_code_push_protocol/lib/src/models/create_patch_metadata.dart b/packages/shorebird_code_push_protocol/lib/src/models/create_patch_metadata.dart index e09bad98..f2936aaa 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/create_patch_metadata.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/create_patch_metadata.dart @@ -23,8 +23,8 @@ class CreatePatchMetadata extends Equatable { required this.hasAssetChanges, required this.usedIgnoreNativeChangesFlag, required this.hasNativeChanges, - required this.linkPercentage, required this.environment, + this.linkPercentage, }); // coverage:ignore-start @@ -57,6 +57,29 @@ class CreatePatchMetadata extends Equatable { /// Converts a [CreatePatchMetadata] to a Map Map toJson() => _$CreatePatchMetadataToJson(this); + /// Returns a copy of this [CreatePatchMetadata] with the given fields + /// replaced by the new values. + CreatePatchMetadata copyWith({ + ReleasePlatform? releasePlatform, + bool? usedIgnoreAssetChangesFlag, + bool? hasAssetChanges, + bool? usedIgnoreNativeChangesFlag, + bool? hasNativeChanges, + double? linkPercentage, + BuildEnvironmentMetadata? environment, + }) => + CreatePatchMetadata( + releasePlatform: releasePlatform ?? this.releasePlatform, + usedIgnoreAssetChangesFlag: + usedIgnoreAssetChangesFlag ?? this.usedIgnoreAssetChangesFlag, + hasAssetChanges: hasAssetChanges ?? this.hasAssetChanges, + usedIgnoreNativeChangesFlag: + usedIgnoreNativeChangesFlag ?? this.usedIgnoreNativeChangesFlag, + hasNativeChanges: hasNativeChanges ?? this.hasNativeChanges, + linkPercentage: linkPercentage ?? this.linkPercentage, + environment: environment ?? this.environment, + ); + /// The platform for which the patch was created. final ReleasePlatform releasePlatform; diff --git a/packages/shorebird_code_push_protocol/lib/src/models/update_release_metadata.dart b/packages/shorebird_code_push_protocol/lib/src/models/update_release_metadata.dart index 3d8038fe..337a2562 100644 --- a/packages/shorebird_code_push_protocol/lib/src/models/update_release_metadata.dart +++ b/packages/shorebird_code_push_protocol/lib/src/models/update_release_metadata.dart @@ -20,8 +20,8 @@ class UpdateReleaseMetadata extends Equatable { const UpdateReleaseMetadata({ required this.releasePlatform, required this.flutterVersionOverride, - required this.generatedApks, required this.environment, + this.generatedApks, }); // coverage:ignore-start @@ -48,6 +48,22 @@ class UpdateReleaseMetadata extends Equatable { /// Converts a [UpdateReleaseMetadata] to a Map. Map toJson() => _$UpdateReleaseMetadataToJson(this); + /// Returns a copy of this [UpdateReleaseMetadata] with the given fields + /// replaced by the new values. + UpdateReleaseMetadata copyWith({ + ReleasePlatform? releasePlatform, + String? flutterVersionOverride, + bool? generatedApks, + BuildEnvironmentMetadata? environment, + }) => + UpdateReleaseMetadata( + releasePlatform: releasePlatform ?? this.releasePlatform, + flutterVersionOverride: + flutterVersionOverride ?? this.flutterVersionOverride, + generatedApks: generatedApks ?? this.generatedApks, + environment: environment ?? this.environment, + ); + /// The platform for which the patch was created. final ReleasePlatform releasePlatform; diff --git a/packages/shorebird_code_push_protocol/test/src/models/build_environment_metadata_test.dart b/packages/shorebird_code_push_protocol/test/src/models/build_environment_metadata_test.dart index 713c186d..bcdf1c51 100644 --- a/packages/shorebird_code_push_protocol/test/src/models/build_environment_metadata_test.dart +++ b/packages/shorebird_code_push_protocol/test/src/models/build_environment_metadata_test.dart @@ -18,6 +18,49 @@ void main() { ); }); + group('copyWith', () { + test('creates a copy with the same fields', () { + const metadata = BuildEnvironmentMetadata( + flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', + operatingSystem: 'macos', + operatingSystemVersion: '1.2.3', + shorebirdVersion: '4.5.6', + xcodeVersion: '15.0', + ); + + expect(metadata.copyWith(), equals(metadata)); + }); + + test('returns a new instance with the given fields replaced', () { + const metadata = BuildEnvironmentMetadata( + flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', + operatingSystem: 'macos', + operatingSystemVersion: '1.2.3', + shorebirdVersion: '4.5.6', + xcodeVersion: '15.0', + ); + final newMetadata = metadata.copyWith( + flutterRevision: 'asdf', + operatingSystem: 'windows', + operatingSystemVersion: '11', + shorebirdVersion: '1.2.3', + xcodeVersion: '14.0', + ); + expect( + newMetadata, + equals( + const BuildEnvironmentMetadata( + flutterRevision: 'asdf', + operatingSystem: 'windows', + operatingSystemVersion: '11', + shorebirdVersion: '1.2.3', + xcodeVersion: '14.0', + ), + ), + ); + }); + }); + group('equatable', () { test('two metadatas with the same properties are equal', () { const metadata = BuildEnvironmentMetadata( diff --git a/packages/shorebird_code_push_protocol/test/src/models/create_patch_metadata_test.dart b/packages/shorebird_code_push_protocol/test/src/models/create_patch_metadata_test.dart index 8bdcad00..4deef8e2 100644 --- a/packages/shorebird_code_push_protocol/test/src/models/create_patch_metadata_test.dart +++ b/packages/shorebird_code_push_protocol/test/src/models/create_patch_metadata_test.dart @@ -25,6 +25,83 @@ void main() { ); }); + group('copyWith', () { + test('creates a copy with the same fields', () { + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.android, + usedIgnoreAssetChangesFlag: false, + hasAssetChanges: false, + usedIgnoreNativeChangesFlag: false, + hasNativeChanges: false, + linkPercentage: 99.9, + environment: BuildEnvironmentMetadata( + flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', + operatingSystem: 'macos', + operatingSystemVersion: '1.2.3', + shorebirdVersion: '4.5.6', + xcodeVersion: '15.0', + ), + ); + + expect(metadata.copyWith(), equals(metadata)); + }); + + test('creates a copy with the given fields replaced', () { + const metadata = CreatePatchMetadata( + releasePlatform: ReleasePlatform.android, + usedIgnoreAssetChangesFlag: false, + hasAssetChanges: false, + usedIgnoreNativeChangesFlag: false, + hasNativeChanges: false, + linkPercentage: 99.9, + environment: BuildEnvironmentMetadata( + flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', + operatingSystem: 'macos', + operatingSystemVersion: '1.2.3', + shorebirdVersion: '4.5.6', + xcodeVersion: '15.0', + ), + ); + + final newMetadata = metadata.copyWith( + releasePlatform: ReleasePlatform.ios, + usedIgnoreAssetChangesFlag: true, + hasAssetChanges: true, + usedIgnoreNativeChangesFlag: true, + hasNativeChanges: true, + linkPercentage: 99.8, + environment: const BuildEnvironmentMetadata( + flutterRevision: 'asdf', + operatingSystem: 'windows', + operatingSystemVersion: '11', + shorebirdVersion: '1.2.3', + xcodeVersion: '14.0', + ), + ); + + expect( + newMetadata, + equals( + const CreatePatchMetadata( + releasePlatform: ReleasePlatform.ios, + usedIgnoreAssetChangesFlag: true, + hasAssetChanges: true, + usedIgnoreNativeChangesFlag: true, + hasNativeChanges: true, + linkPercentage: 99.8, + environment: BuildEnvironmentMetadata( + flutterRevision: 'asdf', + operatingSystem: 'windows', + operatingSystemVersion: '11', + shorebirdVersion: '1.2.3', + xcodeVersion: '14.0', + ), + ), + ), + ); + }); + }); + group('equatable', () { test('two metadatas with the same properties are equal', () { const metadata = CreatePatchMetadata( diff --git a/packages/shorebird_code_push_protocol/test/src/models/update_release_metadata_test.dart b/packages/shorebird_code_push_protocol/test/src/models/update_release_metadata_test.dart index 570b6c82..7216ec77 100644 --- a/packages/shorebird_code_push_protocol/test/src/models/update_release_metadata_test.dart +++ b/packages/shorebird_code_push_protocol/test/src/models/update_release_metadata_test.dart @@ -22,6 +22,71 @@ void main() { ); }); + group('copyWith', () { + test('creates a copy with the same fields', () { + const metadata = UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.android, + flutterVersionOverride: '1.2.3', + generatedApks: false, + environment: BuildEnvironmentMetadata( + flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', + operatingSystem: 'macos', + operatingSystemVersion: '1.2.3', + shorebirdVersion: '4.5.6', + xcodeVersion: '15.0', + ), + ); + + expect(metadata.copyWith(), equals(metadata)); + }); + + test('creates a copy with the given fields replaced', () { + const metadata = UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.android, + flutterVersionOverride: '1.2.3', + generatedApks: false, + environment: BuildEnvironmentMetadata( + flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', + operatingSystem: 'macos', + operatingSystemVersion: '1.2.3', + shorebirdVersion: '4.5.6', + xcodeVersion: '15.0', + ), + ); + + final newMetadata = metadata.copyWith( + releasePlatform: ReleasePlatform.ios, + flutterVersionOverride: '1.2.4', + generatedApks: true, + environment: const BuildEnvironmentMetadata( + flutterRevision: 'asdf', + operatingSystem: 'windows', + operatingSystemVersion: '11', + shorebirdVersion: '1.2.3', + xcodeVersion: '14.0', + ), + ); + + expect( + newMetadata, + equals( + const UpdateReleaseMetadata( + releasePlatform: ReleasePlatform.ios, + flutterVersionOverride: '1.2.4', + generatedApks: true, + environment: BuildEnvironmentMetadata( + flutterRevision: 'asdf', + operatingSystem: 'windows', + operatingSystemVersion: '11', + shorebirdVersion: '1.2.3', + xcodeVersion: '14.0', + ), + ), + ), + ); + }); + }); + group('equatable', () { test('two metadatas with the same properties are equal', () { const metadata = UpdateReleaseMetadata(