summaryrefslogtreecommitdiff
path: root/.forgejo/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.forgejo/workflows')
-rw-r--r--.forgejo/workflows/build-hyprland.yml156
-rw-r--r--.forgejo/workflows/build-kernel.yml4
-rw-r--r--.forgejo/workflows/build-theme-send-core-repo.yml2
-rw-r--r--.forgejo/workflows/hyprland-update-check.yml129
4 files changed, 288 insertions, 3 deletions
diff --git a/.forgejo/workflows/build-hyprland.yml b/.forgejo/workflows/build-hyprland.yml
new file mode 100644
index 0000000..625be43
--- /dev/null
+++ b/.forgejo/workflows/build-hyprland.yml
@@ -0,0 +1,156 @@
+name: Build hyprland-raveos stack
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - 'hyprland-raveos/**'
+ workflow_dispatch:
+
+concurrency:
+ group: raveos-hyprland-build
+ cancel-in-progress: true
+
+jobs:
+ build:
+ runs-on: iso-builder
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Install build dependencies
+ run: |
+ set -euo pipefail
+ sudo pacman -S --needed --noconfirm \
+ base-devel cmake meson ninja clang llvm lld rust go git \
+ wayland wayland-protocols cairo pango libxkbcommon libinput \
+ libdrm mesa libglvnd pixman xorg-xwayland rsync pacman-contrib
+
+ - name: Fetch core repo via rsync
+ run: |
+ set -euo pipefail
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ rm -rf /tmp/raveos-core-repo
+ mkdir -p /tmp/raveos-core-repo/x86_64
+ rsync -az -e "$RSYNC_SSH" \
+ root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/ || true
+ mkdir -p /tmp/builtpkgs
+
+ - name: Import GPG signing key
+ run: |
+ set -euo pipefail
+ export GNUPGHOME=/tmp/raveos-gnupg
+ rm -rf "$GNUPGHOME"
+ mkdir -m 700 "$GNUPGHOME"
+ echo "${{ secrets.GPG_PRIVATE_KEY }}" | base64 -d | gpg --batch --import
+
+ - name: Build hyprland-raveos stack
+ run: |
+ set -euo pipefail
+ ORDER=(
+ hyprutils
+ hyprwayland-scanner
+ hyprlang
+ hyprgraphics
+ hyprcursor
+ aquamarine
+ hyprwire
+ hyprland-guiutils
+ hyprland
+ xdg-desktop-portal-hyprland
+ hyprpolkitagent
+ hyprland-qt-support
+ dms-shell
+ )
+
+ mkdir -p /tmp/builtpkgs
+ CORE="/tmp/raveos-core-repo/x86_64"
+
+ for pkg in "${ORDER[@]}"; do
+ dir="hyprland-raveos/$pkg"
+ [ -d "$dir" ] || continue
+
+ PKGVER=$(grep '^pkgver=' "$dir/PKGBUILD" | head -1 | cut -d= -f2 | tr -d "'\"")
+ PKGREL=$(grep '^pkgrel=' "$dir/PKGBUILD" | head -1 | cut -d= -f2 | tr -d "'\"")
+
+ echo "=== Checking $pkg (${PKGVER}-${PKGREL}) ==="
+ if ls "$CORE"/${pkg}-${PKGVER}-${PKGREL}-*.pkg.tar.zst 2>/dev/null | grep -q .; then
+ echo "$pkg already built -> skipping"
+ continue
+ fi
+
+ echo "=== Building $pkg ==="
+ cd "$dir"
+ rm -f *.pkg.tar.zst || true
+ makepkg -s --noconfirm -f
+
+ for built in *.pkg.tar.zst; do
+ [ -f "$built" ] || continue
+ cp -v "$built" /tmp/builtpkgs/
+ sudo pacman -U --noconfirm "$built" || true
+ done
+ cd - >/dev/null
+ done
+
+ - name: Sign built packages
+ run: |
+ set -euo pipefail
+ export GNUPGHOME=/tmp/raveos-gnupg
+ for pkg in /tmp/builtpkgs/*.pkg.tar.zst; do
+ [ -f "$pkg" ] || continue
+ gpg --batch --yes --pinentry-mode loopback \
+ --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
+ --detach-sign --no-armor "$pkg"
+ done
+
+ - name: Update repo database and sync to VPS
+ run: |
+ set -euo pipefail
+ BUILT=$(ls /tmp/builtpkgs/*.pkg.tar.zst 2>/dev/null || true)
+ if [ -z "$BUILT" ]; then
+ echo "Nincs új csomag -> kihagyva"
+ exit 0
+ fi
+
+ CORE="/tmp/raveos-core-repo/x86_64"
+ for pkg in $BUILT; do
+ PKGFILE=$(basename "$pkg")
+ PKGNAME=$(echo "$PKGFILE" | sed 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//')
+ rm -f "$CORE/${PKGNAME}-"*.pkg.tar.zst* 2>/dev/null || true
+ cp -v "$pkg" "$CORE/"
+ [ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/"
+ done
+
+ export GNUPGHOME=/tmp/raveos-gnupg
+ cd "$CORE"
+ ALLPKGS=$(ls *.pkg.tar.zst)
+ repo-add raveos-core-repo.db.tar.xz $ALLPKGS
+
+ for f in raveos-core-repo.db.tar.xz raveos-core-repo.files.tar.xz; do
+ gpg --batch --yes --pinentry-mode loopback \
+ --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \
+ --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \
+ --detach-sign --no-armor -o "$f.sig" "$f"
+ done
+ ln -sf raveos-core-repo.db.tar.xz.sig raveos-core-repo.db.sig
+ ln -sf raveos-core-repo.files.tar.xz.sig raveos-core-repo.files.sig
+
+ RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=no"
+ rsync -az --delete -e "$RSYNC_SSH" \
+ "$CORE/" root@10.66.66.1:/root/docker/repo/repo/x86_64/
+
+ echo "::notice title=Hyprland stack published::All packages updated in repo"
+
+ - name: Cleanup
+ if: always()
+ run: |
+ gpgconf --homedir /tmp/raveos-gnupg --kill gpg-agent || true
+ sudo rm -rf /tmp/raveos-gnupg || true
+ sudo rm -rf /tmp/builtpkgs || true
+ sudo rm -rf /tmp/raveos-core-repo || true
+ df -h
diff --git a/.forgejo/workflows/build-kernel.yml b/.forgejo/workflows/build-kernel.yml
index a532055..cac3432 100644
--- a/.forgejo/workflows/build-kernel.yml
+++ b/.forgejo/workflows/build-kernel.yml
@@ -71,8 +71,8 @@ jobs:
run: |
set -euo pipefail
cd linux-raveos
- chmod -R 777 .
- sudo -u builder makepkg -s --noconfirm --needed
+ rm -f *.pkg.tar.zst || true
+ makepkg -s --noconfirm -f
mkdir -p /tmp/builtpkgs
cp -v *.pkg.tar.zst /tmp/builtpkgs/
diff --git a/.forgejo/workflows/build-theme-send-core-repo.yml b/.forgejo/workflows/build-theme-send-core-repo.yml
index 1ad9a43..1683b3e 100644
--- a/.forgejo/workflows/build-theme-send-core-repo.yml
+++ b/.forgejo/workflows/build-theme-send-core-repo.yml
@@ -23,7 +23,7 @@ jobs:
run: |
set -euo pipefail
sudo pacman -S --needed --noconfirm \
- base-devel git pacman-contrib cmake qt6-tools go cargo gtk4-layer-shell hyprland
+ base-devel git pacman-contrib cmake qt6-tools go cargo gtk4-layer-shell
- name: Sync core repo from VPS (rsync pull)
run: |
diff --git a/.forgejo/workflows/hyprland-update-check.yml b/.forgejo/workflows/hyprland-update-check.yml
new file mode 100644
index 0000000..f6afab7
--- /dev/null
+++ b/.forgejo/workflows/hyprland-update-check.yml
@@ -0,0 +1,129 @@
+name: Hyprland Stack Update Check
+
+on:
+ schedule:
+ - cron: '0 6 * * 1,4'
+ 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 for existing open PR
+ id: prcheck
+ run: |
+ set -euo pipefail
+ 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)
+ found = any(p.get('head', {}).get('ref', '').startswith('update/hyprland-stack') for p in pulls)
+ print('yes' if found else 'no')
+ ")
+ echo "EXISTS=$EXISTS" >> $GITHUB_OUTPUT
+ echo "Open PR exists: $EXISTS"
+
+ - name: Check upstream versions
+ id: check
+ if: steps.prcheck.outputs.EXISTS == 'no'
+ run: |
+ set -euo pipefail
+ sudo pacman -S --needed --noconfirm pacman-contrib curl jq
+
+ UPDATED_PKGS=()
+ SUMMARY=""
+
+ PKGS=(
+ hyprutils
+ hyprlang
+ hyprwayland-scanner
+ aquamarine
+ hyprcursor
+ hyprgraphics
+ hyprwire
+ hyprland-guiutils
+ hyprland
+ xdg-desktop-portal-hyprland
+ hyprpolkitagent
+ hyprland-qt-support
+ dms-shell
+ )
+
+ for pkg in "${PKGS[@]}"; do
+ dir="hyprland-raveos/$pkg"
+ [ -d "$dir" ] || continue
+
+ LOCAL_VER=$(grep '^pkgver=' "$dir/PKGBUILD" | head -1 | cut -d= -f2 | tr -d "'\"")
+
+ UPSTREAM_PKGBUILD=$(curl -fsSL --retry 3 "https://gitlab.archlinux.org/archlinux/packaging/packages/${pkg}/-/raw/main/PKGBUILD" 2>/dev/null || true)
+ [ -n "$UPSTREAM_PKGBUILD" ] || continue
+
+ UPSTREAM_VER=$(echo "$UPSTREAM_PKGBUILD" | grep '^pkgver=' | head -1 | cut -d= -f2 | tr -d "'\"")
+ [ -n "$UPSTREAM_VER" ] || continue
+
+ if [ "$LOCAL_VER" != "$UPSTREAM_VER" ]; then
+ echo "Update available for $pkg: $LOCAL_VER -> $UPSTREAM_VER"
+
+ # Frissites letoltese es pkgrel beallitasa
+ echo "$UPSTREAM_PKGBUILD" > "$dir/PKGBUILD"
+ sed -i 's/^pkgrel=[0-9]*/pkgrel=10/' "$dir/PKGBUILD"
+ if [ "$pkg" = "hyprpolkitagent" ] || [ "$pkg" = "hyprland-qt-support" ]; then
+ sed -i 's/^pkgrel=10/pkgrel=20/' "$dir/PKGBUILD"
+ fi
+
+ UPDATED_PKGS+=("$pkg")
+ SUMMARY="${SUMMARY}\n- **${pkg}**: \`${LOCAL_VER}\` -> \`${UPSTREAM_VER}-10\`"
+ else
+ echo "$pkg is up-to-date ($LOCAL_VER)"
+ fi
+ done
+
+ if [ ${#UPDATED_PKGS[@]} -gt 0 ]; then
+ echo "HAS_UPDATES=yes" >> $GITHUB_OUTPUT
+ echo "COUNT=${#UPDATED_PKGS[@]}" >> $GITHUB_OUTPUT
+ echo -e "SUMMARY<<EOF\n${SUMMARY}\nEOF" >> $GITHUB_OUTPUT
+ else
+ echo "HAS_UPDATES=no" >> $GITHUB_OUTPUT
+ echo "No updates found for hyprland stack."
+ fi
+
+ - name: Create branch and open single Pull Request
+ if: steps.prcheck.outputs.EXISTS == 'no' && steps.check.outputs.HAS_UPDATES == 'yes'
+ run: |
+ set -euo pipefail
+ DATE=$(date +%Y%m%d-%H%M)
+ BRANCH="update/hyprland-stack-${DATE}"
+
+ git config user.name "RaveOS Bot"
+ git config user.email "bot@raveos.hu"
+ git checkout -b "$BRANCH"
+
+ git add hyprland-raveos/
+ git commit -m "update: hyprland stack (${{ steps.check.outputs.COUNT }} packages)"
+
+ git remote set-url origin "https://bot:${{ secrets.FORGEJO_TOKEN }}@git.rp1.hu/RaveOS/RaveOS-PKGBUILD.git"
+ git push origin "$BRANCH"
+
+ PR_BODY="Automata Hyprland stack frissítés (${{ steps.check.outputs.COUNT }} csomag):\n${{ steps.check.outputs.SUMMARY }}\n\nA csomagok a merge után az \`iso-builder\` runneren sorrendben fordulnak le, GPG aláírással kerülnek a RaveOS repóba."
+
+ 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 "$(jq -n \
+ --arg title "Hyprland stack frissítés (${{ steps.check.outputs.COUNT }} csomag)" \
+ --arg head "$BRANCH" \
+ --arg base "main" \
+ --arg body "$PR_BODY" \
+ '{title: $title, head: $head, base: $base, body: $body}')"
+
+ echo "Single PR successfully opened for hyprland stack update."