name: Check Packages on: push: paths: - "packages.x86_64" pull_request: paths: - "packages.x86_64" workflow_dispatch: jobs: check-packages: runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 - name: Check all packages run: | docker run --rm \ -v "${{ github.workspace }}:/workspace" \ -w /workspace \ archlinux:latest \ bash -c ' set -e echo "═══════════════════════════════════════════════════════════════" echo " Installing prerequisites" echo "═══════════════════════════════════════════════════════════════" pacman -Syu --noconfirm --needed pacman pacman-contrib curl gnupg echo "═══════════════════════════════════════════════════════════════" echo " Setting up official repos (extra, multilib)" echo "═══════════════════════════════════════════════════════════════" printf "%s\n" \ "[options]" \ "Architecture = auto" \ "SigLevel = Required DatabaseOptional" \ "LocalFileSigLevel = Optional" \ "" \ "[core]" \ "Include = /etc/pacman.d/mirrorlist" \ "" \ "[extra]" \ "Include = /etc/pacman.d/mirrorlist" \ "" \ "[multilib]" \ "Include = /etc/pacman.d/mirrorlist" \ > /etc/pacman.conf curl -fsSL "https://archlinux.org/mirrorlist/all/status/" \ | sed "s/^#Server/Server/" | head -20 > /etc/pacman.d/mirrorlist pacman -Syu --noconfirm echo "═══════════════════════════════════════════════════════════════" echo " Setting up CachyOS repo" echo "═══════════════════════════════════════════════════════════════" curl -fsSL https://mirror.cachyos.org/cachyos-keyring.pkg.tar.zst \ -o /tmp/cachyos-keyring.pkg.tar.zst pacman -U --noconfirm /tmp/cachyos-keyring.pkg.tar.zst || true printf "%s\n" \ "Server = https://mirror.cachyos.org/\$repo/\$arch" \ > /etc/pacman.d/cachyos-mirrorlist printf "\n[cachyos]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/cachyos-mirrorlist\n" \ >> /etc/pacman.conf pacman -Syu --noconfirm echo "═══════════════════════════════════════════════════════════════" echo " Setting up chaotic-aur repo" echo "═══════════════════════════════════════════════════════════════" pacman-key --recv-key FBA220DFC880C036 --keyserver keyserver.ubuntu.com pacman-key --lsign-key FBA220DFC880C036 || true printf "%s\n" \ "Server = https://chaotic.archlinux.org/\$repo/\$arch" \ > /etc/pacman.d/chaotic-mirrorlist printf "\n[chaotic-aur]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/chaotic-mirrorlist\n" \ >> /etc/pacman.conf pacman -Syu --noconfirm echo "═══════════════════════════════════════════════════════════════" echo " Checking packages.x86_64 against repos" echo " Allowed repos: cachyos, extra, multilib, chaotic-aur" echo "═══════════════════════════════════════════════════════════════" ALLOWED_REPOS="^(cachyos|extra|multilib|chaotic-aur)$" MISSING=() FOUND=0 TOTAL=0 while IFS= read -r pkg; do [[ -z "$pkg" || "$pkg" =~ ^# ]] && continue TOTAL=$((TOTAL + 1)) repo=$(pacman -Si "$pkg" 2>/dev/null | grep "^Repository" | awk "{print \$3}") if [[ -z "$repo" ]]; then echo "❌ MISSING: $pkg" MISSING+=("$pkg") elif [[ "$repo" =~ $ALLOWED_REPOS ]]; then FOUND=$((FOUND + 1)) else echo "⚠️ WRONG REPO: $pkg (found in: $repo)" MISSING+=("$pkg") fi done < packages.x86_64 echo "" echo "═══════════════════════════════════════════════════════════════" echo " Results: $FOUND / $TOTAL packages found in allowed repos" echo "═══════════════════════════════════════════════════════════════" if [[ ${#MISSING[@]} -gt 0 ]]; then echo "" echo "⚠️ ${#MISSING[@]} package(s) NOT in allowed repos:" for p in "${MISSING[@]}"; do echo " • $p" done echo "" echo "These packages must be in:" echo " • cachyos, extra, multilib, or chaotic-aur" echo " • OR pre-built in localrepo/" echo " • OR added to build-end4-deps.sh" exit 1 else echo "" echo "✅ All packages verified successfully!" fi '