name: release

# This workflow is triggered on pushes to the repository.
on:
    workflow_dispatch:
        # Enable manual run
    push:
        # Sequence of patterns matched against refs/tags
        tags:
            - "v*" # Push events to matching v*, i.e. v4.2.0

jobs:
    build:
        # This job will run on ubuntu virtual machine
        runs-on: ubuntu-latest
        steps:
            # Setup Java environment in order to build the Android app.
            - uses: actions/checkout@v2
            - uses: actions/setup-java@v2
              with:
                  distribution: "adopt"
                  java-version: "11"

            # Setup the flutter environment.
            - uses: subosito/flutter-action@v2
              with:
                  channel: "stable"
                  flutter-version: "3.13.4"

            # Fetch sub modules
            - run: git submodule update --init --recursive

            # Get flutter dependencies.
            - run: flutter pub get

            - name: Setup keys
              uses: timheuer/base64-to-file@v1
              with:
                  fileName: "keystore/ente_auth_key.jks"
                  encodedString: ${{ secrets.SIGNING_KEY }}

            # Build independent apk.
            - name: Build
              run: flutter build apk --release --flavor independent --dart-define=app.flavor=independent && mv build/app/outputs/flutter-apk/app-independent-release.apk build/app/outputs/flutter-apk/ente-auth.apk
              env:
                  SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_auth_key.jks"
                  SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
                  SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
                  SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}

            # Build Play store aab.
            - name: Build
              run: flutter build appbundle --release --flavor playstore --dart-define=app.flavor=playstore
              env:
                  SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_auth_key.jks"
                  SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
                  SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
                  SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}

            - name: Checksum
              run: sha256sum build/app/outputs/flutter-apk/ente-auth.apk > build/app/outputs/flutter-apk/sha256sum

            # Upload generated apk to the artifacts.
            - uses: actions/upload-artifact@v2
              with:
                  name: release-apk
                  path: build/app/outputs/flutter-apk/ente-auth.apk

            - uses: actions/upload-artifact@v2
              with:
                  name: release-checksum
                  path: build/app/outputs/flutter-apk/sha256sum

            # Create a Github release
            - uses: ncipollo/release-action@v1
              with:
                  artifacts: "build/app/outputs/flutter-apk/ente-auth.apk,build/app/outputs/flutter-apk/sha256sum"
                  token: ${{ secrets.GITHUB_TOKEN }}

            # Upload to Play store
            - uses: ente-io/upload-google-play@v1
              with:
                  serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
                  packageName: io.ente.auth
                  releaseFiles: build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
                  track: internal
