name: Kernel Update Check

on:
  schedule:
    - cron: '0 6 1,15 * *'
  workflow_dispatch:

jobs:
  check-update:
    runs-on: iso-builder

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          token: ${{ secrets.FORGEJO_TOKEN }}

      - name: Check CachyOS kernel version
        id: check
        run: |
          set -euo pipefail
          PKGBUILD=$(curl -fsSL --retry 3 \
            "https://raw.githubusercontent.com/CachyOS/linux-cachyos/master/linux-cachyos/PKGBUILD")
          MAJOR=$(echo "$PKGBUILD" | grep '^_major=' | cut -d= -f2)
          MINOR=$(echo "$PKGBUILD" | grep '^_minor=' | cut -d= -f2)
          TAGREL=$(echo "$PKGBUILD" | grep '^_tagrel=' | cut -d= -f2)
          if [ -z "$MAJOR" ] || [ -z "$MINOR" ] || [ -z "$TAGREL" ]; then
            echo "HIBA: Nem sikerult a CachyOS verziot lekerdezni"
            exit 1
          fi
          echo "MAJOR=$MAJOR" >> $GITHUB_OUTPUT
          echo "MINOR=$MINOR" >> $GITHUB_OUTPUT
          echo "TAGREL=$TAGREL" >> $GITHUB_OUTPUT
          echo "Legfrissebb CachyOS: ${MAJOR}.${MINOR}-${TAGREL}"

      - name: Read current version
        id: current
        run: |
          set -euo pipefail
          MAJOR=$(grep '^_major=' linux-raveos/PKGBUILD | cut -d= -f2)
          MINOR=$(grep '^_minor=' linux-raveos/PKGBUILD | cut -d= -f2)
          TAGREL=$(grep '^_tagrel=' linux-raveos/PKGBUILD | cut -d= -f2)
          PKGVER=$(grep '^pkgver=' linux-raveos/PKGBUILD | cut -d= -f2)
          echo "MAJOR=$MAJOR" >> $GITHUB_OUTPUT
          echo "MINOR=$MINOR" >> $GITHUB_OUTPUT
          echo "TAGREL=$TAGREL" >> $GITHUB_OUTPUT
          echo "PKGVER=$PKGVER" >> $GITHUB_OUTPUT
          echo "Jelenlegi: ${MAJOR}.${MINOR}-${TAGREL} (pkgver=${PKGVER})"

      - name: Frissites szukseges?
        id: needsupdate
        run: |
          set -euo pipefail
          NEW="${{ steps.check.outputs.MAJOR }}.${{ steps.check.outputs.MINOR }}-${{ steps.check.outputs.TAGREL }}"
          CUR="${{ steps.current.outputs.MAJOR }}.${{ steps.current.outputs.MINOR }}-${{ steps.current.outputs.TAGREL }}"
          if [ "$NEW" != "$CUR" ]; then
            echo "UPDATE=yes" >> $GITHUB_OUTPUT
            echo "Frissites: $CUR -> $NEW"
          else
            echo "UPDATE=no" >> $GITHUB_OUTPUT
            echo "Aktualis, nincs frissites: $CUR"
          fi

      - name: PR mar letezik?
        id: prcheck
        if: steps.needsupdate.outputs.UPDATE == 'yes'
        run: |
          set -euo pipefail
          BRANCH="update/kernel-${{ steps.check.outputs.MAJOR }}.${{ steps.check.outputs.MINOR }}-${{ steps.check.outputs.TAGREL }}"
          OPEN_PRS=$(curl -fsSL \
            -H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \
            "https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls?state=open&limit=50")
          EXISTS=$(echo "$OPEN_PRS" | python3 -c "
          import sys, json
          pulls = json.load(sys.stdin)
          branch = '$BRANCH'
          found = any(p.get('head', {}).get('ref', '') == branch for p in pulls)
          print('yes' if found else 'no')
          ")
          echo "EXISTS=$EXISTS" >> $GITHUB_OUTPUT
          echo "PR letezik: $EXISTS"

      - name: PKGBUILD frissitese es PR nyitasa
        if: steps.needsupdate.outputs.UPDATE == 'yes' && steps.prcheck.outputs.EXISTS == 'no'
        run: |
          set -euo pipefail

          NEW_MAJOR="${{ steps.check.outputs.MAJOR }}"
          NEW_MINOR="${{ steps.check.outputs.MINOR }}"
          NEW_TAGREL="${{ steps.check.outputs.TAGREL }}"
          OLD_PKGVER="${{ steps.current.outputs.PKGVER }}"
          CUR="${{ steps.current.outputs.MAJOR }}.${{ steps.current.outputs.MINOR }}-${{ steps.current.outputs.TAGREL }}"

          # pkgver = kernel verzio (pl. 7.0.11)
          # pkgrel logika:
          #   - uj major.minor (pl. 7.0.10 -> 7.0.11 vagy 8.0.x) -> reset 10-re
          #   - csak _tagrel valtozik (ugyanaz a kernel, uj stable tag) -> +1
          NEW_PKGVER="${NEW_MAJOR}.${NEW_MINOR}"

          OLD_MAJOR="${{ steps.current.outputs.MAJOR }}"
          OLD_MINOR="${{ steps.current.outputs.MINOR }}"
          OLD_PKGREL=$(grep '^pkgrel=' linux-raveos/PKGBUILD | cut -d= -f2)

          if [ "${OLD_MAJOR}.${OLD_MINOR}" != "${NEW_MAJOR}.${NEW_MINOR}" ]; then
            NEW_PKGREL=10
          elif [ "$OLD_PKGREL" -lt 10 ]; then
            NEW_PKGREL=10
          else
            NEW_PKGREL=$((OLD_PKGREL + 1))
          fi

          BRANCH="update/kernel-${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL}"

          git config user.name "RaveOS Bot"
          git config user.email "bot@raveos.hu"
          git checkout -b "$BRANCH"

          sed -i "s/^_major=.*/_major=${NEW_MAJOR}/" linux-raveos/PKGBUILD
          sed -i "s/^_minor=.*/_minor=${NEW_MINOR}/" linux-raveos/PKGBUILD
          sed -i "s/^_tagrel=.*/_tagrel=${NEW_TAGREL}/" linux-raveos/PKGBUILD
          sed -i "s/^pkgver=.*/pkgver=${NEW_PKGVER}/" linux-raveos/PKGBUILD
          sed -i "s/^pkgrel=.*/pkgrel=${NEW_PKGREL}/" linux-raveos/PKGBUILD

          # Uj CachyOS config letoltese + RaveOS javitasok visszarakasa
          curl -fsSL --retry 3 \
            "https://raw.githubusercontent.com/CachyOS/linux-cachyos/master/linux-cachyos/config" \
            -o linux-raveos/config
          sed -i 's/^CONFIG_ZRAM=m$/CONFIG_ZRAM=y/' linux-raveos/config
          sed -i 's/^# CONFIG_ZRAM is not set$/CONFIG_ZRAM=y/' linux-raveos/config
          sed -i 's/^CONFIG_NTSYNC=m$/CONFIG_NTSYNC=y/' linux-raveos/config
          sed -i 's/^# CONFIG_NTSYNC is not set$/CONFIG_NTSYNC=y/' linux-raveos/config

          git add linux-raveos/PKGBUILD linux-raveos/config
          git commit -m "update: linux-cachyos ${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL} (pkgver=${NEW_PKGVER}-${NEW_PKGREL})"

          git remote set-url origin "https://bot:${{ secrets.FORGEJO_TOKEN }}@git.rp1.hu/RaveOS/RaveOS-PKGBUILD.git"
          git push origin "$BRANCH"

          curl -fsSL -X POST \
            -H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \
            -H "Content-Type: application/json" \
            "https://git.rp1.hu/api/v1/repos/${{ github.repository }}/pulls" \
            -d "{
              \"title\": \"kernel update: ${CUR} -> ${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL}\",
              \"head\": \"${BRANCH}\",
              \"base\": \"main\",
              \"body\": \"Automatikus kernel verzio frissites.\n\n- Regi: \`${CUR}\` (pkgver=${OLD_PKGVER})\n- Uj: \`${NEW_MAJOR}.${NEW_MINOR}-${NEW_TAGREL}\` (pkgver=${NEW_PKGVER})\n\nMerge utan automatikusan elindul a build.\"
            }"
          echo "PR megnyitva: $BRANCH -> main"
