From 3f97977bd3caefaff6450ea37b127e67d249bbdd Mon Sep 17 00:00:00 2001 From: Marc-Antoine Soucy Date: Wed, 5 Jun 2024 11:43:41 -0400 Subject: [PATCH] ci: inject Firebase configuration --- build/steps-build-android.yml | 8 ++-- build/steps-build-ios.yml | 4 ++ build/templates/replace-firebase-config.yml | 50 +++++++++++++++++++++ build/variables.yml | 8 ++++ src/app/pubspec.lock | 28 ++++++------ src/cli/CHANGELOG.md | 1 + 6 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 build/templates/replace-firebase-config.yml diff --git a/build/steps-build-android.yml b/build/steps-build-android.yml index 98351ea..223766b 100644 --- a/build/steps-build-android.yml +++ b/build/steps-build-android.yml @@ -31,6 +31,10 @@ steps: - template: templates/flutter-install.yml +- template : templates/replace-firebase-config.yml + parameters: + pathToSrc: '${{ parameters.pathToSrc }}' + - task: DownloadSecureFile@1 name: keyStore displayName: "Download Keystore from Secure Files" @@ -44,8 +48,6 @@ steps: inputs: secureFile: ${{ parameters.androidKeyStorePropertiesFile }} -# TODO: If Production -> Download the google-services.json for production. - # The file copied inside the source directory must be aligned with the name chosen in '/src/app/lib/android/app/build.gradle' where 'key.properties' is loaded. - task: PowerShell@2 displayName: Copy Signing Configuration Files @@ -58,8 +60,6 @@ steps: Copy-Item -Path '$(keyStore.secureFilePath)' -Destination '${{ parameters.pathToSrc }}\app\android\app\${{ parameters.androidKeystoreFile }}' Write-Host 'Key store copied to ${{ parameters.pathToSrc }}/app/android/app/${{ parameters.androidKeystoreFile }}.' -# TODO: If Production -> Copy downloaded the google-services.json for production in the Android application folder. - - template: templates/flutter-prepare.yml parameters: projectDirectory: '${{ parameters.pathToSrc }}/app' diff --git a/build/steps-build-ios.yml b/build/steps-build-ios.yml index 7b007e7..0f74c08 100644 --- a/build/steps-build-ios.yml +++ b/build/steps-build-ios.yml @@ -47,6 +47,10 @@ steps: provisioningProfileLocation: 'secureFiles' provProfileSecureFile: ${{ parameters.iosProvisioningProfileFile }} +- template : templates/replace-firebase-config.yml + parameters: + pathToSrc: '${{ parameters.pathToSrc }}' + # Flutter project signing process goes through exportOptions.plist file which holds secure information about signing. - task: DownloadSecureFile@1 name: exportOptions diff --git a/build/templates/replace-firebase-config.yml b/build/templates/replace-firebase-config.yml new file mode 100644 index 0000000..3e196a7 --- /dev/null +++ b/build/templates/replace-firebase-config.yml @@ -0,0 +1,50 @@ +parameters: +- name: pathToSrc + type: string + default: '' + +steps: + - task: DownloadSecureFile@1 + name: firebaseJson + displayName: "Download Keystore from Secure Files" + inputs: + secureFile: ${{ if eq(variables['ApplicationEnvironment'], 'Production') }}: + then: + - $(FirebaseJson) + else: + - $(InternalFirebaseJson) + + - task: DownloadSecureFile@1 + name: firebaseOptionsDart + displayName: "Download Keystore from Secure Files" + inputs: + secureFile: ${{ if eq(variables['ApplicationEnvironment'], 'Production') }}: + then: + - $(FirebaseOptionsDart) + else: + - $(InternalFirebaseOptionsDart) + + - task: DownloadSecureFile@1 + name: googleServicesJson + displayName: "Download Keystore from Secure Files" + inputs: + secureFile: ${{ if eq(variables['ApplicationEnvironment'], 'Production') }}: + then: + - $(GoogleServicesJson) + else: + - $(InternalGoogleServicesJson) + + - task: PowerShell@2 + displayName: Copy firebase Configuration Files + inputs: + targetType: 'inline' + script: | + Copy-Item -Path '$(firebaseJson.secureFilePath)' -Destination '${{ parameters.pathToSrc }}\app\firebase.json' + Write-Host 'Firebase.json copied to ${{ parameters.pathToSrc }}/app/firebase.json' + + Copy-Item -Path '$(firebaseOptionsDart.secureFilePath)' -Destination '${{ parameters.pathToSrc }}\app\lib\firebase_options.dart' + Write-Host 'FirebaseOptions.Dart copied to ${{ parameters.pathToSrc }}/app/lib/firebase_options.dart' + + Copy-Item -Path '$(googleServicesJson.secureFilePath)' -Destination '${{ parameters.pathToSrc }}\app\android\app\google-services.json' + Write-Host 'GoogleServices.json copied to ${{ parameters.pathToSrc }}\app\android\app\google-services.json' + diff --git a/build/variables.yml b/build/variables.yml index 14a0a44..4832ff6 100644 --- a/build/variables.yml +++ b/build/variables.yml @@ -40,6 +40,14 @@ AppStoreExportOptions: com.nventive.flutterapptemplate.exportOptions.plist # This is the export options file for the AppStore (Production distribution) builds. AppStoreCertificate: nventive.p12 # This is the client production certificate used to sign AppStore builds. + # firebase + FirebaseJson: firebase-flutter.json + FirebaseOptionsDart: firebase_options-flutter.dart + GoogleServicesJson: google-services-flutter.json + InternalFirebaseJson: firebase-flutter-internal.json + InternalFirebaseOptionsDart: firebase_options-flutter-internal.dart + InternalGoogleServicesJson: google-services-flutter-internal.json + # Prerequisites - Service connections. # Make sure you have the following service connections in your Azure pipeline library. GooglePlayServiceConnection: GooglePlay-nventive-ApplicationTemplate diff --git a/src/app/pubspec.lock b/src/app/pubspec.lock index 7b804cc..74e2607 100644 --- a/src/app/pubspec.lock +++ b/src/app/pubspec.lock @@ -496,10 +496,10 @@ packages: dependency: "direct main" description: name: intl - sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" + sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf url: "https://pub.dev" source: hosted - version: "0.18.1" + version: "0.19.0" io: dependency: transitive description: @@ -536,26 +536,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" url: "https://pub.dev" source: hosted - version: "10.0.0" + version: "10.0.4" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.3" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" lints: dependency: transitive description: @@ -600,10 +600,10 @@ packages: dependency: transitive description: name: meta - sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.12.0" mime: dependency: transitive description: @@ -1077,10 +1077,10 @@ packages: dependency: transitive description: name: test_api - sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" url: "https://pub.dev" source: hosted - version: "0.6.1" + version: "0.7.0" timezone: dependency: transitive description: @@ -1197,10 +1197,10 @@ packages: dependency: transitive description: name: vm_service - sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" url: "https://pub.dev" source: hosted - version: "13.0.0" + version: "14.2.1" watcher: dependency: transitive description: diff --git a/src/cli/CHANGELOG.md b/src/cli/CHANGELOG.md index f6cbb4a..9376b90 100644 --- a/src/cli/CHANGELOG.md +++ b/src/cli/CHANGELOG.md @@ -7,6 +7,7 @@ Prefix your items with `(Template)` if the change is about the template and not ## 0.19.4 - Fix CI/CD artifact name for iOS. +- Firebase configuration is now injected by CI/CD. ## 0.19.2 - Cleanup documentation.