From 5391b6baa839cfec71a2f68b7943a5acf9f6db46 Mon Sep 17 00:00:00 2001 From: "Luong Vo (Lucas)" Date: Tue, 1 Aug 2023 11:08:28 +0700 Subject: [PATCH] [#226] Fix: exporting multi-lines env files using quote "" https://stackoverflow.com/questions/22101778/how-to-preserve-line-breaks-when-storing-command-output-to-a-variable/22101842#22101842 --- .github/wiki/Deployment.md | 2 +- .github/workflows/android_deploy_production.yml | 7 ++++--- .../workflows/android_deploy_production_to_playstore.yml | 9 +++++---- .github/workflows/android_deploy_staging.yml | 7 ++++--- .github/workflows/ios_deploy_staging_to_firebase.yml | 7 ++++--- .../.github/workflows/android_deploy_production.yml | 7 ++++--- .../workflows/android_deploy_production_to_playstore.yml | 9 +++++---- .../.github/workflows/android_deploy_staging.yml | 7 ++++--- .../.github/workflows/ios_deploy_staging_to_firebase.yml | 7 ++++--- .../.github/workflows/ios_deploy_to_app_store.yml | 1 + .../.github/workflows/ios_deploy_to_testflight.yml | 1 + 11 files changed, 37 insertions(+), 27 deletions(-) diff --git a/.github/wiki/Deployment.md b/.github/wiki/Deployment.md index 96a244d6..498fc157 100644 --- a/.github/wiki/Deployment.md +++ b/.github/wiki/Deployment.md @@ -10,7 +10,7 @@ - A new app on Play Store. - Add these variables as the secrets of CI: - - **ENV_PRODUCTION**: the production .env configuration file content. + - **ENV**: the production .env configuration file content. - **GOOGLE_PLAY_SERVICE_ACCOUNT_JSON**: the json file content of the Play Store's Service Account for app publishing. Please check out [how to create the Service Account](https://support.staffbase.com/hc/en-us/articles/360018569579-Preparing-Automated-Publishing-for-Google-Play-Store). ### Resources diff --git a/.github/workflows/android_deploy_production.yml b/.github/workflows/android_deploy_production.yml index 9c07cc86..0d948330 100644 --- a/.github/workflows/android_deploy_production.yml +++ b/.github/workflows/android_deploy_production.yml @@ -9,6 +9,7 @@ jobs: build_and_deploy_android: name: Build & Deploy Android runs-on: ubuntu-latest + environment: production timeout-minutes: 30 steps: - name: Check out @@ -43,9 +44,9 @@ jobs: - name: Set up .env env: - ENV_PRODUCTION: ${{ secrets.ENV_PRODUCTION }} + ENV: ${{ secrets.ENV }} run: | - echo $ENV_PRODUCTION > .env + echo "$ENV" > .env # App Bundle requires Firebase connected to Play Store to upload https://appdistribution.page.link/KPoa - name: Build Android apk @@ -54,7 +55,7 @@ jobs: - name: Deploy Android Production to Firebase uses: wzieba/Firebase-Distribution-Github-Action@v1.5.0 with: - appId: ${{ secrets.FIREBASE_ANDROID_APP_ID_PRODUCTION }} + appId: ${{ vars.FIREBASE_ANDROID_APP_ID }} serviceCredentialsFileContent: ${{ secrets.FIREBASE_DISTRIBUTION_CREDENTIAL_JSON }} groups: ${{ vars.FIREBASE_DISTRIBUTION_TESTER_GROUPS }} file: build/app/outputs/flutter-apk/app-production-debug.apk diff --git a/.github/workflows/android_deploy_production_to_playstore.yml b/.github/workflows/android_deploy_production_to_playstore.yml index 4c397bd4..cdeb2f09 100644 --- a/.github/workflows/android_deploy_production_to_playstore.yml +++ b/.github/workflows/android_deploy_production_to_playstore.yml @@ -9,6 +9,7 @@ jobs: build_and_deploy_android: name: Build & Deploy Android runs-on: ubuntu-latest + environment: production timeout-minutes: 30 steps: - name: Check out @@ -43,17 +44,17 @@ jobs: - name: Set up .env env: - ENV_PRODUCTION: ${{ secrets.ENV_PRODUCTION }} + ENV: ${{ secrets.ENV }} run: | - echo $ENV_PRODUCTION > .env + echo "$ENV" > .env - name: Set up release signing configs env: ANDROID_RELEASE_KEYSTORE_BASE64: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }} - ANDROID_SIGNING_PROPERTIES_BASE64: ${{ secrets.ANDROID_SIGNING_PROPERTIES_BASE64 }} + ANDROID_SIGNING_PROPERTIES: ${{ secrets.ANDROID_SIGNING_PROPERTIES }} run: | echo $ANDROID_RELEASE_KEYSTORE_BASE64 | base64 --decode > android/config/release.keystore - echo $ANDROID_SIGNING_PROPERTIES_BASE64 | base64 --decode > android/signing.properties + echo "$ANDROID_SIGNING_PROPERTIES" > android/signing.properties - name: Build Production App Bundle run: flutter build appbundle --flavor production --release --build-number $GITHUB_RUN_NUMBER diff --git a/.github/workflows/android_deploy_staging.yml b/.github/workflows/android_deploy_staging.yml index 443f48f9..22fa7f52 100644 --- a/.github/workflows/android_deploy_staging.yml +++ b/.github/workflows/android_deploy_staging.yml @@ -9,6 +9,7 @@ jobs: build_and_deploy_android: name: Build & Deploy Android runs-on: ubuntu-latest + environment: staging timeout-minutes: 30 environment: staging steps: @@ -44,9 +45,9 @@ jobs: - name: Set up .env.staging env: - ENV_STAGING: ${{ secrets.ENV_STAGING }} + ENV: ${{ secrets.ENV }} run: | - echo $ENV_STAGING > .env.staging + echo "$ENV" > .env.staging # App Bundle requires Firebase connected to Play Store to upload https://appdistribution.page.link/KPoa - name: Build Android apk @@ -55,7 +56,7 @@ jobs: - name: Deploy Android Staging to Firebase uses: wzieba/Firebase-Distribution-Github-Action@v1.5.0 with: - appId: ${{ secrets.FIREBASE_ANDROID_APP_ID_STAGING }} + appId: ${{ vars.FIREBASE_ANDROID_APP_ID }} serviceCredentialsFileContent: ${{ secrets.FIREBASE_DISTRIBUTION_CREDENTIAL_JSON }} groups: ${{ vars.FIREBASE_DISTRIBUTION_TESTER_GROUPS }} file: build/app/outputs/flutter-apk/app-staging-debug.apk diff --git a/.github/workflows/ios_deploy_staging_to_firebase.yml b/.github/workflows/ios_deploy_staging_to_firebase.yml index e31074db..8a4e850d 100644 --- a/.github/workflows/ios_deploy_staging_to_firebase.yml +++ b/.github/workflows/ios_deploy_staging_to_firebase.yml @@ -9,6 +9,7 @@ jobs: build_and_upload_staging_app_to_firebase: name: Build And Upload iOS Staging Application To Firebase runs-on: macOS-latest + environment: staging env: TEAM_ID: ${{ secrets.TEAM_ID }} FASTLANE_USER: ${{ secrets.FASTLANE_USER }} @@ -18,7 +19,7 @@ jobs: MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} FIREBASE_CLI_TOKEN: ${{ secrets.FIREBASE_CLI_TOKEN }} - FIREBASE_APP_ID_STAGING: ${{ secrets.FIREBASE_IOS_APP_ID_STAGING }} + FIREBASE_APP_ID_STAGING: ${{ vars.FIREBASE_IOS_APP_ID }} FIREBASE_DISTRIBUTION_TESTER_GROUPS: ${{ vars.FIREBASE_DISTRIBUTION_TESTER_GROUPS }} GITHUB_RUN_NUMBER: $GITHUB_RUN_NUMBER steps: @@ -50,9 +51,9 @@ jobs: - name: Set up .env.staging env: - ENV_STAGING: ${{ secrets.ENV_STAGING }} + ENV: ${{ secrets.ENV }} run: | - echo $ENV_STAGING > .env.staging + echo "$ENV" > .env.staging - name: Run code generator run: flutter packages pub run build_runner build --delete-conflicting-outputs diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production.yml b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production.yml index 170aa819..1cb8daa7 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production.yml +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production.yml @@ -9,6 +9,7 @@ jobs: build_and_deploy_android: name: Build & Deploy Android runs-on: ubuntu-latest + environment: production timeout-minutes: 30 steps: - name: Check out @@ -34,9 +35,9 @@ jobs: - name: Set up .env env: - ENV_PRODUCTION: ${{#mustacheCase}}secrets.ENV_PRODUCTION{{/mustacheCase}} + ENV: ${{#mustacheCase}}secrets.ENV{{/mustacheCase}} run: | - echo $ENV_PRODUCTION > .env + echo "$ENV" > .env # App Bundle requires Firebase connected to Play Store to upload https://appdistribution.page.link/KPoa - name: Build Android apk @@ -45,7 +46,7 @@ jobs: - name: Deploy Android Production to Firebase uses: wzieba/Firebase-Distribution-Github-Action@v1.5.0 with: - appId: ${{#mustacheCase}}secrets.FIREBASE_ANDROID_APP_ID_PRODUCTION{{/mustacheCase}} + appId: ${{#mustacheCase}}vars.FIREBASE_ANDROID_APP_ID{{/mustacheCase}} serviceCredentialsFileContent: ${{#mustacheCase}}secrets.FIREBASE_DISTRIBUTION_CREDENTIAL_JSON{{/mustacheCase}} groups: ${{#mustacheCase}}vars.FIREBASE_DISTRIBUTION_TESTER_GROUPS{{/mustacheCase}} file: build/app/outputs/flutter-apk/app-production-debug.apk diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production_to_playstore.yml b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production_to_playstore.yml index 6f8ac006..5b9d4190 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production_to_playstore.yml +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_production_to_playstore.yml @@ -9,6 +9,7 @@ jobs: build_and_deploy_android: name: Build & Deploy Android runs-on: ubuntu-latest + environment: production timeout-minutes: 30 steps: - name: Check out @@ -34,17 +35,17 @@ jobs: - name: Set up .env env: - ENV_PRODUCTION: ${{#mustacheCase}}secrets.ENV_PRODUCTION{{/mustacheCase}} + ENV: ${{#mustacheCase}}secrets.ENV{{/mustacheCase}} run: | - echo $ENV_PRODUCTION > .env + echo "$ENV" > .env - name: Set up release signing configs env: ANDROID_RELEASE_KEYSTORE_BASE64: ${{#mustacheCase}}secrets.ANDROID_RELEASE_KEYSTORE_BASE64{{/mustacheCase}} - ANDROID_SIGNING_PROPERTIES_BASE64: ${{#mustacheCase}}secrets.ANDROID_SIGNING_PROPERTIES_BASE64{{/mustacheCase}} + ANDROID_SIGNING_PROPERTIES: ${{#mustacheCase}}secrets.ANDROID_SIGNING_PROPERTIES{{/mustacheCase}} run: | echo $ANDROID_RELEASE_KEYSTORE_BASE64 | base64 --decode > android/config/release.keystore - echo $ANDROID_SIGNING_PROPERTIES_BASE64 | base64 --decode > android/signing.properties + echo "$ANDROID_SIGNING_PROPERTIES" > android/signing.properties - name: Build Production App Bundle run: flutter build appbundle --flavor production --release --build-number $GITHUB_RUN_NUMBER diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_staging.yml b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_staging.yml index 2a6612df..d318a132 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_staging.yml +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/android_deploy_staging.yml @@ -9,6 +9,7 @@ jobs: build_and_deploy_android: name: Build & Deploy Android runs-on: ubuntu-latest + environment: staging timeout-minutes: 30 steps: - name: Check out @@ -34,9 +35,9 @@ jobs: - name: Set up .env.staging env: - ENV_STAGING: ${{#mustacheCase}}secrets.ENV_STAGING{{/mustacheCase}} + ENV: ${{#mustacheCase}}secrets.ENV{{/mustacheCase}} run: | - echo $ENV_STAGING > .env.staging + echo "$ENV" > .env.staging # App Bundle requires Firebase connected to Play Store to upload https://appdistribution.page.link/KPoa - name: Build Android apk @@ -45,7 +46,7 @@ jobs: - name: Deploy Android Staging to Firebase uses: wzieba/Firebase-Distribution-Github-Action@v1.5.0 with: - appId: ${{#mustacheCase}}secrets.FIREBASE_ANDROID_APP_ID_STAGING{{/mustacheCase}} + appId: ${{#mustacheCase}}vars.FIREBASE_ANDROID_APP_ID{{/mustacheCase}} serviceCredentialsFileContent: ${{#mustacheCase}}secrets.FIREBASE_DISTRIBUTION_CREDENTIAL_JSON{{/mustacheCase}} groups: ${{#mustacheCase}}vars.FIREBASE_DISTRIBUTION_TESTER_GROUPS{{/mustacheCase}} file: build/app/outputs/flutter-apk/app-staging-debug.apk diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_staging_to_firebase.yml b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_staging_to_firebase.yml index b73edd1a..8cdcfa8e 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_staging_to_firebase.yml +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_staging_to_firebase.yml @@ -9,6 +9,7 @@ jobs: build_and_upload_staging_app_to_firebase: name: Build And Upload iOS Staging Application To Firebase runs-on: macOS-latest + environment: staging env: TEAM_ID: ${{#mustacheCase}}secrets.TEAM_ID{{/mustacheCase}} FASTLANE_USER: ${{#mustacheCase}}secrets.FASTLANE_USER{{/mustacheCase}} @@ -18,7 +19,7 @@ jobs: MATCH_PASSWORD: ${{#mustacheCase}}secrets.MATCH_PASSWORD{{/mustacheCase}} KEYCHAIN_PASSWORD: ${{#mustacheCase}}secrets.KEYCHAIN_PASSWORD{{/mustacheCase}} FIREBASE_CLI_TOKEN: ${{#mustacheCase}}secrets.FIREBASE_CLI_TOKEN{{/mustacheCase}} - FIREBASE_APP_ID_STAGING: ${{#mustacheCase}}secrets.FIREBASE_IOS_APP_ID_STAGING{{/mustacheCase}} + FIREBASE_APP_ID_STAGING: ${{#mustacheCase}}vars.FIREBASE_IOS_APP_ID{{/mustacheCase}} FIREBASE_DISTRIBUTION_TESTER_GROUPS: ${{#mustacheCase}}vars.FIREBASE_DISTRIBUTION_TESTER_GROUPS{{/mustacheCase}} GITHUB_RUN_NUMBER: $GITHUB_RUN_NUMBER steps: @@ -41,9 +42,9 @@ jobs: - name: Set up .env.staging env: - ENV_STAGING: ${{#mustacheCase}}secrets.ENV_STAGING{{/mustacheCase}} + ENV: ${{#mustacheCase}}secrets.ENV{{/mustacheCase}} run: | - echo $ENV_STAGING > .env.staging + echo "$ENV" > .env.staging - name: Run code generator run: flutter packages pub run build_runner build --delete-conflicting-outputs diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_app_store.yml b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_app_store.yml index 5dfc446a..ffc30f95 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_app_store.yml +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_app_store.yml @@ -9,6 +9,7 @@ jobs: build_and_upload_to_app_store: name: Build And Upload iOS Application To AppStore runs-on: macOS-latest + environment: staging timeout-minutes: 30 env: TEAM_ID: ${{#mustacheCase}}secrets.TEAM_ID{{/mustacheCase}} diff --git a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_testflight.yml b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_testflight.yml index 5010b1fe..2734e4bd 100644 --- a/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_testflight.yml +++ b/bricks/template/__brick__/{{project_name.snakeCase()}}/.github/workflows/ios_deploy_to_testflight.yml @@ -9,6 +9,7 @@ jobs: build_and_upload_to_testflight: name: Build And Upload iOS Application To TestFlight runs-on: macOS-latest + environment: staging timeout-minutes: 30 env: TEAM_ID: ${{#mustacheCase}}secrets.TEAM_ID{{/mustacheCase}}