name: Code Quality Checks

on:
  pull_request: { }
  push:
    branches: [ main, develop ]

jobs:
  check:
    name: Project Check Suite
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run code quality check suite
        run: ./tools/check/check_code_quality.sh

  ktlint:
    name: Kotlin Linter
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run ktlint
        run: |
          ./gradlew ktlintCheck --continue
      - name: Upload reports
        uses: actions/upload-artifact@v2
        with:
          name: ktlinting-report
          path: vector/build/reports/ktlint/*.*

# Lint for main module and all the other modules
  android-lint:
    name: Android Linter
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/cache@v2
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: Lint analysis
        run: ./gradlew clean :vector:lint --stacktrace
      - name: Upload reports
        uses: actions/upload-artifact@v2
        with:
          name: lint-report
          path: |
            vector/build/reports/*.*

# Lint for Gplay and Fdroid release APK
  apk-lint:
    name: Lint APK (${{ matrix.target }})
    runs-on: ubuntu-latest
    if: github.ref != 'refs/heads/main'
    strategy:
      fail-fast: false
      matrix:
        target: [ Gplay, Fdroid ]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/cache@v2
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: Lint ${{ matrix.target }} release
        run: ./gradlew clean lint${{ matrix.target }}Release --stacktrace
      - name: Upload ${{ matrix.target }} linting report
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: release-lint-report-${{ matrix.target }}
          path: |
            vector/build/reports/*.*
