name: Core

on:
  workflow_dispatch:
    inputs:
      post_telegram:
        description: 'Post to Telegram'
        required: true
        type: boolean
  push:
    branches: [ master ]
    tags: [ v* ]
  pull_request:
  merge_group:

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      CCACHE_COMPILERCHECK: "%compiler% -dumpmachine; %compiler% -dumpversion"
      CCACHE_NOHASHDIR: "true"
      CCACHE_HARDLINK: "true"
      CCACHE_BASEDIR: "${{ github.workspace }}"

    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          submodules: recursive
          fetch-depth: 0

      - name: Write key
        if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/master' ) || github.ref_type == 'tag' }}
        run: |
          if [ ! -z "${{ secrets.KEY_STORE }}" ]; then
            echo androidStorePassword='${{ secrets.KEY_STORE_PASSWORD }}' >> gradle.properties
            echo androidKeyAlias='${{ secrets.ALIAS }}' >> gradle.properties
            echo androidKeyPassword='${{ secrets.KEY_PASSWORD }}' >> gradle.properties
            echo androidStoreFile='key.jks' >> gradle.properties
            echo ${{ secrets.KEY_STORE }} | base64 --decode > key.jks
          fi

      - name: Setup Java
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 21

      - name: Setup Gradle
        uses: gradle/actions/setup-gradle@v5

      - name: Configure Gradle properties
        run: |
          echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties
          echo 'org.gradle.parallel=true' >> ~/.gradle/gradle.properties
          echo 'org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -XX:+UseParallelGC' >> ~/.gradle/gradle.properties
          echo 'android.native.buildOutput=verbose' >> ~/.gradle/gradle.properties

      - name: Setup ninja
        uses: seanmiddleditch/gha-setup-ninja@v6
        with:
          version: 1.12.1

      - name: Setup ccache
        uses: actions/cache@v5
        with:
          path: |
            ~/.ccache
            ${{ github.workspace }}/.ccache
          key: ${{ runner.os }}-ccache-${{ hashFiles('**/build.gradle') }}-${{ hashFiles('**/CMakeLists.txt') }}
          restore-keys: |
            ${{ runner.os }}-ccache-

      - name: Setup Android SDK
        uses: android-actions/setup-android@v3

      - name: Remove Android's cmake
        shell: bash
        run: rm -rf $ANDROID_HOME/cmake

      - name: Build with Gradle
        run: |
          ./gradlew zipAll

      - name: Prepare artifact
        if: success()
        id: prepareArtifact
        run: |
          zygiskReleaseName=`ls magisk-loader/release/LSPosed-v*-zygisk-release.zip | awk -F '(/|.zip)' '{print $3}'` && echo "zygiskReleaseName=$zygiskReleaseName" >> $GITHUB_OUTPUT
          zygiskDebugName=`ls magisk-loader/release/LSPosed-v*-zygisk-debug.zip | awk -F '(/|.zip)' '{print $3}'` && echo "zygiskDebugName=$zygiskDebugName" >> $GITHUB_OUTPUT
          unzip magisk-loader/release/LSPosed-v*-zygisk-release.zip -d LSPosed-zygisk-release
          unzip magisk-loader/release/LSPosed-v*-zygisk-debug.zip -d LSPosed-zygisk-debug

      - name: Upload zygisk release
        uses: actions/upload-artifact@v6
        with:
          name: ${{ steps.prepareArtifact.outputs.zygiskReleaseName }}
          path: "./LSPosed-zygisk-release/*"

      - name: Upload zygisk debug
        uses: actions/upload-artifact@v6
        with:
          name: ${{ steps.prepareArtifact.outputs.zygiskDebugName }}
          path: "./LSPosed-zygisk-debug/*"

      - name: Upload mappings
        uses: actions/upload-artifact@v6
        with:
          name: mappings
          path: |
            magisk-loader/build/outputs/mapping
            app/build/outputs/mapping

      - name: Upload symbols
        uses: actions/upload-artifact@v6
        with:
          name: symbols
          path: build/symbols

      - name: Post to channel
        if: ${{ success() && github.event_name != 'pull_request' && github.ref == 'refs/heads/master' && github.ref_type != 'tag' && inputs.post_telegram != 'false' }}
        env:
          CHANNEL_ID: ${{ secrets.CHANNEL_ID }}
          DISCUSSION_ID: ${{ secrets.DISCUSSION_ID }}
          TOPIC_ID: ${{ secrets.TOPIC_ID }}
          BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
          COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
          COMMIT_URL: ${{ github.event.head_commit.url }}
        run: |
          if [ ! -z "${{ secrets.BOT_TOKEN }}" ]; then
            OUTPUT="magisk-loader/release/"
            export riruRelease=$(find $OUTPUT -name "LSPosed-v*-riru-release.zip")
            export riruDebug=$(find $OUTPUT -name "LSPosed-v*-riru-debug.zip")
            export zygiskRelease=$(find $OUTPUT -name "LSPosed-v*-zygisk-release.zip")
            export zygiskDebug=$(find $OUTPUT -name "LSPosed-v*-zygisk-debug.zip")
            ESCAPED=`python3 -c 'import json,os,urllib.parse; msg = json.dumps(os.environ["COMMIT_MESSAGE"]); print(urllib.parse.quote(msg if len(msg) <= 1024 else json.dumps(os.environ["COMMIT_URL"])))'`
            curl -v "https://api.telegram.org/bot${BOT_TOKEN}/sendMediaGroup?chat_id=${CHANNEL_ID}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FriruRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FzygiskRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FriruDebug%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FzygiskDebug%22%2C%22caption%22:${ESCAPED}%7D%5D" -F riruRelease="@$riruRelease" -F riruDebug="@$riruDebug" -F zygiskRelease="@$zygiskRelease" -F zygiskDebug="@$zygiskDebug"
            # curl -v "https://api.telegram.org/bot${BOT_TOKEN}/sendMediaGroup?chat_id=${DISCUSSION_ID}&message_thread_id=${TOPIC_ID}&media=%5B%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FriruRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FzygiskRelease%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FriruDebug%22%7D%2C%7B%22type%22%3A%22document%22%2C%20%22media%22%3A%22attach%3A%2F%2FzygiskDebug%22%2C%22caption%22:${ESCAPED}%7D%5D" -F riruRelease="@$riruRelease" -F riruDebug="@$riruDebug" -F zygiskRelease="@$zygiskRelease" -F zygiskDebug="@$zygiskDebug"
          fi
