# This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Build Android run-name: Build Android (${{ inputs.binary-type == 'apk' && '.apk' || '.aab' }}) v${{ inputs.version }} on: workflow_call: inputs: version: description: "Version" required: true type: string binary-type: description: "Binary type" type: string required: true flavor: description: "Flavor" type: string required: true include-iap: type: boolean description: Include IAP package default: true stage-backend: type: boolean description: Use stage backend default: true workflow_dispatch: inputs: version: description: "Version" required: true type: string binary-type: description: "Binary type" type: choice required: true options: - apk - appbundle flavor: description: "Flavor" type: choice required: true options: - dev - prod default: dev include-iap: type: boolean description: Include IAP package default: true stage-backend: type: boolean description: Use stage backend default: true env: BUILD_ARGS: --release --flavor ${{ inputs.flavor }} -t lib/main_${{ inputs.flavor }}.dart BUILD_APK_PATH: build/app/outputs/flutter-apk/app-${{ inputs.flavor }}-release.apk BUILD_AAB_PATH: build/app/outputs/bundle/${{ inputs.flavor }}Release/app-${{ inputs.flavor }}-release.aab jobs: build-android: name: Build ${{ inputs.binary-type == 'apk' && '.apk' || '.aab' }} runs-on: macos-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 with: submodules: recursive - 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@v3 with: distribution: "zulu" java-version: "11" - name: Restore Android keystore .jsk and .properties files run: | bash .github/scripts/restore_from_base64.sh "${{ secrets.KEYSTORE_PROPERTIES }}" "android/key.properties" bash .github/scripts/restore_from_base64.sh "${{ secrets.KEYSTORE }}" "android/app/keystore.jks" - name: Restore google-services.json 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 env: CONSTANTS: ${{inputs.stage-backend && secrets.CONSTANTS_STAGE || secrets.CONSTANTS }} run: bash .github/scripts/restore_from_base64.sh "${{ env.CONSTANTS }}" "lib/constants.dart" - name: Increment build number & replace version number run: bash ./.github/scripts/increment_build_number.sh ${{ github.event.inputs.version }} - name: Install Flutter uses: subosito/flutter-action@v2 with: channel: "stable" flutter-version: "3.13.9" - name: Prepare flutter project run: | flutter --version flutter pub get flutter pub run intl_utils:generate - name: Build ${{ inputs.binary-type }} run: flutter build ${{ inputs.binary-type }} $BUILD_ARGS - name: Upload ${{ inputs.binary-type }} to artifacts uses: actions/upload-artifact@v3 with: name: m3_lightmeter_${{ inputs.binary-type }} path: ${{ inputs.binary-type == 'apk' && env.BUILD_APK_PATH || env.BUILD_AAB_PATH }}