Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 19 additions & 20 deletions packages/flutter_tools/gradle/src/main/groovy/flutter.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -1332,33 +1332,32 @@ class FlutterPlugin implements Plugin<Project> {
}
Task copyFlutterAssetsTask = addFlutterDeps(variant)
copyFlutterAssetsTask.doLast {
def content = "";
def yaml = new Yaml()
def outputDir = copyFlutterAssetsTask.destinationDir

// Read the shorebird.yaml file into a map.
def shorebirdYamlFile = new File("${outputDir}/flutter_assets/shorebird.yaml")
def shorebirdYamlData = yaml.load(shorebirdYamlFile.text)

// Update the app_id to the correct flavor if one was provided.
if (variant.flavorName != null && !variant.flavorName.isEmpty()) {
shorebirdYamlData['app_id'] = shorebirdYamlData.flavors[variant.flavorName]
}

// Remove any flavors. This is a no-op if the flavors key doesn't exist.
shorebirdYamlData.remove('flavors')

// Add a public key if one was provided via an env var.
// Ideally we'd have a way to pass the key as a parameter, but
// an env var was the easiest way to get this working.
def shorebirdPublicKeyEnvVar = System.getenv('SHOREBIRD_PUBLIC_KEY')
if (shorebirdPublicKeyEnvVar != null && !shorebirdPublicKeyEnvVar.isEmpty()) {
content += 'patch_public_key: ' + shorebirdPublicKeyEnvVar + '\n';
shorebirdYamlData['patch_public_key'] = shorebirdPublicKeyEnvVar
}

if (variant.flavorName != null && !variant.flavorName.isEmpty()) {
def flavor = variant.flavorName
def shorebirdYaml = new Yaml().load(shorebirdYamlFile.text)
def flavorAppId = shorebirdYaml['flavors'][flavor]
if (flavorAppId == null) {
throw new GradleException("Cannot find app_id for ${flavor} in shorebird.yaml")
}
content += 'app_id: ' + flavorAppId + '\n';
if (shorebirdYaml.containsKey('base_url')) {
content += 'base_url: ' + shorebirdYaml['base_url'] + '\n';
}
if (shorebirdYaml.containsKey('auto_update')) {
content += 'auto_update: ' + shorebirdYaml['auto_update'] + '\n';
}
}
if (!content.isEmpty()) {
shorebirdYamlFile.write(content)
}
// Write the updated map back to the shorebird.yaml file.
def updatedYamlString = yaml.dumpAsMap(shorebirdYamlData)
shorebirdYamlFile.write(updatedYamlString)
}
def variantOutput = variant.outputs.first()
def processResources = variantOutput.hasProperty(propProcessResourcesProvider) ?
Expand Down
83 changes: 49 additions & 34 deletions packages/shorebird_tests/test/android_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,32 @@ void main() {
expect(projectDirectory.shorebirdFile.existsSync(), isTrue);
});

testWithShorebirdProject(
'adds the public key when passed through the environment variable',
(projectDirectory) async {
const base64PublicKey = 'public_123';
await projectDirectory.runFlutterBuildApk(
environment: {
'SHOREBIRD_PUBLIC_KEY': base64PublicKey,
},
);
group('when passing the public key through the environment variable', () {
testWithShorebirdProject(
'adds the public key on top of the original file',
(projectDirectory) async {
final originalContent =
await projectDirectory.shorebirdFile.readAsString();

const base64PublicKey = 'public_123';
await projectDirectory.runFlutterBuildApk(
environment: {
'SHOREBIRD_PUBLIC_KEY': base64PublicKey,
},
);

final generatedYaml =
await projectDirectory.getGeneratedShorebirdYaml();
final generatedYaml =
await projectDirectory.getGeneratedShorebirdYaml();

expect(generatedYaml, contains('patch_public_key: $base64PublicKey'));
},
);
expect(
generatedYaml,
equals(
'${originalContent}patch_public_key: $base64PublicKey\n',
),
);
},
);
});

group('when building with a flavor', () {
testWithShorebirdProject(
Expand All @@ -46,29 +56,34 @@ void main() {
},
);

testWithShorebirdProject(
'correctly changes the app id and adds the public key when passed through the environment variable',
(projectDirectory) async {
const base64PublicKey = 'public_123';
projectDirectory.addAndroidFlavors();
projectDirectory.addShorebirdFlavors();
group('when passed through the environment variable', () {
testWithShorebirdProject(
'correctly changes the app id and adds the public key',
(projectDirectory) async {
const base64PublicKey = 'public_123';
projectDirectory.addAndroidFlavors();
projectDirectory.addShorebirdFlavors();

await projectDirectory.runFlutterBuildApk(
flavor: 'internal',
environment: {
'SHOREBIRD_PUBLIC_KEY': base64PublicKey,
},
);
await projectDirectory.runFlutterBuildApk(
flavor: 'internal',
environment: {
'SHOREBIRD_PUBLIC_KEY': base64PublicKey,
},
);

final generatedYaml =
await projectDirectory.getGeneratedShorebirdYaml(
flavor: 'internal',
);
final generatedYaml =
await projectDirectory.getGeneratedShorebirdYaml(
flavor: 'internal',
);

expect(generatedYaml, contains('app_id: internal_123'));
expect(generatedYaml, contains('patch_public_key: $base64PublicKey'));
},
);
expect(generatedYaml, contains('app_id: internal_123'));
expect(
generatedYaml,
contains('patch_public_key: $base64PublicKey'),
);
},
);
});
});
});
}