Skip to content

Commit

Permalink
ci: inject Firebase configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
Marc-Antoine-Soucy authored and Soap-141 committed Jun 18, 2024
1 parent 832aac5 commit 196940b
Show file tree
Hide file tree
Showing 8 changed files with 114 additions and 29 deletions.
9 changes: 9 additions & 0 deletions build/azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ stages:
iosCertificateFile: $(InternalCertificate)
iosVariableGroup: 'FlutterApplicationTemplate.Distribution.Internal.iOS'
releaseNotesArtifactName: 'GeneratedReleaseNotes_Staging'
firebaseJsonFile: $(InternalFirebaseJson)
firebaseOptionsDartFile: $(InternalFirebaseOptionsDart)
googleServicesJsonFile: $(InternalGoogleServicesJson)

- stage: Publish_Template_Package
condition: and(succeeded(), eq(variables['IsPullRequestBuild'], 'false'), eq(variables['IsReleaseBranch'], 'true'))
Expand All @@ -80,6 +83,9 @@ stages:
iosCertificateFile: $(InternalCertificate)
iosVariableGroup: 'FlutterApplicationTemplate.Distribution.Internal.iOS'
BannerVersionNameText: 'STAGING'
firebaseJsonFile: $(InternalFirebaseJson)
firebaseOptionsDartFile: $(InternalFirebaseOptionsDart)
googleServicesJsonFile: $(InternalGoogleServicesJson)

- stage: AppCenter_TestFlight_Staging
condition: and(succeeded(), eq(variables['IsPullRequestBuild'], 'false'))
Expand Down Expand Up @@ -114,6 +120,9 @@ stages:
iosExportOptionsFile: $(AppStoreExportOptions)
iosCertificateFile: $(AppStoreCertificate)
iosVariableGroup: 'FlutterApplicationTemplate.Distribution.AppStore'
firebaseJsonFile: $(FirebaseJson)
firebaseOptionsDartFile: $(FirebaseOptionsDart)
googleServicesJsonFile: $(GoogleServicesJson)

- stage: AppCenter_Production
condition: and(succeeded(), eq(variables['IsPullRequestBuild'], 'false'))
Expand Down
14 changes: 13 additions & 1 deletion build/stage-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@
- name: BannerVersionNameText
type: string
default: ''
- name: firebaseJsonFile
type: string
- name: firebaseOptionsDartFile
type: string
- name: googleServicesJsonFile
type: string

jobs:
- job: OnWindows_ReleaseNotes
Expand Down Expand Up @@ -111,6 +117,9 @@ jobs:
projectName: ${{ parameters.projectName }}
androidKeystoreFile: ${{ parameters.androidKeyStoreFile }}
androidKeyStorePropertiesFile: ${{ parameters.androidKeyPropertiesFile }}
firebaseJsonFile: '${{ parameters.firebaseJsonFile }}'
firebaseOptionsDartFile: '${{ parameters.firebaseOptionsDartFile }}'
googleServicesJsonFile: '${{ parameters.googleServicesJsonFile }}'

- job: OnMac_iOS
pool:
Expand All @@ -132,4 +141,7 @@ jobs:
iosCertificatePassword: ${{ parameters.iosCertificatePassword }}
iosProvisioningProfileFile: ${{ parameters.iosProvisioningProfileFile }}
iosExportOptionsFile: ${{ parameters.iosExportOptionsFile }}
BannerVersionNameText: ${{ parameters.BannerVersionNameText }}
BannerVersionNameText: ${{ parameters.BannerVersionNameText }}
firebaseJsonFile: '${{ parameters.firebaseJsonFile }}'
firebaseOptionsDartFile: '${{ parameters.firebaseOptionsDartFile }}'
googleServicesJsonFile: '${{ parameters.googleServicesJsonFile }}'
20 changes: 13 additions & 7 deletions build/steps-build-android.yml
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
parameters:
- name: androidKeystoreFile
type: string
default: ''
- name: androidKeyStorePropertiesFile
type: string
default: ''
- name: pathToSrc
type: string
default: ''
- name: projectName
type: string
default: '$(ProjectName)'
- name: firebaseJsonFile
type: string
- name: firebaseOptionsDartFile
type: string
- name: googleServicesJsonFile
type: string

steps:
#-if false
Expand All @@ -31,6 +34,13 @@ steps:

- template: templates/flutter-install.yml

- template : templates/replace-firebase-config.yml
parameters:
pathToSrc: '${{ parameters.pathToSrc }}'
firebaseJsonFile: '${{ parameters.firebaseJsonFile }}'
firebaseOptionsDartFile: '${{ parameters.firebaseOptionsDartFile }}'
googleServicesJsonFile: '${{ parameters.googleServicesJsonFile }}'

- task: DownloadSecureFile@1
name: keyStore
displayName: "Download Keystore from Secure Files"
Expand All @@ -44,8 +54,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
Expand All @@ -58,8 +66,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'
Expand Down
19 changes: 13 additions & 6 deletions build/steps-build-ios.yml
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
parameters:
- name: iosCertificateFile
type: string
default: ''
- name: iosCertificatePassword
type: string
default: ''
- name: iosProvisioningProfileFile
type: string
default: ''
- name: iosExportOptionsFile
type: string
default: ''
- name: pathToSrc
type: string
default: ''
- name: projectName
type: string
default: '$(ProjectName)'
- name: BannerVersionNameText
type: string
default: ''
- name: firebaseJsonFile
type: string
- name: firebaseOptionsDartFile
type: string
- name: googleServicesJsonFile
type: string

steps:
#-if false
Expand Down Expand Up @@ -47,6 +47,13 @@ steps:
provisioningProfileLocation: 'secureFiles'
provProfileSecureFile: ${{ parameters.iosProvisioningProfileFile }}

- template : templates/replace-firebase-config.yml
parameters:
pathToSrc: '${{ parameters.pathToSrc }}'
firebaseJsonFile: '${{ parameters.firebaseJsonFile }}'
firebaseOptionsDartFile: '${{ parameters.firebaseOptionsDartFile }}'
googleServicesJsonFile: '${{ parameters.googleServicesJsonFile }}'

# Flutter project signing process goes through exportOptions.plist file which holds secure information about signing.
- task: DownloadSecureFile@1
name: exportOptions
Expand Down
42 changes: 42 additions & 0 deletions build/templates/replace-firebase-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
parameters:
- name: pathToSrc
type: string
- name: firebaseJsonFile
type: string
- name: firebaseOptionsDartFile
type: string
- name: googleServicesJsonFile
type: string

steps:
- task: DownloadSecureFile@1
name: firebaseJson
displayName: "Download Keystore from Secure Files"
inputs:
secureFile: ${{ parameters.firebaseJsonFile }}

- task: DownloadSecureFile@1
name: firebaseOptionsDart
displayName: "Download Keystore from Secure Files"
inputs:
secureFile: ${{ parameters.firebaseOptionsDartFile }}

- task: DownloadSecureFile@1
name: googleServicesJson
displayName: "Download Keystore from Secure Files"
inputs:
secureFile: ${{ parameters.googleServicesJsonFile }}

- 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'
8 changes: 8 additions & 0 deletions build/variables.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
InternalFirebaseJson: firebase-flutter-internal.json
InternalFirebaseOptionsDart: firebase_options-flutter-internal.dart
InternalGoogleServicesJson: google-services-flutter-internal.json
FirebaseJson: firebase-flutter.json
FirebaseOptionsDart: firebase_options-flutter.dart
GoogleServicesJson: google-services-flutter.json

# Prerequisites - Service connections.
# Make sure you have the following service connections in your Azure pipeline library.
GooglePlayServiceConnection: GooglePlay-nventive-ApplicationTemplate
Expand Down
28 changes: 14 additions & 14 deletions src/app/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
3 changes: 2 additions & 1 deletion src/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)

Prefix your items with `(Template)` if the change is about the template and not the resulting application.

## 0.19.4
## 0.19.3
- Fix CI/CD artifact name for iOS.
- Firebase configuration is now injected by CI/CD.

## 0.19.2
- Cleanup documentation.
Expand Down

0 comments on commit 196940b

Please sign in to comment.