name: release

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

jobs:
  get-vars:
    name: Get vars
    runs-on: ubuntu-latest
    outputs:
      tag: ${{ steps.vars.outputs.tag }}
    steps:
      - uses: actions/checkout@v2

      - name: Set variables
        id: vars
        run: echo ::set-output name=tag::${GITHUB_REF#refs/*/}

  android-build:
    name: Android build
    runs-on: ubuntu-latest
    needs: get-vars
    steps:
      - uses: actions/checkout@v2

      - uses: actions/setup-java@v1
        with:
          java-version: "12.x"

      - uses: subosito/flutter-action@v1
        with:
          channel: "stable"

      - name: Get dependencies
        run: flutter pub get

      - name: Inject keystore
        working-directory: android/app
        run: |
          echo "${{ secrets.SIGNING_KEY }}" | base64 -d | tee key.jks >/dev/null

      - name: Generate appbundle
        env:
          ANDROID_KEY_ALIAS: ${{ secrets.ALIAS }}
          ANDROID_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
          ANDROID_STORE_PATH: key.jks
          ANDROID_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
        run: flutter build appbundle --release --target lib/main_prod.dart --flavor prod

      - uses: actions/upload-artifact@v2
        with:
          name: android-appbundle
          path: |
            build/app/outputs/bundle/prodRelease/app-prod-release.aab

      - name: Android build
        env:
          ANDROID_KEY_ALIAS: ${{ secrets.ALIAS }}
          ANDROID_KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
          ANDROID_STORE_PATH: key.jks
          ANDROID_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
        run: |
          flutter build apk --split-per-abi --release --target lib/main_prod.dart --flavor prod

          mv build/app/outputs/flutter-apk/app-arm64-v8a-prod-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-arm64-v8a-android.apk
          mv build/app/outputs/flutter-apk/app-armeabi-v7a-prod-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-armeabi-v7a-android.apk
          mv build/app/outputs/flutter-apk/app-x86_64-prod-release.apk lemmur-${{ needs.get-vars.outputs.tag }}-x86_64-android.apk

      - uses: actions/upload-artifact@v2
        with:
          name: android-build
          path: |
            lemmur-*.apk

  linux-build:
    name: Linux build
    needs: get-vars
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: subosito/flutter-action@v1
        with:
          channel: "stable"

      - name: Get additional dependencies
        run: |
          sudo apt-get update -y
          sudo apt-get install -y clang cmake ninja-build pkg-config libgtk-3-dev libblkid-dev

      - name: Enable linux support
        run: |
          flutter config --enable-linux-desktop

      - name: Build
        run: |
          flutter build linux --release --target lib/main_prod.dart

      - name: Archive
        working-directory: build/linux/x64/release/bundle
        run: |
          tar -czf lemmur-${{ needs.get-vars.outputs.tag }}-x86_64-linux.tar.gz *

      - uses: actions/upload-artifact@v2
        with:
          name: linux-build
          path: build/linux/x64/release/bundle/lemmur-*.tar.gz

  windows-build:
    name: Windows build
    needs: get-vars
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2

      - uses: subosito/flutter-action@v1
        with:
          channel: "stable"

      - name: Build
        run: |
          flutter build windows --release --target lib/main_prod.dart

      - name: Archive
        working-directory: build/windows/runner/Release
        run: |
          7z a lemmur-${{ needs.get-vars.outputs.tag }}-x86_64-windows.zip *

      - uses: actions/upload-artifact@v2
        with:
          name: windows-build
          path: build/windows/runner/Release/lemmur-*.zip

  release:
    name: Release
    needs:
      - get-vars
      - android-build
      - linux-build
      - windows-build
    runs-on: ubuntu-latest
    if: github.repository == 'LemmurOrg/lemmur'
    steps:
      - uses: actions/checkout@v2

      - uses: actions/download-artifact@v2

      - name: ls
        run: ls -R

      - name: Extract current changelog
        run: mv fastlane/metadata/android/en-US/changelogs/$(ls fastlane/metadata/android/en-US/changelogs/ | xargs -I'{}' basename '{}' .txt | sort -n | tail -n 1).txt current-changelog.txt

      - name: Release to GitHub
        uses: softprops/action-gh-release@v1
        with:
          files: |
            android-build/*
            linux-build/*
            windows-build/*
          draft: true
          body_path: current-changelog.txt
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup Ruby
        uses: actions/setup-ruby@v1
        with:
          ruby-version: "2.7"

      - name: Download bundle dependencies
        working-directory: fastlane
        run: |
          gem install bundler:2.0.2
          bundle config path vendor/bundle
          bundle install

      - name: Release to Google Play (beta)
        working-directory: fastlane
        run: |
          echo $GOOGLE_SERVICE_ACCOUNT_KEY > ../$GOOGLE_SERVICE_ACCOUNT_KEY_PATH
          bundle exec fastlane android prod
        env:
          GOOGLE_SERVICE_ACCOUNT_KEY_PATH: google-service-account-key.json
          GOOGLE_SERVICE_ACCOUNT_KEY: ${{ secrets.GOOGLE_SERVICE_ACCOUNT_KEY }}
          ABB_PATH: android-appbundle/app-prod-release.aab
