on:
  push:
    tags:
      - "v*.*.*"

name: Release

jobs:
  analyze-test:
    name: Analyze and test
    uses: ./.github/workflows/analyze-test.yaml

  release:
    name: Release
    if: startsWith(github.ref, 'refs/tags/v')
    needs:
      - analyze-test
    runs-on: ${{ matrix.runner }}
    strategy:
      matrix:
        include:
          - os: android
            runner: ubuntu-latest
          - os: ios
            runner: macos-latest
      fail-fast: false

    environment: prod

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Setup flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: "3.7.5"
          channel: "stable"
          cache: true
          cache-key: deps-${{ hashFiles('**/pubspec.lock') }} # optional, change this to force refresh cache
          cache-path: ${{ runner.tool_cache }}/flutter # optional, change this to specify the cache path

      - name: Setup Firebase env
        env:
          FIREBASE_ENV: ${{ secrets.FIREBASE_ENV }}
        run: echo "$FIREBASE_ENV" > ./configurations/env.fcm

      - name: Setup Android environment
        if: matrix.os == 'android'
        env:
          PLAY_STORE_UPLOAD_KEY_BASE64: ${{ secrets.PLAY_STORE_UPLOAD_KEY_BASE64 }}
          PLAY_STORE_KEY_INFO_BASE64: ${{ secrets.PLAY_STORE_KEY_INFO_BASE64 }}
        run: |
          echo "$PLAY_STORE_UPLOAD_KEY_BASE64" | base64 --decode > app/keystore.jks
          echo "$PLAY_STORE_KEY_INFO_BASE64" | base64 --decode > key.properties
        working-directory: ${{ matrix.os }}

      - name: Setup Java
        if: matrix.os == 'android'
        uses: actions/setup-java@v3
        with:
          distribution: "temurin"
          java-version: "11"

      - name: Setup iOS environment
        if: matrix.os == 'ios'
        env:
          CERTIFICATE_BASE64: ${{ secrets.CERTIFICATE_BASE64 }}
          PROVISION_PROFILE_BASE64: ${{ secrets.PROVISION_PROFILE_BASE64 }}
          SHAREEXT_PROVISION_PROFILE_BASE64: ${{ secrets.SHAREEXT_PROVISION_PROFILE_BASE64 }}
          APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
        run: |
          echo -n "$CERTIFICATE_BASE64" | base64 --decode --output cert.p12
          echo -n "$PROVISION_PROFILE_BASE64" | base64 --decode --output buildpp.mobileprovision
          echo -n "$SHAREEXT_PROVISION_PROFILE_BASE64" | base64 --decode --output shareextpp.mobileprovision
          echo -n "$APPLE_API_KEY_BASE64" | base64 --decode --output apiKey.p8
          flutter pub get && pod install
        working-directory: ${{ matrix.os }}

      - name: Setup Fastlane
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: "ruby"
          bundler-cache: true
          working-directory: ${{ matrix.os }}

      - name: Run prebuild
        run: bash prebuild.sh

      - name: Build and deploy
        env:
          CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
          FASTLANE_USER: ${{ secrets.APPLE_ID }}
          PLAY_STORE_CONFIG_JSON: ${{ secrets.PLAY_STORE_CONFIG_JSON }}
          APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
          APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
        run: bundle exec fastlane release
        working-directory: ${{ matrix.os }}
