name: Build job

on:
  # Every Thursday at 17:30 UTC
  schedule:
    - cron: '30 17 * * 4'
  # Manual triggers
  workflow_dispatch:
    inputs:
      git-ref:
        description: Git Ref (Optional)
        required: false
      dry-run:
        description: Creates a draft release
        required: false

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

    steps:
      - name: Clone Repository (Latest)
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          repository: 'mihonapp/mihon'
          fetch-depth: 0
        if: github.event.inputs.git-ref == ''
      - name: Clone Repository (Custom Ref)
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        if: github.event.inputs.git-ref != ''
        with:
          repository: 'mihonapp/mihon'
          fetch-depth: 0
          ref: ${{ github.event.inputs.git-ref }}

      - name: Set up JDK
        uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
        with:
          java-version: 17
          distribution: temurin

      - name: Set up gradle
        uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0

      - name: Build APK
        run: ./gradlew assemblePreview -Pwith-analytics -Pwith-updater

      - name: Sign APK
        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: Get previous release
        id: last_release
        uses: InsonusK/get-latest-release@7a9ff16c8c6b7ead5d71c0f1cc61f2703170eade # v1.1.0
        with:
          myToken: ${{ github.token }}
          exclude_types: 'draft|prerelease'
          view_top: 1

      - name: Prepare changelog
        run: |
          set -e

          commit_count=$(git rev-list --count HEAD)
          echo "COMMIT_COUNT=$commit_count" >> $GITHUB_ENV
          current_sha=$(git rev-parse --short HEAD)
          echo "CURRENT_SHA=$current_sha" >> $GITHUB_ENV

          prev_commit_count=$(echo "${{ steps.last_release.outputs.tag_name }}" | sed -e "s/^r//")
          commit_count_diff=$(expr $commit_count - $prev_commit_count)
          prev_release_sha=$(git rev-parse --short HEAD~$commit_count_diff)
          echo "PREV_RELEASE_SHA=$prev_release_sha" >> $GITHUB_ENV

          echo "COMMIT_LOGS<<{delimiter}
          $(curl -H "Accept: application/vnd.github.v3+json" \
            "https://api.github.com/repos/mihonapp/mihon/compare/$prev_release_sha...$current_sha" \
            | jq '[.commits[]|{message:(.commit.message | split("\n")), username:.author.login}]' \
            | jq -r '.[]|"- \(.message | first) (@\(.username))"')
          {delimiter}" >> $GITHUB_ENV

      - name: Clean up build artifacts
        run: |
          set -e

          cp app/build/outputs/apk/preview/app-universal-preview-signed.apk mihon-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum mihon-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_UNIVERSAL_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/preview/app-arm64-v8a-preview-signed.apk mihon-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum mihon-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_ARM64_V8A_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/preview/app-armeabi-v7a-preview-signed.apk mihon-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum mihon-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_ARMEABI_V7A_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/preview/app-x86-preview-signed.apk mihon-x86-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum mihon-x86-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_X86_SHA=$sha" >> $GITHUB_ENV

          cp app/build/outputs/apk/preview/app-x86_64-preview-signed.apk mihon-x86_64-r${{ env.COMMIT_COUNT }}.apk
          sha=`sha256sum mihon-x86_64-r${{ env.COMMIT_COUNT }}.apk | awk '{ print $1 }'`
          echo "APK_X86_64_SHA=$sha" >> $GITHUB_ENV

      - name: Create release
        uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1
        with:
          tag_name: r${{ env.COMMIT_COUNT }}
          name: Mihon Preview r${{ env.COMMIT_COUNT }}
          body: |
            ### Commits

            https://github.com/mihonapp/mihon/compare/${{ env.PREV_RELEASE_SHA }}...${{ env.CURRENT_SHA }}

            ${{ env.COMMIT_LOGS }}

            ---

            ### Checksums

            | Variant | SHA-256 |
            | ------- | ------- |
            | Universal | ${{ env.APK_UNIVERSAL_SHA }}
            | arm64-v8a | ${{ env.APK_ARM64_V8A_SHA }}
            | armeabi-v7a | ${{ env.APK_ARMEABI_V7A_SHA }}
            | x86 | ${{ env.APK_X86_SHA }} |
            | x86_64 | ${{ env.APK_X86_64_SHA }} |
            
            ## If you are unsure which apk to download then go with mihon-r${{ env.COMMIT_COUNT }}.apk
          files: |
            mihon-r${{ env.COMMIT_COUNT }}.apk
            mihon-arm64-v8a-r${{ env.COMMIT_COUNT }}.apk
            mihon-armeabi-v7a-r${{ env.COMMIT_COUNT }}.apk
            mihon-x86-r${{ env.COMMIT_COUNT }}.apk
            mihon-x86_64-r${{ env.COMMIT_COUNT }}.apk
          draft: ${{ github.event.inputs.dry-run != '' }}
          prerelease: false
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Prune old releases
        uses: dev-drprasad/delete-older-releases@dfbe6be2a006e9475dfcbe5b8d201f1824c2a9fe # v0.3.4
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          keep_latest: 28
          delete_tags: true

      - name: Update website
        run: |
          curl -L \
          -X POST \
          -H "Accept: application/vnd.github+json" \
          -H "Authorization: Bearer ${{ secrets.MIHON_BOT_TOKEN }}" \
          -H "X-GitHub-Api-Version: 2022-11-28" \
          https://api.github.com/repos/mihonapp/website/dispatches \
          -d '{"event_type":"app_release"}'