From a4dbec69a103450c7a19fcb374ef66e9c1d6daf9 Mon Sep 17 00:00:00 2001 From: Alvin Vilaythong Date: Tue, 15 Sep 2026 07:47:26 +1000 Subject: [PATCH] Use archlinux runner natively - no Docker needed --- .gitea/workflows/tests.yaml | 353 +++++++++++++++++++----------------- 1 file changed, 185 insertions(+), 168 deletions(-) diff --git a/.gitea/workflows/tests.yaml b/.gitea/workflows/tests.yaml index 05a695d..94d554e 100644 --- a/.gitea/workflows/tests.yaml +++ b/.gitea/workflows/tests.yaml @@ -7,190 +7,207 @@ on: jobs: tests: - runs-on: ubuntu-latest + runs-on: archlinux steps: - name: Checkout repo uses: actions/checkout@v4 - - name: Run all checks in Arch Linux + - name: Install prerequisites run: | - docker run --rm \ - -v "${{ github.workspace }}:/workspace" \ - -w /workspace \ - archlinux:latest \ - bash -eexc ' - set -e + pacman -Syu --noconfirm --needed shellcheck yamllint - echo "═══════════════════════════════════════════════════════════════" - echo " Installing prerequisites" - echo "═══════════════════════════════════════════════════════════════" - pacman -Syu --noconfirm --needed shellcheck yamllint + - name: Set up CachyOS repo + run: | + # Add CachyOS mirrorlist + printf '%s\n' \ + 'Server = https://mirror.cachyos.org/$repo/$arch' \ + > /etc/pacman.d/cachyos-mirrorlist - echo "═══════════════════════════════════════════════════════════════" - echo " Setting up CachyOS repo" - echo "═══════════════════════════════════════════════════════════════" + # Add CachyOS repo to pacman.conf + printf '\n[cachyos]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/cachyos-mirrorlist\n' \ + >> /etc/pacman.conf - # Add CachyOS mirrorlist - printf "%s\n" \ - "Server = https://mirror.cachyos.org/\$repo/\$arch" \ - > /etc/pacman.d/cachyos-mirrorlist + pacman -Syu --noconfirm - # Add CachyOS repo to pacman.conf - printf "\n[cachyos]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/cachyos-mirrorlist\n" \ - >> /etc/pacman.conf + - name: Set up chaotic-aur repo + run: | + # Add chaotic-aur mirrorlist + printf '%s\n' \ + 'Server = https://chaotic.archlinux.org/$repo/$arch' \ + > /etc/pacman.d/chaotic-mirrorlist - pacman -Syu --noconfirm + printf '\n[chaotic-aur]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/chaotic-mirrorlist\n' \ + >> /etc/pacman.conf - echo "═══════════════════════════════════════════════════════════════" - echo " Setting up chaotic-aur repo" - echo "═══════════════════════════════════════════════════════════════" - # Add chaotic-aur mirrorlist - printf "%s\n" \ - "Server = https://chaotic.archlinux.org/\$repo/\$arch" \ - > /etc/pacman.d/chaotic-mirrorlist + pacman -Syu --noconfirm - printf "\n[chaotic-aur]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/chaotic-mirrorlist\n" \ - >> /etc/pacman.conf + - name: Lint shell scripts with ShellCheck + run: | + echo "═══════════════════════════════════════════════════════════════" + echo " Running ShellCheck on all .sh files" + echo "═══════════════════════════════════════════════════════════════" - pacman -Syu --noconfirm + SH_FILES=$(find . -name '*.sh' -not -path './.git/*') + if [ -z "$SH_FILES" ]; then + echo "No shell scripts found." + exit 0 + fi - echo "═══════════════════════════════════════════════════════════════" - echo " Running ShellCheck on all .sh files" - echo "═══════════════════════════════════════════════════════════════" - SH_FILES=$(find . -name "*.sh" -not -path "./.git/*") - if [ -z "$SH_FILES" ]; then - echo "No shell scripts found." - else - FAILED=0 - for f in $SH_FILES; do - echo "" - echo "── Checking: $f" - if shellcheck -x -s bash "$f"; then - echo " ✅ $f passed" - else - echo " ❌ $f failed" - FAILED=1 - fi - done - if [ "$FAILED" -ne 0 ]; then - echo "" - echo "═══════════════════════════════════════════════════════════════" - echo " ❌ One or more shell scripts have syntax issues" - echo "═══════════════════════════════════════════════════════════════" - exit 1 - fi - echo "" - echo "═══════════════════════════════════════════════════════════════" - echo " ✅ All shell scripts passed ShellCheck" - echo "═══════════════════════════════════════════════════════════════" - fi + FAILED=0 + for f in $SH_FILES; do + echo "" + echo "── Checking: $f" + if shellcheck -x -s bash "$f"; then + echo " ✅ $f passed" + else + echo " ❌ $f failed" + FAILED=1 + fi + done - echo "═══════════════════════════════════════════════════════════════" - echo " Running yamllint on all YAML files" - echo "═══════════════════════════════════════════════════════════════" - YAML_FILES=$(find . -name "*.yml" -o -name "*.yaml" | grep -v ".git/") - if [ -z "$YAML_FILES" ]; then - echo "No YAML files found." - else - FAILED=0 - for f in $YAML_FILES; do - echo "" - echo "── Checking: $f" - if yamllint -d "{extends: relaxed, rules: {document-start: disable, line-length: disable, new-line-at-end-of-file: disable}}" "$f"; then - echo " ✅ $f passed" - else - echo " ❌ $f failed" - FAILED=1 - fi - done - if [ "$FAILED" -ne 0 ]; then - echo "" - echo "═══════════════════════════════════════════════════════════════" - echo " ❌ One or more YAML files have syntax issues" - echo "═══════════════════════════════════════════════════════════════" - exit 1 - fi - echo "" - echo "═══════════════════════════════════════════════════════════════" - echo " ✅ All YAML files passed yamllint" - echo "═══════════════════════════════════════════════════════════════" - fi + if [ "$FAILED" -ne 0 ]; then + echo "" + echo "═══════════════════════════════════════════════════════════════" + echo " ❌ One or more shell scripts have syntax issues" + echo "═══════════════════════════════════════════════════════════════" + exit 1 + fi - echo "═══════════════════════════════════════════════════════════════" - echo " Validating packages.x86_64 format" - echo "═══════════════════════════════════════════════════════════════" - if [ ! -f packages.x86_64 ]; then - echo "packages.x86_64 not found, skipping." - else - FAILED=0 - LINENUM=0 - while IFS= read -r line; do - LINENUM=$((LINENUM + 1)) - [[ -z "$line" || "$line" =~ ^# ]] && continue - if [[ ! "$line" =~ ^[a-zA-Z0-9._@+\-]+$ ]]; then - echo "❌ Line $LINENUM: invalid package name format: $line" - FAILED=1 - fi - if [[ "$line" =~ [[:space:]]$ ]]; then - echo "⚠️ Line $LINENUM: trailing whitespace: $line" - FAILED=1 - fi - done < packages.x86_64 - if [ "$FAILED" -ne 0 ]; then - echo "" - echo "═══════════════════════════════════════════════════════════════" - echo " ❌ packages.x86_64 has syntax issues" - echo "═══════════════════════════════════════════════════════════════" - exit 1 - fi - echo "" - echo "═══════════════════════════════════════════════════════════════" - echo " ✅ packages.x86_64 syntax is valid" - echo "═══════════════════════════════════════════════════════════════" - fi + echo "" + echo "═══════════════════════════════════════════════════════════════" + echo " ✅ All shell scripts passed ShellCheck" + echo "═══════════════════════════════════════════════════════════════" - 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 + - name: Lint YAML files with yamllint + run: | + echo "═══════════════════════════════════════════════════════════════" + echo " Running yamllint on all YAML files" + echo "═══════════════════════════════════════════════════════════════" - echo "" - echo "═══════════════════════════════════════════════════════════════" - echo " Results: $FOUND / $TOTAL packages found in allowed repos" - echo "═══════════════════════════════════════════════════════════════" + YAML_FILES=$(find . -name '*.yml' -o -name '*.yaml' | grep -v '.git/') + if [ -z "$YAML_FILES" ]; then + echo "No YAML files found." + exit 0 + fi - 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 - ' + FAILED=0 + for f in $YAML_FILES; do + echo "" + echo "── Checking: $f" + if yamllint -d "{extends: relaxed, rules: {document-start: disable, line-length: disable, new-line-at-end-of-file: disable}}" "$f"; then + echo " ✅ $f passed" + else + echo " ❌ $f failed" + FAILED=1 + fi + done + + if [ "$FAILED" -ne 0 ]; then + echo "" + echo "═══════════════════════════════════════════════════════════════" + echo " ❌ One or more YAML files have syntax issues" + echo "═══════════════════════════════════════════════════════════════" + exit 1 + fi + + echo "" + echo "═══════════════════════════════════════════════════════════════" + echo " ✅ All YAML files passed yamllint" + echo "═══════════════════════════════════════════════════════════════" + + - name: Validate packages.x86_64 syntax + run: | + echo "═══════════════════════════════════════════════════════════════" + echo " Validating packages.x86_64 format" + echo "═══════════════════════════════════════════════════════════════" + + if [ ! -f packages.x86_64 ]; then + echo "packages.x86_64 not found, skipping." + exit 0 + fi + + FAILED=0 + LINENUM=0 + while IFS= read -r line; do + LINENUM=$((LINENUM + 1)) + # Skip empty lines and comments + [[ -z "$line" || "$line" =~ ^# ]] && continue + + # Check for invalid characters + if [[ ! "$line" =~ ^[a-zA-Z0-9._@+\-]+$ ]]; then + echo "❌ Line $LINENUM: invalid package name format: '$line'" + FAILED=1 + fi + + # Check for trailing whitespace + if [[ "$line" =~ [[:space:]]$ ]]; then + echo "⚠️ Line $LINENUM: trailing whitespace: '$line'" + FAILED=1 + fi + done < packages.x86_64 + + if [ "$FAILED" -ne 0 ]; then + echo "" + echo "═══════════════════════════════════════════════════════════════" + echo " ❌ packages.x86_64 has syntax issues" + echo "═══════════════════════════════════════════════════════════════" + exit 1 + fi + + echo "" + echo "═══════════════════════════════════════════════════════════════" + echo " ✅ packages.x86_64 syntax is valid" + echo "═══════════════════════════════════════════════════════════════" + + - name: Check all packages + run: | + 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 + # Skip empty lines and comments + [[ -z "$pkg" || "$pkg" =~ ^# ]] && continue + TOTAL=$((TOTAL + 1)) + + # Query pacman for the package's repository + 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