fix(cli): forward --flavor to flutter build aar and ios-framework (#3748)

This commit is contained in:
Eric Seidel
2026-05-07 15:30:27 -07:00
committed by GitHub
parent 5503ad6d27
commit 966e75adcc
6 changed files with 120 additions and 0 deletions
@@ -283,6 +283,7 @@ Reason: Exited with code $exitCode.''',
/// after the build completes or fails.
Future<void> buildAar({
required String buildNumber,
String? flavor,
Iterable<Arch>? targetPlatforms,
List<String> args = const [],
String? base64PublicKey,
@@ -296,6 +297,7 @@ Reason: Exited with code $exitCode.''',
'--no-debug',
'--no-profile',
'--build-number=$buildNumber',
if (flavor != null) '--flavor=$flavor',
if (targetPlatformArgs != null) '--target-platform=$targetPlatformArgs',
...await _traceArgs('aar'),
...args,
@@ -504,6 +506,7 @@ Reason: Exited with code $exitCode.''',
/// Builds a release iOS framework (.xcframework) for the current project.
Future<AppleBuildResult> buildIosFramework({
String? flavor,
List<String> args = const [],
String? base64PublicKey,
}) async {
@@ -522,6 +525,7 @@ Reason: Exited with code $exitCode.''',
'ios-framework',
'--no-debug',
'--no-profile',
if (flavor != null) '--flavor=$flavor',
...await _traceArgs('ios-framework'),
...args,
];
@@ -88,6 +88,7 @@ class AarReleaser extends Releaser {
addObfuscationMapArgs(buildArgs);
await artifactBuilder.buildAar(
buildNumber: buildNumber,
flavor: flavor,
targetPlatforms: architectures,
args: buildArgs,
base64PublicKey: base64PublicKey,
@@ -78,6 +78,7 @@ class IosFrameworkReleaser extends Releaser with AppleReleaserMixin {
addSplitDebugInfoDefault(buildArgs);
addObfuscationMapArgs(buildArgs);
await artifactBuilder.buildIosFramework(
flavor: flavor,
args: buildArgs,
base64PublicKey: base64PublicKey,
);
@@ -1005,6 +1005,33 @@ Either run `flutter pub get` manually, or follow the steps in ${cannotRunInVSCod
).called(1);
});
test(
'forwards --flavor to flutter build when flavor is provided',
() async {
await runWithOverrides(
() =>
builder.buildAar(buildNumber: buildNumber, flavor: 'internal'),
);
verify(
() => shorebirdProcess.stream(
'flutter',
[
'build',
'aar',
'--no-debug',
'--no-profile',
'--build-number=1.0',
'--flavor=internal',
],
environment: any(named: 'environment'),
runInShell: false,
onStart: any(named: 'onStart'),
),
).called(1);
},
);
group('when base64PublicKey is not null', () {
const base64PublicKey = 'base64PublicKey';
@@ -1873,6 +1900,31 @@ Reason: Exited with code 70.'''),
).called(1);
});
test(
'forwards --flavor to flutter build when flavor is provided',
() async {
await runWithOverrides(
() => builder.buildIosFramework(flavor: 'internal'),
);
verify(
() => shorebirdProcess.stream(
'flutter',
[
'build',
'ios-framework',
'--no-debug',
'--no-profile',
'--flavor=internal',
],
environment: any(named: 'environment'),
runInShell: false,
onStart: any(named: 'onStart'),
),
).called(1);
},
);
group('when base64PublicKey is not null', () {
const base64PublicKey = 'base64PublicKey';
@@ -374,6 +374,39 @@ void main() {
).called(1);
});
group('with flavor', () {
const flavor = 'internal';
setUp(() {
aarReleaser = AarReleaser(
argResults: argResults,
flavor: flavor,
target: null,
);
when(
() => artifactBuilder.buildAar(
buildNumber: any(named: 'buildNumber'),
flavor: any(named: 'flavor'),
targetPlatforms: any(named: 'targetPlatforms'),
args: any(named: 'args'),
),
).thenAnswer((_) async => File(''));
});
test('forwards flavor to buildAar', () async {
await runWithOverrides(() => aarReleaser.buildReleaseArtifacts());
verify(
() => artifactBuilder.buildAar(
buildNumber: buildNumber,
flavor: flavor,
targetPlatforms: Arch.values.toSet(),
args: [],
),
).called(1);
});
});
group('when a patch signing key path is provided', () {
const base64PublicKey = 'base64PublicKey';
@@ -479,6 +479,35 @@ void main() {
verify(() => artifactBuilder.buildIosFramework(args: [])).called(1);
});
group('with flavor', () {
const flavor = 'internal';
setUp(() {
iosFrameworkReleaser = IosFrameworkReleaser(
argResults: argResults,
flavor: flavor,
target: null,
);
when(
() => artifactBuilder.buildIosFramework(
flavor: any(named: 'flavor'),
args: any(named: 'args'),
),
).thenAnswer(
(_) async =>
AppleBuildResult(kernelFile: File('/path/to/app.dill')),
);
});
test('forwards flavor to buildIosFramework', () async {
await runWithOverrides(iosFrameworkReleaser.buildReleaseArtifacts);
verify(
() => artifactBuilder.buildIosFramework(flavor: flavor, args: []),
).called(1);
});
});
group('when --obfuscate is passed', () {
setUp(() {
when(() => argResults['obfuscate']).thenReturn(true);