From a100ae4ac0bec8fe9f6ff7c9276d0402cd8af6e8 Mon Sep 17 00:00:00 2001 From: Christof Seyfferth Date: Fri, 29 Aug 2025 15:45:32 +0200 Subject: [PATCH] .gitea/workflows/build-package.yml aktualisiert --- .gitea/workflows/build-package.yml | 153 +++++++++++++++++++++-------- 1 file changed, 110 insertions(+), 43 deletions(-) diff --git a/.gitea/workflows/build-package.yml b/.gitea/workflows/build-package.yml index 37b027b..f670e80 100644 --- a/.gitea/workflows/build-package.yml +++ b/.gitea/workflows/build-package.yml @@ -1,4 +1,4 @@ -name: Build Arch Packages (Enhanced) +name: Build Arch Packages on: push: @@ -12,52 +12,96 @@ jobs: outputs: packages: ${{ steps.changes.outputs.packages }} matrix: ${{ steps.changes.outputs.matrix }} - total: ${{ steps.changes.outputs.total }} steps: - - uses: actions/checkout@v4 + - name: Checkout Repository + uses: actions/checkout@v4 with: fetch-depth: 0 + - name: Debug Repository Structure + run: | + echo "📁 Repository structure:" + find . -name "PKGBUILD" -type f | head -20 + echo "" + ls -la + - name: Detect Changed Packages id: changes run: | + echo "🔍 Detecting packages..." + # Alle verfügbaren Pakete finden all_packages=$(find . -name "PKGBUILD" -type f | xargs dirname | sed 's|^\./||' | sort) - # Bei Push: nur geänderte Pakete + echo "Found packages:" + echo "$all_packages" + + if [ -z "$all_packages" ]; then + echo "❌ No PKGBUILD files found!" + echo "packages=[]" >> $GITHUB_OUTPUT + echo "matrix=[]" >> $GITHUB_OUTPUT + exit 0 + fi + + # Bei Push: nur geänderte Pakete (vereinfacht) if [ "${{ github.event_name }}" = "push" ] && [ "${{ github.event.before }}" != "0000000000000000000000000000000000000000" ]; then changed_files=$(git diff --name-only ${{ github.event.before }}..${{ github.sha }}) - changed_packages="" + echo "Changed files: $changed_files" + packages_to_build="" for pkg in $all_packages; do if echo "$changed_files" | grep -q "^$pkg/"; then - changed_packages="$changed_packages $pkg" + packages_to_build="$packages_to_build$pkg"$'\n' fi done - packages_to_build=$(echo $changed_packages | tr ' ' '\n' | sort | uniq) + # Falls keine Änderungen in Paketen, trotzdem alle bauen (für ersten Test) + if [ -z "$packages_to_build" ]; then + packages_to_build="$all_packages" + fi else - # Bei PR oder initial commit: alle Pakete packages_to_build="$all_packages" fi + # Leere Zeilen entfernen + packages_to_build=$(echo "$packages_to_build" | grep -v '^$' | sort | uniq) + + echo "Packages to build:" + echo "$packages_to_build" + # JSON Arrays erstellen if [ -n "$packages_to_build" ]; then - packages_json=$(echo "$packages_to_build" | jq -R -s -c 'split("\n") | map(select(length > 0))') - matrix_json=$(echo "$packages_to_build" | jq -R -s -c 'split("\n") | map(select(length > 0)) | map({package: ., name: (. | split("/") | last)})') - total=$(echo "$packages_to_build" | wc -l) + # Korrekte JSON-Erstellung + packages_json="[" + matrix_json="[" + first=true + + while IFS= read -r pkg; do + if [ -n "$pkg" ]; then + if [ "$first" = true ]; then + first=false + else + packages_json="$packages_json," + matrix_json="$matrix_json," + fi + packages_json="$packages_json\"$pkg\"" + matrix_json="$matrix_json{\"package\":\"$pkg\"}" + fi + done <<< "$packages_to_build" + + packages_json="$packages_json]" + matrix_json="$matrix_json]" else packages_json="[]" matrix_json="[]" - total="0" fi + echo "Final JSON:" + echo "packages=$packages_json" + echo "matrix=$matrix_json" + echo "packages=$packages_json" >> $GITHUB_OUTPUT echo "matrix=$matrix_json" >> $GITHUB_OUTPUT - echo "total=$total" >> $GITHUB_OUTPUT - - echo "📦 Found $total package(s) to build:" - echo "$packages_to_build" build-packages: needs: detect-changes @@ -76,27 +120,63 @@ jobs: run: | echo "🔧 Setting up build environment..." pacman -Syu --noconfirm - pacman -S --noconfirm base-devel git nodejs npm namcap pacman-contrib sudo curl - - # Builder user + pacman -S --noconfirm base-devel git nodejs npm namcap pacman-contrib sudo useradd -m -G wheel builder echo 'builder ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers - echo 'builder:builder' | chpasswd - - name: Checkout Repository + - name: Checkout Repository uses: actions/checkout@v4 + - name: Debug Matrix Variables + run: | + echo "🐛 Debug Matrix Variables:" + echo "matrix.package: '${{ matrix.package }}'" + echo "Current directory: $(pwd)" + echo "Directory contents:" + ls -la + + if [ -n "${{ matrix.package }}" ]; then + echo "Target package directory: ${{ matrix.package }}" + if [ -d "${{ matrix.package }}" ]; then + echo "✅ Directory exists" + ls -la "${{ matrix.package }}" + else + echo "❌ Directory does not exist" + fi + else + echo "❌ matrix.package is empty!" + exit 1 + fi + - name: Package Information run: | - echo "📦 Building package: ${{ matrix.package }}" - cd "${{ matrix.package }}" + package_dir="${{ matrix.package }}" - # PKGBUILD info extrahieren + if [ -z "$package_dir" ]; then + echo "❌ Package directory is empty" + exit 1 + fi + + if [ ! -d "$package_dir" ]; then + echo "❌ Package directory '$package_dir' does not exist" + exit 1 + fi + + echo "📦 Building package: $package_dir" + cd "$package_dir" + + if [ ! -f "PKGBUILD" ]; then + echo "❌ No PKGBUILD found in $package_dir" + exit 1 + fi + + # PKGBUILD info source PKGBUILD echo "Package name: $pkgname" echo "Version: $pkgver-$pkgrel" echo "Description: $pkgdesc" + # Set ownership chown -R builder:builder /workspace/cseyfferth/repo - name: Validate PKGBUILD @@ -104,43 +184,30 @@ jobs: cd "${{ matrix.package }}" echo "🔍 Validating PKGBUILD..." sudo -u builder namcap PKGBUILD - - # Dependency check - sudo -u builder makepkg --printsrcinfo > .SRCINFO - cat .SRCINFO - name: Build Package run: | cd "${{ matrix.package }}" echo "🔨 Building package..." + sudo -u builder makepkg -s --noconfirm --needed - # Build mit verbose output - sudo -u builder makepkg -s --noconfirm --needed -L - - # Zeige gebaute Pakete - echo "✅ Successfully built packages:" + echo "✅ Built packages:" ls -la *.pkg.tar.zst - name: Test Package run: | cd "${{ matrix.package }}" - echo "🧪 Testing built packages..." - + echo "🧪 Testing packages..." for pkg in *.pkg.tar.zst; do if [ -f "$pkg" ]; then echo "Testing $pkg..." - sudo -u builder namcap "$pkg" || echo "⚠️ namcap warnings for $pkg" - - # Package info - sudo -u builder pacman -Qip "$pkg" + sudo -u builder namcap "$pkg" || true fi done - name: Upload Artifacts uses: actions/upload-artifact@v4 with: - name: ${{ matrix.name }}-${{ github.sha }} - path: | - ${{ matrix.package }}/*.pkg.tar.zst - ${{ matrix.package }}/.SRCINFO + name: ${{ matrix.package }}-package + path: ${{ matrix.package }}/*.pkg.tar.zst retention-days: 30