name: Build raveos packages and publish to raveos-core-repo (SAFE) on: push: branches: ["main"] workflow_dispatch: concurrency: group: raveos-theme-module-build-publish cancel-in-progress: true jobs: build: runs-on: iso-builder steps: - name: Checkout PKGBUILDs repo uses: actions/checkout@v4 with: fetch-depth: 0 - name: Install build tools run: | set -euo pipefail sudo pacman -S --needed --noconfirm \ base-devel git pacman-contrib cmake qt6-tools go cargo gtk4-layer-shell hyprland - name: Clone core repo run: | set -euo pipefail rm -rf /tmp/raveos-core-repo git clone --depth 1 git@git.rp1.hu:RaveOS/raveos-core-repo.git /tmp/raveos-core-repo 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 raveos-calamares-theme run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-calamares-theme PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-calamares-theme-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-calamares-theme ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -f *.pkg.tar.zst || true makepkg -s --noconfirm -f cp -v raveos-calamares-theme-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-mirrorlist run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-mirrorlist PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-mirrorlist-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-mirrorlist ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -f *.pkg.tar.zst || true makepkg -s --noconfirm -f cp -v raveos-mirrorlist-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-calamares-module run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-calamares-module PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-calamares-module-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-calamares-module ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -f *.pkg.tar.zst || true makepkg -s --noconfirm -f cp -v raveos-calamares-module-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-calamares run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-calamares PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/calamares-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-calamares ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -f *.pkg.tar.zst || true makepkg -s --noconfirm -f PKG=$(ls -t *.pkg.tar.zst | grep -v -- '-debug-' | head -n 1) cp -v "$PKG" /tmp/builtpkgs/ - name: Build raveos-keyring run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-keyring PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-keyring-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-keyring ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-keyring-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-sddm-theme run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-sddm-theme PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-sddm-theme-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-sddm-theme ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-sddm-theme-*.pkg.tar.zst /tmp/builtpkgs/ # Azonnal telepitjuk is, mert meg nincs publikalva egy repoban sem # (a "Publish" lepes csak a legvegen fut) - a tobbi DE-tema csomag # makepkg -s hivasa igy fogja tudni feloldani a fuggoseget. sudo pacman -U --noconfirm build/raveos-sddm-theme-*.pkg.tar.zst - name: Build raveos-plasma-theme run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-plasma-theme PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-plasma-theme-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-plasma-theme ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-plasma-theme-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-gnome-theme run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-gnome-theme PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-gnome-theme-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-gnome-theme ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-gnome-theme-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-hyprland-theme run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-hyprland-theme PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-hyprland-theme-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-hyprland-theme ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-hyprland-theme-*.pkg.tar.zst /tmp/builtpkgs/ rm -f /tmp/builtpkgs/raveos-hyprland-theme-debug-*.pkg.tar.zst || true - name: Build raveos-cosmic-theme run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-cosmic-theme PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-cosmic-theme-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-cosmic-theme ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-cosmic-theme-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-tools run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-tools PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-tools-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-tools ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-tools-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-app-installer run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-app-installer PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-app-installer-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-app-installer ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-app-installer-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-welcome run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-welcome PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-welcome-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-welcome ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf build || true makepkg -s --noconfirm -f cp -v build/raveos-welcome-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveos-plymouth-theme run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveos-plymouth-theme PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveos-plymouth-theme-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveos-plymouth-theme ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -f *.pkg.tar.zst || true makepkg -s --noconfirm -f cp -v raveos-plymouth-theme-*.pkg.tar.zst /tmp/builtpkgs/ - name: Build raveswitch run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" cd raveswitch PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/raveswitch-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "raveswitch ${PKGVER}-${PKGREL} unchanged -> skip" exit 0 fi rm -rf src pkg hyprland_raveswitch *.pkg.tar.zst || true makepkg -s --noconfirm -f cp -v raveswitch-*.pkg.tar.zst /tmp/builtpkgs/ - name: Sign built packages run: | set -euo pipefail export GNUPGHOME=/tmp/raveos-gnupg BUILT=$(ls /tmp/builtpkgs/*.pkg.tar.zst 2>/dev/null || true) if [ -z "$BUILT" ]; then echo "Nincs csomag alairashoz -> kihagyva" exit 0 fi for pkg in $BUILT; do gpg --batch --yes --pinentry-mode loopback \ --passphrase "${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }}" \ --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \ --detach-sign "$pkg" echo "Alairva: $(basename "$pkg")" done - name: Publish packages to raveos-core-repo (only if changed) run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" mkdir -p "$CORE" BUILT=$(ls /tmp/builtpkgs/*.pkg.tar.zst 2>/dev/null || true) if [ -z "$BUILT" ]; then echo "No packages built -> nothing to publish" exit 0 fi cd /tmp/raveos-core-repo git config user.name "Forgejo Actions" git config user.email "actions@forgejo.local" for pkg in $BUILT; do PKGFILE=$(basename "$pkg") PKGNAME=$(echo "$PKGFILE" | sed 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//') if [[ ! "$PKGNAME" =~ ^[a-zA-Z0-9_+-]+$ ]]; then echo "HIBA: Ervenytelen csomagnev: $PKGNAME -> skip" continue fi rm -f "$CORE/${PKGNAME}-"*.pkg.tar.zst* 2>/dev/null || true cp -v "$pkg" "$CORE/" [ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/" done git add -A git commit -m "Publish packages ${GITHUB_SHA:0:7}" git push origin main TAG="vrepo-$(date +%Y%m%d-%H%M%S)" git tag -a "$TAG" -m "Trigger repo-add (${GITHUB_SHA:0:7})" git push origin "$TAG" echo "::notice title=Published packages::Tag $TAG" - name: Mirror raveos-core-repo to GitHub Releases if: always() run: | set -euo pipefail REPO="/tmp/raveos-core-repo" [ -d "$REPO/.git" ] || { echo "Nincs mit tükrözni -> kihagyva"; exit 0; } # Varjuk meg a kulon (Raveos-core-repo oldali) repo-add workflow-t, ami a # vrepo-* tag push-ra trigerelodik, ujraepiti a .db/.files fajlokat, es # visszacommitolja a main-re. Ez ~40+ masodpercig tarthat (checkout+rebuild+ # commit+push+tag-cleanup), ezert POLLOZUNK, nem fix ideig varunk - amig # tenyleg uj commit nem jelenik meg a main-en, vagy le nem jar az idokeret. before_sha=$(git -C "$REPO" rev-parse HEAD) got_update=0 for i in $(seq 1 20); do sleep 5 git -C "$REPO" fetch origin main --quiet || true remote_sha=$(git -C "$REPO" rev-parse origin/main 2>/dev/null || echo "$before_sha") if [ "$remote_sha" != "$before_sha" ]; then git -C "$REPO" merge --ff-only origin/main echo "Friss commit behuzva a repo-add utan (varakozas: $((i*5))s)" got_update=1 break fi done if [ "$got_update" -eq 0 ]; then echo "FIGYELEM: nem erkezett uj commit ~100mp alatt - a jelenlegi allapotot tukrozzuk, lehet, hogy nem a legfrissebb db" fi OWNER="rave-os" GH_REPO="RaveOS-core-repo-mirror" TAG="core-repo-x86_64" API="https://api.github.com/repos/${OWNER}/${GH_REPO}" TOKEN="${{ secrets.GH_MIRROR_TOKEN }}" release_json=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \ "${API}/releases/tags/${TAG}") || { echo "HIBA: nincs '${TAG}' release a GitHub repoban -> kihagyva"; exit 0; } release_id=$(echo "$release_json" | jq -r .id) existing_assets=$(echo "$release_json" | jq -r '.assets[] | "\(.id)\t\(.name)"') cd "$REPO/x86_64" # 1) regi verziojú csomag-assetek torlese verzio-prefix alapjan # (a fajlnevek tartalmazzak a pkgver-pkgrel-t, ezert egy verziofrissites # uj fajlnevet ad - enelkul a regi verziok orokre felhalmozodnanak) for f in *.pkg.tar.zst; do [ -f "$f" ] || continue pkgname=$(echo "$f" | sed -E 's/-[0-9][^-]*-[^-]*-[^-]*\.pkg\.tar\.zst$//') [ -n "$pkgname" ] || continue while IFS=$'\t' read -r aid aname; do [ -n "$aid" ] || continue case "$aname" in "${pkgname}-"*.pkg.tar.zst | "${pkgname}-"*.pkg.tar.zst.sig) if [ "$aname" != "$f" ] && [ "$aname" != "${f}.sig" ]; then curl -sf -X DELETE -H "Authorization: Bearer ${TOKEN}" \ "${API}/releases/assets/${aid}" || true echo "torolve (regi verzio): $aname" fi ;; esac done <<< "$existing_assets" done # friss asset-lista a torlesek utan existing_assets=$(curl -sf -H "Authorization: Bearer ${TOKEN}" \ "${API}/releases/${release_id}" | jq -r '.assets[] | "\(.id)\t\(.name)"') # 2) minden aktualis fajl feltoltese (azonos nevu regi peldany cserevel) for f in *; do [ -f "$f" ] || continue asset_id=$(echo "$existing_assets" | awk -F'\t' -v n="$f" '$2==n {print $1}') if [ -n "$asset_id" ]; then curl -sf -X DELETE -H "Authorization: Bearer ${TOKEN}" \ "${API}/releases/assets/${asset_id}" || true fi curl -sf -X POST \ -H "Authorization: Bearer ${TOKEN}" \ -H "Content-Type: application/octet-stream" \ --data-binary "@${f}" \ "https://uploads.github.com/repos/${OWNER}/${GH_REPO}/releases/${release_id}/assets?name=${f}" \ || echo "HIBA: ${f} feltoltese sikertelen" done echo "::notice title=GitHub mirror::Kesz" - name: Cleanup (SAFE) 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 sudo rm -rf /var/cache/pacman/pkg/* || true df -h