.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:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -12,52 +12,96 @@ jobs:
|
|||||||
outputs:
|
outputs:
|
||||||
packages: ${{ steps.changes.outputs.packages }}
|
packages: ${{ steps.changes.outputs.packages }}
|
||||||
matrix: ${{ steps.changes.outputs.matrix }}
|
matrix: ${{ steps.changes.outputs.matrix }}
|
||||||
total: ${{ steps.changes.outputs.total }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout Repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
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
|
- name: Detect Changed Packages
|
||||||
id: changes
|
id: changes
|
||||||
run: |
|
run: |
|
||||||
|
echo "🔍 Detecting packages..."
|
||||||
|
|
||||||
# Alle verfügbaren Pakete finden
|
# Alle verfügbaren Pakete finden
|
||||||
all_packages=$(find . -name "PKGBUILD" -type f | xargs dirname | sed 's|^\./||' | sort)
|
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
|
if [ "${{ github.event_name }}" = "push" ] && [ "${{ github.event.before }}" != "0000000000000000000000000000000000000000" ]; then
|
||||||
changed_files=$(git diff --name-only ${{ github.event.before }}..${{ github.sha }})
|
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
|
for pkg in $all_packages; do
|
||||||
if echo "$changed_files" | grep -q "^$pkg/"; then
|
if echo "$changed_files" | grep -q "^$pkg/"; then
|
||||||
changed_packages="$changed_packages $pkg"
|
packages_to_build="$packages_to_build$pkg"$'\n'
|
||||||
fi
|
fi
|
||||||
done
|
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
|
else
|
||||||
# Bei PR oder initial commit: alle Pakete
|
|
||||||
packages_to_build="$all_packages"
|
packages_to_build="$all_packages"
|
||||||
fi
|
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
|
# JSON Arrays erstellen
|
||||||
if [ -n "$packages_to_build" ]; then
|
if [ -n "$packages_to_build" ]; then
|
||||||
packages_json=$(echo "$packages_to_build" | jq -R -s -c 'split("\n") | map(select(length > 0))')
|
# Korrekte JSON-Erstellung
|
||||||
matrix_json=$(echo "$packages_to_build" | jq -R -s -c 'split("\n") | map(select(length > 0)) | map({package: ., name: (. | split("/") | last)})')
|
packages_json="["
|
||||||
total=$(echo "$packages_to_build" | wc -l)
|
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
|
else
|
||||||
packages_json="[]"
|
packages_json="[]"
|
||||||
matrix_json="[]"
|
matrix_json="[]"
|
||||||
total="0"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Final JSON:"
|
||||||
|
echo "packages=$packages_json"
|
||||||
|
echo "matrix=$matrix_json"
|
||||||
|
|
||||||
echo "packages=$packages_json" >> $GITHUB_OUTPUT
|
echo "packages=$packages_json" >> $GITHUB_OUTPUT
|
||||||
echo "matrix=$matrix_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:
|
build-packages:
|
||||||
needs: detect-changes
|
needs: detect-changes
|
||||||
@@ -76,27 +120,63 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
echo "🔧 Setting up build environment..."
|
echo "🔧 Setting up build environment..."
|
||||||
pacman -Syu --noconfirm
|
pacman -Syu --noconfirm
|
||||||
pacman -S --noconfirm base-devel git nodejs npm namcap pacman-contrib sudo curl
|
pacman -S --noconfirm base-devel git nodejs npm namcap pacman-contrib sudo
|
||||||
|
|
||||||
# Builder user
|
|
||||||
useradd -m -G wheel builder
|
useradd -m -G wheel builder
|
||||||
echo 'builder ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
echo 'builder ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
|
||||||
echo 'builder:builder' | chpasswd
|
|
||||||
|
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
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
|
- name: Package Information
|
||||||
run: |
|
run: |
|
||||||
echo "📦 Building package: ${{ matrix.package }}"
|
package_dir="${{ matrix.package }}"
|
||||||
cd "${{ 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
|
source PKGBUILD
|
||||||
echo "Package name: $pkgname"
|
echo "Package name: $pkgname"
|
||||||
echo "Version: $pkgver-$pkgrel"
|
echo "Version: $pkgver-$pkgrel"
|
||||||
echo "Description: $pkgdesc"
|
echo "Description: $pkgdesc"
|
||||||
|
|
||||||
|
# Set ownership
|
||||||
chown -R builder:builder /workspace/cseyfferth/repo
|
chown -R builder:builder /workspace/cseyfferth/repo
|
||||||
|
|
||||||
- name: Validate PKGBUILD
|
- name: Validate PKGBUILD
|
||||||
@@ -104,43 +184,30 @@ jobs:
|
|||||||
cd "${{ matrix.package }}"
|
cd "${{ matrix.package }}"
|
||||||
echo "🔍 Validating PKGBUILD..."
|
echo "🔍 Validating PKGBUILD..."
|
||||||
sudo -u builder namcap PKGBUILD
|
sudo -u builder namcap PKGBUILD
|
||||||
|
|
||||||
# Dependency check
|
|
||||||
sudo -u builder makepkg --printsrcinfo > .SRCINFO
|
|
||||||
cat .SRCINFO
|
|
||||||
|
|
||||||
- name: Build Package
|
- name: Build Package
|
||||||
run: |
|
run: |
|
||||||
cd "${{ matrix.package }}"
|
cd "${{ matrix.package }}"
|
||||||
echo "🔨 Building package..."
|
echo "🔨 Building package..."
|
||||||
|
sudo -u builder makepkg -s --noconfirm --needed
|
||||||
|
|
||||||
# Build mit verbose output
|
echo "✅ Built packages:"
|
||||||
sudo -u builder makepkg -s --noconfirm --needed -L
|
|
||||||
|
|
||||||
# Zeige gebaute Pakete
|
|
||||||
echo "✅ Successfully built packages:"
|
|
||||||
ls -la *.pkg.tar.zst
|
ls -la *.pkg.tar.zst
|
||||||
|
|
||||||
- name: Test Package
|
- name: Test Package
|
||||||
run: |
|
run: |
|
||||||
cd "${{ matrix.package }}"
|
cd "${{ matrix.package }}"
|
||||||
echo "🧪 Testing built packages..."
|
echo "🧪 Testing packages..."
|
||||||
|
|
||||||
for pkg in *.pkg.tar.zst; do
|
for pkg in *.pkg.tar.zst; do
|
||||||
if [ -f "$pkg" ]; then
|
if [ -f "$pkg" ]; then
|
||||||
echo "Testing $pkg..."
|
echo "Testing $pkg..."
|
||||||
sudo -u builder namcap "$pkg" || echo "⚠️ namcap warnings for $pkg"
|
sudo -u builder namcap "$pkg" || true
|
||||||
|
|
||||||
# Package info
|
|
||||||
sudo -u builder pacman -Qip "$pkg"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.name }}-${{ github.sha }}
|
name: ${{ matrix.package }}-package
|
||||||
path: |
|
path: ${{ matrix.package }}/*.pkg.tar.zst
|
||||||
${{ matrix.package }}/*.pkg.tar.zst
|
|
||||||
${{ matrix.package }}/.SRCINFO
|
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|||||||
Reference in New Issue
Block a user