refactor(shorebird_cli): update how command metadata is populated (#2441)

This commit is contained in:
Bryan Oltman
2024-08-23 17:06:30 -04:00
committed by GitHub
parent 7cbcc68f49
commit 5d845fc7ae
31 changed files with 540 additions and 436 deletions
@@ -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> 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,
),
);
}
}
@@ -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> 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,
),
);
}
}
@@ -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> 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<CreatePatchMetadata> updatedCreatePatchMetadata(
CreatePatchMetadata metadata,
) async =>
metadata.copyWith(
linkPercentage: lastBuildLinkPercentage,
environment: metadata.environment.copyWith(
xcodeVersion: await xcodeBuild.version(),
),
);
Future<void> _runLinker({
required File aotSnapshot,
@@ -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> 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<CreatePatchMetadata> updatedCreatePatchMetadata(
CreatePatchMetadata metadata,
) async =>
metadata.copyWith(
linkPercentage: lastBuildLinkPercentage,
environment: metadata.environment.copyWith(
xcodeVersion: await xcodeBuild.version(),
),
);
Future<_LinkResult> _runLinker({
required File releaseArtifact,
@@ -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,
@@ -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> createPatchMetadata(DiffStatus diffStatus);
/// Updates the provided metadata to include patcher-specific fields.
Future<CreatePatchMetadata> updatedCreatePatchMetadata(
CreatePatchMetadata metadata,
) async {
return metadata;
}
/// Whether to allow changes in assets (--allow-asset-diffs).
bool get allowAssetDiffs => argResults['allow-asset-diffs'] == true;
@@ -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<UpdateReleaseMetadata> 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(
@@ -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<UpdateReleaseMetadata> 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<UpdateReleaseMetadata> updatedReleaseMetadata(
UpdateReleaseMetadata metadata,
) async =>
metadata.copyWith(generatedApks: generateApk);
@override
String get postReleaseInstructions {
@@ -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<UpdateReleaseMetadata> 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<UpdateReleaseMetadata> 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(),
),
);
}
@@ -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<UpdateReleaseMetadata> 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<UpdateReleaseMetadata> 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(),
),
);
}
@@ -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),
);
}
@@ -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<UpdateReleaseMetadata> releaseMetadata();
/// Creates a copy of [metadata] with releaser-specific fields updated.
Future<UpdateReleaseMetadata> 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
@@ -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),
);
});
});
@@ -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),
);
});
});
@@ -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,
@@ -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,
@@ -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,
@@ -193,7 +193,9 @@ class _TestPatcher extends Patcher {
}
@override
Future<CreatePatchMetadata> createPatchMetadata(DiffStatus diffStatus) {
Future<CreatePatchMetadata> updatedCreatePatchMetadata(
CreatePatchMetadata metadata,
) {
throw UnimplementedError();
}
@@ -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),
);
});
});
@@ -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,
),
),
),
);
@@ -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,
@@ -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,
),
),
),
);
@@ -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);
@@ -46,7 +46,10 @@ class FakeReleaser extends Releaser {
String get postReleaseInstructions => throw UnimplementedError();
@override
Future<UpdateReleaseMetadata> releaseMetadata() => throw UnimplementedError();
Future<UpdateReleaseMetadata> updatedReleaseMetadata(
UpdateReleaseMetadata metadata,
) =>
throw UnimplementedError();
@override
ReleaseType get releaseType => throw UnimplementedError();
@@ -50,13 +50,11 @@ Future<void> main() async {
hasAssetChanges: false,
usedIgnoreNativeChangesFlag: false,
hasNativeChanges: false,
linkPercentage: null,
environment: BuildEnvironmentMetadata(
flutterRevision: '<FLUTTER_REVISION>', // e.g. '83305b5088e6'
operatingSystem: 'Windows',
operatingSystemVersion: '10',
shorebirdVersion: '1.2.3',
xcodeVersion: null,
),
).toJson(),
);
@@ -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<String, dynamic>
Map<String, dynamic> 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
@@ -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<String, dynamic>
Map<String, dynamic> 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;
@@ -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<String, dynamic>.
Map<String, dynamic> 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;
@@ -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(
@@ -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(
@@ -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(