diff options
Diffstat (limited to '.forgejo/workflows')
| -rw-r--r-- | .forgejo/workflows/build-hyprland.yml | 156 | ||||
| -rw-r--r-- | .forgejo/workflows/build-kernel.yml | 4 | ||||
| -rw-r--r-- | .forgejo/workflows/build-theme-send-core-repo.yml | 2 | ||||
| -rw-r--r-- | .forgejo/workflows/hyprland-update-check.yml | 129 |
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." |