name: CI

on:
  push:
    branches:
      - master
    paths-ignore:
      - '**.md'

jobs:
  check_wrapper:
    name: Validate Gradle Wrapper
    runs-on: ubuntu-latest
    steps:
      - name: Cancel previous runs
        uses: styfle/cancel-workflow-action@0.9.1
        with:
          access_token: ${{ github.token }}
          all_but_latest: true

      - name: Clone repo
        uses: actions/checkout@v2

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

  build_multisrc:
    name: Build multisrc modules
    needs: check_wrapper
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        lang: [all, en, ar, ca, de, es, fr, id, it, ja, ko, pt, ru, th, tr, vi, zh, bg, hi, pl]
    steps:
      - name: Checkout master branch
        uses: actions/checkout@v2

      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Copy CI files
        run: |
          mkdir -p ~/.gradle
          cp .github/runner-files/ci-gradle.properties ~/.gradle/gradle.properties
          echo ${{ secrets.SIGNING_KEY }} | base64 -d > signingkey.jks

      - name: Generate sources from the multi-source library
        uses: gradle/gradle-command-action@v2
        env:
          CI_MULTISRC: "true"
        with:
          arguments: :multisrc:generateExtensions
          cache-disabled: true

      - name: Build "${{ matrix.lang }}" extensions
        uses: gradle/gradle-command-action@v2
        env:
          CI_MULTISRC: "true"
          CI_MATRIX_LANG: ${{ matrix.lang }}
          ALIAS: ${{ secrets.ALIAS }}
          KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
          KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
        with:
          arguments: assembleRelease
          cache-disabled: true

      - name: Upload "${{ matrix.lang }}" APKs
        uses: actions/upload-artifact@v2
        if: "github.repository == 'tachiyomiorg/tachiyomi-extensions'"
        with:
          name: "multisrc-${{ matrix.lang }}-apks"
          path: "**/*.apk"
          retention-days: 1

      - name: Clean up CI files
        run: rm signingkey.jks

  build_individual:
    name: Build individual modules
    needs: check_wrapper
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        lang: [all, en, ar, ca, de, es, fr, id, it, ja, ko, pt, ru, th, tr, vi, zh, bg, hi, pl]
    steps:
      - name: Checkout master branch
        uses: actions/checkout@v2

      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Copy CI files
        run: |
          mkdir -p ~/.gradle
          cp .github/runner-files/ci-gradle.properties ~/.gradle/gradle.properties
          echo ${{ secrets.SIGNING_KEY }} | base64 -d > signingkey.jks

      - name: Build "${{ matrix.lang }}" extensions
        uses: gradle/gradle-command-action@v2
        env:
          CI_MULTISRC: "false"
          CI_MATRIX_LANG: ${{ matrix.lang }}
          ALIAS: ${{ secrets.ALIAS }}
          KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
          KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
        with:
          arguments: assembleRelease
          cache-disabled: true

      - name: Upload "${{ matrix.lang }}" APKs
        uses: actions/upload-artifact@v2
        if: "github.repository == 'tachiyomiorg/tachiyomi-extensions'"
        with:
          name: "individual-${{ matrix.lang }}-apks"
          path: "**/*.apk"
          retention-days: 1

      - name: Clean up CI files
        run: rm signingkey.jks

  publish_repo:
    name: Publish repo
    needs:
      - build_multisrc
      - build_individual
    if: "github.repository == 'tachiyomiorg/tachiyomi-extensions'"
    runs-on: ubuntu-latest
    steps:
      - name: Download APK artifacts
        uses: actions/download-artifact@v2
        with:
          path: ~/apk-artifacts

      - name: Set up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 11

      - name: Checkout master branch
        uses: actions/checkout@v2
        with:
          ref: master
          path: master

      - name: Create repo artifacts
        run: |
          cd master
          ./.github/scripts/move-apks.sh
          INSPECTOR_LINK="$(curl -s "https://api.github.com/repos/tachiyomiorg/tachiyomi-extensions-inspector/releases/latest" | jq -r '.assets[0].browser_download_url')"
          curl -L "$INSPECTOR_LINK" -o ./Inspector.jar
          java -jar ./Inspector.jar "apk" "output.json" "tmp"
          ./.github/scripts/create-repo.sh

      - name: Checkout repo branch
        uses: actions/checkout@v2
        with:
          ref: repo
          path: repo

      - name: Deploy repo
        run: |
          cd repo
          ../master/.github/scripts/commit-repo.sh