summaryrefslogtreecommitdiff
path: root/.forgejo/workflows/kernel-update-check.yml
blob: 72fe71b2f86cffc1f92862f23b522cf735a7cd31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
name: Kernel Update Check

on:
  schedule:
    - cron: '0 6 * * *'
  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 }}"

          # Csak a sajat pkgver utolso szamot noveli: X.Y.Z -> X.Y.Z+1
          BASE="${OLD_PKGVER%.*}"
          LAST="${OLD_PKGVER##*.}"
          NEW_PKGVER="${BASE}.$((LAST + 1))"

          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=1/" linux-raveos/PKGBUILD

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

          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"