name: Release on tag

on:
  push:
    tags:
      - v*

jobs:
  build:
    name: Build and release artifacts.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-java@v4
        with:
          distribution: 'zulu'
          java-version: '17'

      - name: Clone the repository.
        uses: actions/checkout@v4

      - name: Get packages for the Flutter project.
        run: scripts/pub_get_all.sh

      - name: Update the flutter version file.
        run: scripts/update_flutter_version.sh

      - name: Static analysis.
        run: ./flutterw analyze

      - name: Unit tests.
        run: ./flutterw test

      - name: Build signed artifacts.
        # `KEY_JKS` should contain the result of:
        # gpg -c --armor keystore.jks
        # `KEY_JKS_PASSPHRASE` should contain the passphrase used for the command above
        # The SkSL bundle must be produced with the same Flutter engine as the one used to build the artifact
        # flutter build <subcommand> --bundle-sksl-path shaders.sksl.json
        # do not bundle shaders for izzy/libre flavours, to avoid crashes in some environments:
        # cf https://github.com/deckerst/aves/issues/388
        # cf https://github.com/deckerst/aves/issues/398
        run: |
          echo "${{ secrets.KEY_JKS }}" > release.keystore.asc
          gpg -d --passphrase "${{ secrets.KEY_JKS_PASSPHRASE }}" --batch release.keystore.asc > $AVES_STORE_FILE
          rm release.keystore.asc
          mkdir outputs
          scripts/apply_flavor_play.sh
          ./flutterw build appbundle -t lib/main_play.dart --flavor play --bundle-sksl-path shaders.sksl.json
          cp build/app/outputs/bundle/playRelease/*.aab outputs
          ./flutterw build apk -t lib/main_play.dart --flavor play --bundle-sksl-path shaders.sksl.json
          cp build/app/outputs/apk/play/release/*.apk outputs
          scripts/apply_flavor_izzy.sh
          ./flutterw build apk -t lib/main_izzy.dart --flavor izzy --split-per-abi
          cp build/app/outputs/apk/izzy/release/*.apk outputs
          scripts/apply_flavor_libre.sh
          ./flutterw build apk -t lib/main_libre.dart --flavor libre --split-per-abi
          cp build/app/outputs/apk/libre/release/*.apk outputs
          rm $AVES_STORE_FILE
        env:
          AVES_STORE_FILE: ${{ github.workspace }}/key.jks
          AVES_STORE_PASSWORD: ${{ secrets.AVES_STORE_PASSWORD }}
          AVES_KEY_ALIAS: ${{ secrets.AVES_KEY_ALIAS }}
          AVES_KEY_PASSWORD: ${{ secrets.AVES_KEY_PASSWORD }}
          AVES_GOOGLE_API_KEY: ${{ secrets.AVES_GOOGLE_API_KEY }}

      - name: Create a release with the APK and App Bundle.
        uses: ncipollo/release-action@v1
        with:
          artifacts: "outputs/*"
          body: "[Changelog](https://github.com/${{ github.repository }}/blob/develop/CHANGELOG.md#${{ github.ref_name }})"
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Upload app bundle
        uses: actions/upload-artifact@v4
        with:
          name: appbundle
          path: outputs/app-play-release.aab

  release:
    name: Create beta release on Play Store.
    needs: [ build ]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Get appbundle from artifacts.
        uses: actions/download-artifact@v4
        with:
          name: appbundle

      - name: Release app to beta channel.
        uses: r0adkll/upload-google-play@v1.1.3
        with:
          serviceAccountJsonPlainText: ${{ secrets.PLAYSTORE_ACCOUNT_KEY }}
          packageName: deckers.thibault.aves
          releaseFiles: app-play-release.aab
          track: beta
          status: completed
          whatsNewDirectory: whatsnew
