From c40ea9411f391f3298f05c8d2945e8a0acd897f2 Mon Sep 17 00:00:00 2001 From: Vadim <44135514+vodemn@users.noreply.github.com> Date: Wed, 21 Feb 2024 14:50:15 +0100 Subject: [PATCH] refined build workflows --- .github/workflows/build_apk.yml | 102 ++++++++++++++++++-------------- .github/workflows/build_ipa.yml | 51 ++++++++++++---- 2 files changed, 98 insertions(+), 55 deletions(-) diff --git a/.github/workflows/build_apk.yml b/.github/workflows/build_apk.yml index 54ba110..69ad10d 100644 --- a/.github/workflows/build_apk.yml +++ b/.github/workflows/build_apk.yml @@ -3,29 +3,51 @@ # separate terms of service, privacy policy, and support # documentation. -name: Build .apk +name: Build Android + +run-name: Build Android v${{ inputs.version }}${{inputs.stage-backend && ' (Stage)' || '' }} on: + workflow_call: + inputs: + version: + description: "Version" + required: true + type: string + build-number: + description: "Build number" + required: true + type: string + stage-backend: + description: "Use stage backend" + required: true + type: boolean workflow_dispatch: inputs: - flavor: - description: 'Flavor' - type: choice + version: + description: "Version" + required: false + type: string + build-number: + description: "Build number" + required: false + type: string + stage-backend: + description: "Use stage backend" required: true - options: - - dev - - prod - default: 'dev' - include-iap: type: boolean - description: Include IAP package - default: true + +env: + VERSION: ${{ github.event.inputs.version }} + BUILD_NUMBER: ${{ github.event.inputs.build-number }} + BUILD_OVERRIDES: ${{ github.event.inputs.version != '' && '--build-name=$VERSION' || '' }} ${{ github.event.inputs.build-number != '' && '--build-number=$BUILD_NUMBER' || '' }} + BUILD_ARGS: --release --flavor prod --target lib/main_prod.dart $BUILD_OVERRIDES jobs: build: - name: Build .apk + name: Build .apk & .aab runs-on: macos-11 - timeout-minutes: 15 + timeout-minutes: 30 steps: - uses: actions/checkout@v3 with: @@ -33,64 +55,56 @@ jobs: - name: Connect private iap package uses: webfactory/ssh-agent@v0.8.0 - if: ${{ inputs.include-iap }} with: ssh-private-key: ${{ secrets.M3_LIGHTMETER_IAP_KEY }} - - name: Override iap package with stub - if: ${{ !inputs.include-iap }} - run: bash ./.github/scripts/stub_iap.sh - - - uses: actions/setup-java@v2 + - uses: actions/setup-java@v3 with: distribution: "zulu" java-version: "11" - name: Restore Android keystore .jsk and .properties files - env: - KEYSTORE: ${{ secrets.KEYSTORE }} - KEYSTORE_PROPERTIES: ${{ secrets.KEYSTORE_PROPERTIES }} run: | - KEYSTORE_PATH=$RUNNER_TEMP/keystore.jks - echo -n "$KEYSTORE" | base64 --decode --output $KEYSTORE_PATH - cp $KEYSTORE_PATH ./android/app - KEYSTORE_PROPERTIES_PATH=$RUNNER_TEMP/key.properties - echo -n "$KEYSTORE_PROPERTIES" | base64 --decode --output $KEYSTORE_PROPERTIES_PATH - cp $KEYSTORE_PROPERTIES_PATH ./android + bash .github/scripts/restore_from_base64.sh "${{ secrets.KEYSTORE }}" "android/keystore.jks" + bash .github/scripts/restore_from_base64.sh "${{ secrets.KEYSTORE_PROPERTIES }}" "android/key.properties" - name: Restore android/app/google-services.json - env: - GOOGLE_SERVICES_JSON_ANDROID: ${{ secrets.GOOGLE_SERVICES_JSON_ANDROID }} - run: | - GOOGLE_SERVICES_JSON_ANDROID_PATH=$RUNNER_TEMP/google-services.json - echo -n "$GOOGLE_SERVICES_JSON_ANDROID" | base64 --decode --output $GOOGLE_SERVICES_JSON_ANDROID_PATH - cp $GOOGLE_SERVICES_JSON_ANDROID_PATH ./android/app + run: bash .github/scripts/restore_from_base64.sh "${{ secrets.GOOGLE_SERVICES_JSON_ANDROID }}" "android/app/google-services.json" - name: Restore firebase_options.dart run: bash .github/scripts/restore_from_base64.sh "${{ secrets.FIREBASE_OPTIONS }}" "lib/firebase_options.dart" - name: Restore constants.dart - run: bash .github/scripts/restore_from_base64.sh "${{ secrets.CONSTANTS }}" "lib/constants.dart" + env: + CONSTANTS: ${{inputs.stage-backend && secrets.CONSTANTS_STAGE || secrets.CONSTANTS }} + run: bash .github/scripts/restore_from_base64.sh "${{ env.CONSTANTS }}" "lib/constants.dart" - name: Install Flutter uses: subosito/flutter-action@v2 with: channel: "stable" - flutter-version: '3.10.0' + flutter-version: "3.10.0" - name: Prepare flutter project - run: | + run: | flutter --version flutter pub get flutter pub run intl_utils:generate - - name: Build .apk - env: - FLAVOR: ${{ github.event.inputs.flavor }} - run: flutter build apk --release --flavor $FLAVOR -t lib/main_$FLAVOR.dart + - name: Build apk + run: flutter build apk $BUILD_ARGS - - name: Upload artifact + - name: Upload apk to artifacts uses: actions/upload-artifact@v3 with: - name: m3_lightmeter_${{ github.event.inputs.flavor }}_apk - path: build/app/outputs/flutter-apk/app-${{ github.event.inputs.flavor }}-release.apk + name: m3_lightmeter_apk + path: build/app/outputs/flutter-apk/app-prod-release.apk + + - name: Build appbundle + run: flutter build appbundle $BUILD_ARGS + + - name: Upload app bundle to artifacts + uses: actions/upload-artifact@v3 + with: + name: m3_lightmeter_bundle + path: build/app/outputs/bundle/prodRelease/app-prod-release.aab diff --git a/.github/workflows/build_ipa.yml b/.github/workflows/build_ipa.yml index 91c4247..c0c98a4 100644 --- a/.github/workflows/build_ipa.yml +++ b/.github/workflows/build_ipa.yml @@ -3,19 +3,51 @@ # separate terms of service, privacy policy, and support # documentation. -name: Build Prod .ipa +name: Build iOS + +run-name: Build iOS v${{ inputs.version }}${{inputs.stage-backend && ' (Stage)' || '' }} on: + workflow_call: + inputs: + version: + description: "Version" + required: true + type: string + build-number: + description: "Build number" + required: true + type: string + stage-backend: + description: "Use stage backend" + required: true + type: boolean workflow_dispatch: + inputs: + version: + description: "Version" + required: false + type: string + build-number: + description: "Build number" + required: false + type: string + stage-backend: + description: "Use stage backend" + required: true + type: boolean env: - FLAVOR: "prod" + VERSION: ${{ github.event.inputs.version }} + BUILD_NUMBER: ${{ github.event.inputs.build-number }} + BUILD_OVERRIDES: ${{ github.event.inputs.version != '' && '--build-name=$VERSION' || '' }} ${{ github.event.inputs.build-number != '' && '--build-number=$BUILD_NUMBER' || '' }} + BUILD_ARGS: --release --flavor prod --target lib/main_prod.dart $BUILD_OVERRIDES jobs: build: name: Build .ipa runs-on: macos-11 - timeout-minutes: 60 + timeout-minutes: 30 steps: - uses: actions/checkout@v3 with: @@ -62,7 +94,9 @@ jobs: run: bash .github/scripts/restore_from_base64.sh "${{ secrets.FIREBASE_OPTIONS }}" "lib/firebase_options.dart" - name: Restore constants.dart - run: bash .github/scripts/restore_from_base64.sh "${{ secrets.CONSTANTS }}" "lib/constants.dart" + env: + CONSTANTS: ${{inputs.stage-backend && secrets.CONSTANTS_STAGE || secrets.CONSTANTS }} + run: bash .github/scripts/restore_from_base64.sh "${{ env.CONSTANTS }}" "lib/constants.dart" - name: Install Flutter uses: subosito/flutter-action@v2 @@ -77,19 +111,14 @@ jobs: flutter pub run intl_utils:generate - name: Build .ipa - run: | - flutter build ipa \ - --release \ - --flavor $FLAVOR \ - --target lib/main_$FLAVOR.dart \ - --export-options-plist=ios/Runner/ExportOptions.plist + run: flutter build ipa $BUILD_ARGS --export-options-plist=ios/Runner/ExportOptions.plist - name: Upload artifact uses: actions/upload-artifact@v3 with: name: m3_lightmeter_$FLAVOR_ipa path: build/ios/ipa/lightmeter.ipa - + - name: Clean up keychain and provisioning profile if: ${{ always() }} run: |