refactor: centralize Flutter version constraints into a single file (#3654)

This commit is contained in:
Eric Seidel
2026-03-20 16:46:13 -07:00
committed by GitHub
parent 9dbfba782e
commit f47295ea95
9 changed files with 40 additions and 22 deletions
@@ -11,9 +11,9 @@ import 'package:shorebird_cli/src/commands/release/releaser.dart';
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/flutter_version_constraints.dart';
import 'package:shorebird_cli/src/logging/logging.dart';
import 'package:shorebird_cli/src/metadata/metadata.dart';
import 'package:shorebird_cli/src/platform/apple/apple.dart';
import 'package:shorebird_cli/src/release_type.dart';
import 'package:shorebird_cli/src/shorebird_env.dart';
import 'package:shorebird_cli/src/shorebird_validator.dart';
@@ -11,6 +11,7 @@ import 'package:shorebird_cli/src/commands/release/releaser.dart';
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/flutter_version_constraints.dart';
import 'package:shorebird_cli/src/logging/logging.dart';
import 'package:shorebird_cli/src/metadata/metadata.dart';
import 'package:shorebird_cli/src/platform/apple/apple.dart';
@@ -7,6 +7,7 @@ import 'package:pub_semver/pub_semver.dart';
import 'package:shorebird_cli/src/artifact_manager.dart';
import 'package:shorebird_cli/src/code_push_client_wrapper.dart';
import 'package:shorebird_cli/src/extensions/arg_results.dart';
import 'package:shorebird_cli/src/flutter_version_constraints.dart';
import 'package:shorebird_cli/src/logging/logging.dart';
import 'package:shorebird_cli/src/metadata/metadata.dart';
import 'package:shorebird_cli/src/release_type.dart';
@@ -18,9 +19,6 @@ import 'package:shorebird_code_push_protocol/shorebird_code_push_protocol.dart';
export 'package:pub_semver/pub_semver.dart';
/// Minimum Flutter version for obfuscation support across all platforms.
final _minimumObfuscationFlutterVersion = Version(3, 41, 2);
/// {@template releaser}
/// Executes platform-specific functionality to create a release.
/// {@endtemplate}
@@ -212,10 +210,10 @@ abstract class Releaser {
shorebirdEnv.flutterRevision,
);
if (flutterVersion != null &&
flutterVersion < _minimumObfuscationFlutterVersion) {
flutterVersion < minimumObfuscationFlutterVersion) {
logger.err(
'Obfuscation on ${releaseType.releasePlatform.displayName} requires Flutter '
'$_minimumObfuscationFlutterVersion or later '
'Obfuscation on ${releaseType.releasePlatform.displayName} '
'requires Flutter $minimumObfuscationFlutterVersion or later '
'(current: $flutterVersion).',
);
throw ProcessExit(ExitCode.unavailable.code);
@@ -0,0 +1,31 @@
import 'package:pub_semver/pub_semver.dart';
/// The minimum allowed Flutter version for creating iOS releases.
///
/// This constraint exists because iOS code push support requires specific
/// Flutter engine changes that were first available in this version.
final minimumSupportedIosFlutterVersion = Version(3, 22, 2);
/// The minimum allowed Flutter version for creating macOS releases.
///
/// macOS code push support was introduced later than iOS and requires
/// Flutter engine changes that were first available in this version.
final minimumSupportedMacosFlutterVersion = Version(3, 27, 4);
/// The minimum allowed Flutter version for creating Linux releases.
///
/// Linux code push support requires Flutter engine changes that were first
/// available in this version.
final minimumSupportedLinuxFlutterVersion = Version(3, 27, 4);
/// The minimum allowed Flutter version for creating Windows releases.
///
/// Windows code push support requires Flutter engine changes that were first
/// available in this version.
final minimumSupportedWindowsFlutterVersion = Version(3, 32, 6);
/// Minimum Flutter version for obfuscation support across all platforms.
///
/// Obfuscation requires gen_snapshot changes (--save-obfuscation-map and
/// --strip flags) that were first available in this Flutter version.
final minimumObfuscationFlutterVersion = Version(3, 41, 2);
@@ -2,7 +2,6 @@ import 'dart:io';
import 'package:collection/collection.dart';
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:scoped_deps/scoped_deps.dart';
import 'package:shorebird_cli/src/archive/directory_archive.dart';
import 'package:shorebird_cli/src/commands/patch/patcher.dart';
@@ -23,12 +22,6 @@ export 'macho.dart';
export 'missing_xcode_project_exception.dart';
export 'plist.dart';
/// The minimum allowed Flutter version for creating iOS releases.
final minimumSupportedIosFlutterVersion = Version(3, 22, 2);
/// The minimum allowed Flutter version for creating macOS releases.
final minimumSupportedMacosFlutterVersion = Version(3, 27, 4);
/// A reference to a [Apple] instance.
final appleRef = create(Apple.new);
@@ -2,7 +2,6 @@ import 'dart:convert';
import 'dart:io';
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:scoped_deps/scoped_deps.dart';
/// The primary release artifact architecture for Linux releases.
@@ -14,9 +13,6 @@ import 'package:scoped_deps/scoped_deps.dart';
/// - executable_flutter_app
const primaryLinuxReleaseArtifactArch = 'bundle';
/// The minimum allowed Flutter version for creating Linux releases.
final minimumSupportedLinuxFlutterVersion = Version(3, 27, 4);
/// A reference to a [Linux] instance.
final linuxRef = create(Linux.new);
@@ -1,3 +1,5 @@
export 'package:shorebird_cli/src/flutter_version_constraints.dart';
export 'android/android.dart';
export 'apple/apple.dart';
export 'linux/linux.dart';
@@ -2,7 +2,6 @@ import 'dart:io';
import 'package:collection/collection.dart';
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:scoped_deps/scoped_deps.dart';
/// The primary release artifact architecture for Windows releases.
@@ -14,9 +13,6 @@ import 'package:scoped_deps/scoped_deps.dart';
/// - data/, which contains flutter assets and the app.so file
const primaryWindowsReleaseArtifactArch = 'win_archive';
/// The minimum allowed Flutter version for creating Windows releases.
final minimumSupportedWindowsFlutterVersion = Version(3, 32, 6);
/// A reference to a [Windows] instance.
final windowsRef = create(Windows.new);
@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:pub_semver/pub_semver.dart';
import 'package:shorebird_cli/src/flutter_version_constraints.dart';
import 'package:shorebird_cli/src/platform/linux/linux.dart';
import 'package:test/test.dart';