name: Build Kernel - Android 12
on:
  push:
    branches: ["main", "ci", "checkci"]
    paths:
      - ".github/workflows/build-kernel-a12.yml"
      - ".github/workflows/gki-kernel.yml"
      - ".github/scripts/build_a12.sh"
      - "kernel/**"
  pull_request:
    branches: ["main"]
    paths:
      - ".github/workflows/build-kernel-a12.yml"
      - ".github/workflows/gki-kernel.yml"
      - ".github/scripts/build-a12.sh"
      - "kernel/**"
  workflow_call:
jobs:
  build-kernel:
    if: github.event_name != 'pull_request' && github.ref != 'refs/heads/checkci'
    strategy:
      matrix:
        include:
          - sub_level: 66
            os_patch_level: 2022-01
          - sub_level: 81
            os_patch_level: 2022-03
          - sub_level: 101
            os_patch_level: 2022-05
          - sub_level: 110
            os_patch_level: 2022-07
          - sub_level: 117
            os_patch_level: 2022-09
          - sub_level: 136
            os_patch_level: 2022-11
          - sub_level: 149
            os_patch_level: 2023-01
          - sub_level: 160
            os_patch_level: 2023-03
          - sub_level: 168
            os_patch_level: 2023-05
          - sub_level: 177
            os_patch_level: 2023-07
          - sub_level: 185
            os_patch_level: 2023-09
          - sub_level: 198
            os_patch_level: 2023-11
    uses: ./.github/workflows/gki-kernel.yml
    secrets: inherit
    with:
      version: android12-5.10
      version_name: android12-5.10.${{ matrix.sub_level }}
      tag: android12-5.10-${{ matrix.os_patch_level }}
      os_patch_level: ${{ matrix.os_patch_level }}
      patch_path: "5.10"
  
  upload-artifacts:
    needs: build-kernel
    runs-on: ubuntu-latest
    if: ${{ ( github.event_name != 'pull_request' && github.ref == 'refs/heads/main' ) || github.ref_type == 'tag' || github.ref == 'refs/heads/ci' }}
    env:
      CHAT_ID: ${{ secrets.CHAT_ID }}
      BOT_TOKEN: ${{ secrets.BOT_TOKEN }}
      MESSAGE_THREAD_ID: ${{ secrets.MESSAGE_THREAD_ID }}
      COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
      COMMIT_URL: ${{ github.event.head_commit.url }}
      RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v4

      - uses: actions/checkout@v4
        with:
          path: KernelSU
          fetch-depth: 0

      - name: List artifacts
        run: |
          tree

      - name: Download prebuilt toolchain
        run: |
          AOSP_MIRROR=https://android.googlesource.com
          BRANCH=main-kernel-build-2023
          git clone $AOSP_MIRROR/platform/prebuilts/build-tools -b $BRANCH --depth 1 build-tools
          git clone $AOSP_MIRROR/kernel/prebuilts/build-tools -b $BRANCH --depth 1 kernel-build-tools
          git clone $AOSP_MIRROR/platform/system/tools/mkbootimg -b $BRANCH --depth 1
          pip3 install telethon==1.31.1

      - name: Set boot sign key
        env:
          BOOT_SIGN_KEY: ${{ secrets.BOOT_SIGN_KEY }}
        run: |
          if [ ! -z "$BOOT_SIGN_KEY" ]; then
            echo "$BOOT_SIGN_KEY" > ./kernel-build-tools/linux-x86/share/avb/testkey_rsa2048.pem
          fi

      - name: Bot session cache
        id: bot_session_cache
        uses: actions/cache@v3
        with:
          path: scripts/ksubot.session
          key: ${{ runner.os }}-bot-session

      - name: Build boot images
        run: |
          export AVBTOOL=$GITHUB_WORKSPACE/kernel-build-tools/linux-x86/bin/avbtool
          export GZIP=$GITHUB_WORKSPACE/build-tools/path/linux-x86/gzip
          export LZ4=$GITHUB_WORKSPACE/build-tools/path/linux-x86/lz4
          export MKBOOTIMG=$GITHUB_WORKSPACE/mkbootimg/mkbootimg.py
          export UNPACK_BOOTIMG=$GITHUB_WORKSPACE/mkbootimg/unpack_bootimg.py
          cd $GITHUB_WORKSPACE/KernelSU
          export VERSION=$(($(git rev-list --count HEAD) + 10200))
          echo "VERSION: $VERSION"
          cd -
          bash $GITHUB_WORKSPACE/KernelSU/.github/scripts/build_a12.sh

      - name: Display structure of boot files
        run: ls -R

      - name: Upload images artifact
        uses: actions/upload-artifact@v4
        with:
          name: boot-images-android12
          path: Image-android12*/*.img.gz

  check-build-kernel:
    if: (github.event_name == 'pull_request' && !github.event.pull_request.draft) || github.ref == 'refs/heads/checkci'
    uses: ./.github/workflows/gki-kernel.yml
    with:
      version: android12-5.10
      version_name: android12-5.10.177
      tag: android12-5.10-2023-06
      os_patch_level: 2023-06
      patch_path: "5.10"
