.gitea/workflows/build-package.yml aktualisiert
This commit is contained in:
@@ -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
|
||||
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
|
||||
@@ -105,42 +185,29 @@ jobs:
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user