name: Android CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest
    env:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          
      - name: set up JDK 1.8
        uses: actions/setup-java@v2
        with:
          java-version: 1.8
          distribution: 'adopt'

      - name: Install NDK
        run: echo "y" | sudo /usr/local/lib/android/sdk/tools/bin/sdkmanager --install "ndk;21.0.6113669" --sdk_root=${ANDROID_SDK_ROOT}

      - name: Validate checksum gradle wrapper
        uses: gradle/wrapper-validation-action@v1

      - name: Gradle cache
        id: cache
        uses: actions/cache@v2
        with:
          path: ~/.gradle/caches
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
          restore-keys: |
            ${{ runner.os }}-gradle-

      - name: Enable KVM group perms
        run: |
            echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
            sudo udevadm control --reload-rules
            sudo udevadm trigger --name-match=kvm

      - name: Build Debug APK
        run: |
          chmod +x gradlew
          ./gradlew assembleDebug

      - name: Build Release AAB
        id: buildRelease
        run: ./gradlew bundleRelease

      - name: Sign AAB
        id: sign
        uses: r0adkll/sign-android-release@v1
        with:
          releaseDirectory: app/build/outputs/bundle/release
          signingKeyBase64: ${{ secrets.SIGNING_KEY }}
          alias: ${{ secrets.ALIAS }}
          keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
          keyPassword: ${{ secrets.KEY_PASSWORD }}

      - name: Upload AAB/APK
        id: uploadArtifact
        uses: actions/upload-artifact@v1
        with:
          name: artifact
          path: |
            app/build/outputs/apk/release/app-release.apk
            app/build/outputs/bundle/release/app-release.aab

      - name: Releasing using Hub
        uses: ShaunLWM/action-release-debugapk@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_RElEASE_TOKEN }}
          APP_FOLDER: app
          RELEASE_TITLE: Version

      - name: Create service_account.json
        id: createServiceAccount
        run: echo '${{ secrets.SERVICE_ACCOUNT_JSON }}' > service_account.json
      
      - name: Deploy to Play Store (BETA)
        id: deploy
        uses: r0adkll/upload-google-play@v1
        with:
          serviceAccountJson: service_account.json
          packageName: com.package
          releaseFile: app/build/outputs/bundle/release/app-release.aab
          track: beta
          whatsNewDirectory: whatsnew/

      - name: Notify on Slack
        uses: act10ns/slack@v1
        with:
          status: ${{ job.status }}
          steps: ${{ toJson(steps) }}
        if: always()