name: Release

on:
  workflow_dispatch:
  push:
    branches:
      - main
      - dev
jobs:
  release:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          # Make sure the release step uses its own credentials:
          # https://github.com/cycjimmy/semantic-release-action#private-packages
          persist-credentials: false
          fetch-depth: 0
      - name: Setup JDK
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'zulu'
          cache: 'gradle'
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
          cache: 'npm'
      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          channel: 'stable'
          cache: true
      - name: Install Flutter dependencies
        run: flutter pub get
      - name: Generate files with Builder
        run: flutter packages pub run build_runner build --delete-conflicting-outputs
      - name: Build with Flutter
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: flutter build apk
      - name: Sign APK
        id: sign_apk
        uses: ilharp/sign-android-release@v1
        with:
          releaseDir: build/app/outputs/apk/release
          signingKey: ${{ secrets.SIGNING_KEYSTORE }}
          keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
          keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
          keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
      - name: Setup semantic-release
        run: npm ci
      - name: Get release version
        run: npm exec -- semantic-release --dry-run
        id: get-next-version
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Add version to APK
        run: mv $SIGNED_FILE_PATH $(dirname $SIGNED_FILE_PATH)/revanced-manager-${{ steps.get-next-version.outputs.new-release-version }}.apk
        env:
          SIGNED_FILE_PATH: ${{steps.sign_apk.outputs.signedFile}}
      - name: Release
        env:
          GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
        run: npm exec semantic-release
