name: Magisk Build

on:
  push:
    branches: [ master ]
    paths:
      - 'app/**'
      - 'native/**'
      - 'stub/**'
      - 'buildSrc/**'
      - 'build.py'
      - 'gradle.properties'
      - '.github/workflows/build.yml'
  pull_request:
    branches: [ master ]
  workflow_dispatch:

jobs:
  build:
    name: Build on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ ubuntu-latest, windows-latest, macos-latest ]
    env:
      NDK_CCACHE: ${{ github.workspace }}/ccache
      CCACHE_DIR: ${{ github.workspace }}/.ccache

    steps:
      - name: Check out
        uses: actions/checkout@v2
        with:
          submodules: 'recursive'
          fetch-depth: 0

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

      - name: Set up Python 3
        uses: actions/setup-python@v2
        with:
          python-version: '3.x'

      - name: Set up ccache
        run: bash .github/ccache.sh

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

      - name: Cache build cache
        uses: actions/cache@v2
        with:
          path: |
            ${{ github.workspace }}/.ccache
            ~/.gradle/caches/build-cache-*
          key: ${{ runner.os }}-build-cache-${{ github.sha }}
          restore-keys: ${{ runner.os }}-build-cache-

      - name: Set up NDK
        run: python build.py -v ndk

      - name: Build release
        run: |
          ./ccache -zp
          python build.py -vr all

      - name: Build debug
        run: |
          python build.py -v all
          ./ccache -s

      - name: Stop gradle daemon
        run: ./gradlew --stop

      # Only upload artifacts built on Linux
      - name: Upload build artifact
        if: runner.os == 'Linux'
        uses: actions/upload-artifact@v2
        with:
          name: ${{ github.sha }}
          path: out
