From 843529d12423321e1fc57f403af0bbc9786036f6 Mon Sep 17 00:00:00 2001 From: Alvin Vilaythong Date: Mon, 14 Sep 2026 22:29:47 +1000 Subject: [PATCH] Fix tests: checkout on host, Arch work in docker run (Gitea runner Docker mode ENOTCONN bug) --- .gitea/workflows/tests.yaml | 406 +++++++++++++++++------------------- 1 file changed, 191 insertions(+), 215 deletions(-) diff --git a/.gitea/workflows/tests.yaml b/.gitea/workflows/tests.yaml index ad8dc22..8f25a6a 100644 --- a/.gitea/workflows/tests.yaml +++ b/.gitea/workflows/tests.yaml @@ -7,241 +7,217 @@ on: jobs: tests: - runs-on: archlinux + runs-on: ubuntu-latest steps: - name: Checkout repo uses: actions/checkout@v4 - - name: Install prerequisites + - name: Run all checks in Arch Linux run: | - pacman -Syu --noconfirm --needed pacman pacman-contrib curl gnupg shellcheck python-yamllint + docker run --rm \ + -v "${{ github.workspace }}:/workspace" \ + -w /workspace \ + archlinux:latest \ + bash -eexc ' + set -e - - name: Set up official repos (extra, multilib) - run: | - 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 + echo "═══════════════════════════════════════════════════════════════" + echo " Installing prerequisites" + echo "═══════════════════════════════════════════════════════════════" + pacman -Syu --noconfirm --needed pacman pacman-contrib curl gnupg shellcheck python-yamllint - # Generate a basic mirrorlist - curl -fsSL "https://archlinux.org/mirrorlist/all/status/" \ - | sed 's/^#Server/Server/' | head -20 > /etc/pacman.d/mirrorlist + 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 - pacman -Syu --noconfirm + curl -fsSL "https://archlinux.org/mirrorlist/all/status/" \ + | sed "s/^#Server/Server/" | head -20 > /etc/pacman.d/mirrorlist - - name: Set up CachyOS repo - run: | - # Import CachyOS keyring - 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 + pacman -Syu --noconfirm - # 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 "═══════════════════════════════════════════════════════════════" + 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 - # Add CachyOS repo to pacman.conf - printf '\n[cachyos]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/cachyos-mirrorlist\n' \ - >> /etc/pacman.conf + printf "%s\n" \ + "Server = https://mirror.cachyos.org/\$repo/\$arch" \ + > /etc/pacman.d/cachyos-mirrorlist - pacman -Syu --noconfirm + printf "\n[cachyos]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/cachyos-mirrorlist\n" \ + >> /etc/pacman.conf - - name: Set up chaotic-aur repo - run: | - # Import chaotic-aur keyring - pacman-key --recv-key FBA220DFC880C036 --keyserver keyserver.ubuntu.com - pacman-key --lsign-key FBA220DFC880C036 || true + pacman -Syu --noconfirm - # Add chaotic-aur mirrorlist - printf '%s\n' \ - 'Server = https://chaotic.archlinux.org/$repo/$arch' \ - > /etc/pacman.d/chaotic-mirrorlist + echo "═══════════════════════════════════════════════════════════════" + echo " Setting up chaotic-aur repo" + echo "═══════════════════════════════════════════════════════════════" + pacman-key --recv-key FBA220DFC880C036 --keyserver keyserver.ubuntu.com + pacman-key --lsign-key FBA220DFC880C036 || true - # Add chaotic-aur repo to pacman.conf - printf '\n[chaotic-aur]\nSigLevel = Optional TrustAll\nInclude = /etc/pacman.d/chaotic-mirrorlist\n' \ - >> /etc/pacman.conf + 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 - - 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 \ No newline at end of file + 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 + '