name: PR build check
on:
  #  push:
  #    branches:
  #      - develop
  #    paths-ignore:
  #      - '**.md'
  pull_request:
    paths:
      - '**'
      - '!**.md'
      - '!i18n-kmk/src/commonMain/moko-resources/**/strings.xml'
      - '!i18n-kmk/src/commonMain/moko-resources/**/plurals.xml'
      - 'i18n-kmk/src/commonMain/moko-resources/base/strings.xml'
      - 'i18n-kmk/src/commonMain/moko-resources/base/plurals.xml'
  # Dispatch or Manual triggers
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
  cancel-in-progress: true

permissions:
  contents: read

jobs:
  build:
    name: Build app
    runs-on: 'ubuntu-24.04'

    steps:
      - name: Clone repo
        uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
        with:
          fetch-depth: 0

      - name: Dependency Review
        uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0

      - name: Validate Gradle Wrapper
        uses: gradle/actions/wrapper-validation@0723195856401067f7a2779048b490ace7a47d7c # v5.0.2

      - name: Set up JDK
        uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
        with:
          java-version: 17
          distribution: temurin

      - name: Write google-services.json
        if: github.repository == github.event.pull_request.head.repo.full_name
        uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3
        with:
          path: app/google-services.json
          contents: ${{ secrets.GOOGLE_SERVICES_JSON }}
          write-mode: overwrite

      - name: Write client_secrets.json
        if: github.repository == github.event.pull_request.head.repo.full_name
        uses: DamianReeves/write-file-action@6929a9a6d1807689191dcc8bbe62b54d70a32b42 # v1.3
        with:
          path: app/src/main/assets/client_secrets.json
          contents: ${{ secrets.GOOGLE_CLIENT_SECRETS_JSON }}
          write-mode: overwrite

      - name: Set up gradle
        uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5

      - name: Check code format
        run: ./gradlew spotlessCheck

      - name: Build app
        if: github.repository == github.event.pull_request.head.repo.full_name
        run: ./gradlew assemblePreview -Pinclude-telemetry -Penable-updater

      - name: Build app
        if: github.repository != github.event.pull_request.head.repo.full_name
        run: ./gradlew assemblePreview

      - name: Run unit tests
        id: unit_tests
        run: ./gradlew testReleaseUnitTest

      - name: Upload test report
        if: steps.unit_tests.outcome == 'failure'
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: test-report-${{ github.sha }}
          path: app/build/reports/tests/testReleaseUnitTest

      - name: Sign APK
        if: github.repository == github.event.pull_request.head.repo.full_name
        uses: r0adkll/sign-android-release@f30bdd30588842ac76044ecdbd4b6d0e3e813478
        with:
          releaseDirectory: app/build/outputs/apk/preview
          signingKeyBase64: ${{ secrets.SIGNING_KEY }}
          alias: ${{ secrets.ALIAS }}
          keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }}
          keyPassword: ${{ secrets.KEY_PASSWORD }}
        env:
          BUILD_TOOLS_VERSION: '35.0.1'

      - name: Signed File name
        id: signed_filename
        if: github.repository == github.event.pull_request.head.repo.full_name
        run: |
          echo "SIGNED_TRAIL=-signed" >> $GITHUB_OUTPUT

      - name: Rename apk
        id: current_commit
        run: |
          set -e
          echo "The git ref is: ${{ github.ref }}"
          version_tag=p$(echo ${{ github.ref }} | cut -d '/' -f 3)
          commit_count=$(git rev-list --count HEAD)
          echo "VERSION_TAG=$version_tag"
          echo "VERSION_TAG=$version_tag" >> $GITHUB_OUTPUT
          echo "COMMIT_COUNT=$commit_count"
          echo "COMMIT_COUNT=$commit_count" >> $GITHUB_OUTPUT
          mv app/build/outputs/apk/preview/app-universal-preview${{ steps.signed_filename.outputs.SIGNED_TRAIL }}.apk Komikku-$version_tag-r$commit_count.apk

      - name: Upload APK
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: Komikku-${{ steps.current_commit.outputs.VERSION_TAG }}-r${{ steps.current_commit.outputs.COMMIT_COUNT }}.apk
          path: ./*.apk

      - name: Upload mapping
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: mapping-${{ github.sha }}
          path: app/build/outputs/mapping/preview
