From d2bc1bc005a8c11026de3e7cbc1ea08407d61392 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Thu, 13 Mar 2025 17:24:31 -0500 Subject: [PATCH] feat(shorebird_cli): add `inferredReleaseVersion` to `CreatePatchMetadata` (#2968) --- .../lib/src/commands/patch/patch_command.dart | 3 +++ .../src/metadata/create_patch_metadata.dart | 11 +++++++++++ .../src/metadata/create_patch_metadata.g.dart | 6 ++++++ .../src/commands/patch/aar_patcher_test.dart | 1 + .../commands/patch/android_patcher_test.dart | 1 + .../patch/ios_framework_patcher_test.dart | 4 ++++ .../src/commands/patch/ios_patcher_test.dart | 4 ++++ .../commands/patch/macos_patcher_test.dart | 2 ++ .../commands/patch/patch_command_test.dart | 19 ++++++++++++++++++- .../metadata/create_patch_metadata_test.dart | 8 ++++++++ 10 files changed, 58 insertions(+), 1 deletion(-) 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 a1737313..09884174 100644 --- a/packages/shorebird_cli/lib/src/commands/patch/patch_command.dart +++ b/packages/shorebird_cli/lib/src/commands/patch/patch_command.dart @@ -299,6 +299,7 @@ NOTE: this is ${styleBold.wrap('not')} recommended. Asset changes cannot be incl final app = await codePushClientWrapper.getApp(appId: appId); + var inferredReleaseVersion = false; File? patchArtifactFile; final Release release; final releasePlatform = patcher.releaseType.releasePlatform; @@ -338,6 +339,7 @@ Building with Flutter $flutterVersionString to determine the release version... +-------------------------------------------------------------------------------+ '''); lastBuiltFlutterRevision = shorebirdEnv.flutterRevision; + inferredReleaseVersion = true; patchArtifactFile = await patcher.buildPatchArtifact(); final releaseVersion = await patcher.extractReleaseVersionFromArtifact( patchArtifactFile, @@ -439,6 +441,7 @@ Building patch with Flutter $flutterVersionString hasAssetChanges: diffStatus.hasAssetChanges, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: diffStatus.hasNativeChanges, + inferredReleaseVersion: inferredReleaseVersion, environment: BuildEnvironmentMetadata( flutterRevision: shorebirdEnv.flutterRevision, operatingSystem: platform.operatingSystem, diff --git a/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.dart b/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.dart index fe32ea12..62c7cde9 100644 --- a/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.dart +++ b/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.dart @@ -24,6 +24,7 @@ class CreatePatchMetadata extends Equatable { required this.hasAssetChanges, required this.usedIgnoreNativeChangesFlag, required this.hasNativeChanges, + required this.inferredReleaseVersion, required this.environment, this.linkPercentage, }); @@ -37,6 +38,7 @@ class CreatePatchMetadata extends Equatable { bool hasAssetChanges = false, bool usedIgnoreNativeChangesFlag = false, bool hasNativeChanges = false, + bool inferredReleaseVersion = false, double? linkPercentage, BuildEnvironmentMetadata? environment, }) => CreatePatchMetadata( @@ -45,6 +47,7 @@ class CreatePatchMetadata extends Equatable { hasAssetChanges: hasAssetChanges, usedIgnoreNativeChangesFlag: usedIgnoreNativeChangesFlag, hasNativeChanges: hasNativeChanges, + inferredReleaseVersion: inferredReleaseVersion, linkPercentage: linkPercentage, environment: environment ?? BuildEnvironmentMetadata.forTest(), ); @@ -65,6 +68,7 @@ class CreatePatchMetadata extends Equatable { bool? hasAssetChanges, bool? usedIgnoreNativeChangesFlag, bool? hasNativeChanges, + bool? inferredReleaseVersion, double? linkPercentage, BuildEnvironmentMetadata? environment, }) => CreatePatchMetadata( @@ -75,6 +79,8 @@ class CreatePatchMetadata extends Equatable { usedIgnoreNativeChangesFlag: usedIgnoreNativeChangesFlag ?? this.usedIgnoreNativeChangesFlag, hasNativeChanges: hasNativeChanges ?? this.hasNativeChanges, + inferredReleaseVersion: + inferredReleaseVersion ?? this.inferredReleaseVersion, linkPercentage: linkPercentage ?? this.linkPercentage, environment: environment ?? this.environment, ); @@ -108,6 +114,10 @@ class CreatePatchMetadata extends Equatable { /// behavior in a patch. final bool hasNativeChanges; + /// Whether the release version had to be inferred by Shorebird because + /// it was not explicitly specified via the --release-version flag. + final bool inferredReleaseVersion; + /// The percentage of code that was linked in the patch. /// Generally, the higher the percentage, the better the patch performance /// since more code will be run on the CPU as opposed to the simulator. @@ -127,6 +137,7 @@ class CreatePatchMetadata extends Equatable { usedIgnoreNativeChangesFlag, hasNativeChanges, linkPercentage, + inferredReleaseVersion, environment, ]; } diff --git a/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.g.dart b/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.g.dart index 42081cfe..dda65bea 100644 --- a/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.g.dart +++ b/packages/shorebird_cli/lib/src/metadata/create_patch_metadata.g.dart @@ -29,6 +29,10 @@ CreatePatchMetadata _$CreatePatchMetadataFromJson( (v) => v as bool, ), hasNativeChanges: $checkedConvert('has_native_changes', (v) => v as bool), + inferredReleaseVersion: $checkedConvert( + 'inferred_release_version', + (v) => v as bool, + ), environment: $checkedConvert( 'environment', (v) => BuildEnvironmentMetadata.fromJson(v as Map), @@ -46,6 +50,7 @@ CreatePatchMetadata _$CreatePatchMetadataFromJson( 'hasAssetChanges': 'has_asset_changes', 'usedIgnoreNativeChangesFlag': 'used_ignore_native_changes_flag', 'hasNativeChanges': 'has_native_changes', + 'inferredReleaseVersion': 'inferred_release_version', 'linkPercentage': 'link_percentage', }, ); @@ -58,6 +63,7 @@ Map _$CreatePatchMetadataToJson( 'has_asset_changes': instance.hasAssetChanges, 'used_ignore_native_changes_flag': instance.usedIgnoreNativeChangesFlag, 'has_native_changes': instance.hasNativeChanges, + 'inferred_release_version': instance.inferredReleaseVersion, 'link_percentage': instance.linkPercentage, 'environment': instance.environment.toJson(), }; 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 234b8f69..27533bf5 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 @@ -630,6 +630,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, 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 c6453e3e..6eaa338b 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 @@ -731,6 +731,7 @@ Looked in: hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, 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 43ec2397..6a4cba00 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 @@ -1068,6 +1068,7 @@ void main() { hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: true, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, @@ -1088,6 +1089,7 @@ void main() { hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: true, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, @@ -1116,6 +1118,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, @@ -1136,6 +1139,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, linkPercentage: linkPercentage, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, 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 dd49c8bc..35266dec 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 @@ -1524,6 +1524,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}'''), hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: true, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, @@ -1544,6 +1545,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}'''), hasAssetChanges: false, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: true, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, @@ -1572,6 +1574,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}'''), hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, @@ -1592,6 +1595,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}'''), hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, linkPercentage: linkPercentage, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, diff --git a/packages/shorebird_cli/test/src/commands/patch/macos_patcher_test.dart b/packages/shorebird_cli/test/src/commands/patch/macos_patcher_test.dart index 5de343c3..e84873eb 100644 --- a/packages/shorebird_cli/test/src/commands/patch/macos_patcher_test.dart +++ b/packages/shorebird_cli/test/src/commands/patch/macos_patcher_test.dart @@ -1123,6 +1123,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}'''), hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, @@ -1141,6 +1142,7 @@ For more information see: ${supportedFlutterVersionsUrl.toLink()}'''), hasAssetChanges: true, usedIgnoreNativeChangesFlag: allowNativeDiffs, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: flutterRevision, operatingSystem: operatingSystem, 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 a70e5520..4eccab55 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 @@ -813,7 +813,15 @@ void main() { releaseArtifact: any(named: 'releaseArtifact'), ), () => logger.confirm('Would you like to continue?'), - () => patcher.updatedCreatePatchMetadata(any()), + () => patcher.updatedCreatePatchMetadata( + any( + that: isA().having( + (m) => m.inferredReleaseVersion, + 'inferredReleaseVersion', + isFalse, + ), + ), + ), () => patcher.uploadPatchArtifacts( appId: appId, releaseId: release.id, @@ -1104,6 +1112,15 @@ void main() { ), () => patcher.buildPatchArtifact(releaseVersion: releaseVersion), + () => patcher.updatedCreatePatchMetadata( + any( + that: isA().having( + (m) => m.inferredReleaseVersion, + 'inferredReleaseVersion', + isTrue, + ), + ), + ), ]); }, ); diff --git a/packages/shorebird_cli/test/src/metadata/create_patch_metadata_test.dart b/packages/shorebird_cli/test/src/metadata/create_patch_metadata_test.dart index 039b077e..b5b90d21 100644 --- a/packages/shorebird_cli/test/src/metadata/create_patch_metadata_test.dart +++ b/packages/shorebird_cli/test/src/metadata/create_patch_metadata_test.dart @@ -12,6 +12,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, + inferredReleaseVersion: false, linkPercentage: 99.9, environment: BuildEnvironmentMetadata( flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', @@ -36,6 +37,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, + inferredReleaseVersion: false, linkPercentage: 99.9, environment: BuildEnvironmentMetadata( flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', @@ -57,6 +59,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, + inferredReleaseVersion: false, linkPercentage: 99.9, environment: BuildEnvironmentMetadata( flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', @@ -94,6 +97,7 @@ void main() { hasAssetChanges: true, usedIgnoreNativeChangesFlag: true, hasNativeChanges: true, + inferredReleaseVersion: false, linkPercentage: 99.8, environment: BuildEnvironmentMetadata( flutterRevision: 'asdf', @@ -117,6 +121,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, + inferredReleaseVersion: false, linkPercentage: 99.9, environment: BuildEnvironmentMetadata( flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', @@ -133,6 +138,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, + inferredReleaseVersion: false, linkPercentage: 99.9, environment: BuildEnvironmentMetadata( flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', @@ -153,6 +159,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', operatingSystem: 'macos', @@ -168,6 +175,7 @@ void main() { hasAssetChanges: false, usedIgnoreNativeChangesFlag: false, hasNativeChanges: false, + inferredReleaseVersion: false, environment: BuildEnvironmentMetadata( flutterRevision: '853d13d954df3b6e9c2f07b72062f33c52a9a64b', operatingSystem: 'macos',