.gitea/workflows/build-package.yml aktualisiert
All checks were successful
Build Arch Packages (Enhanced) / detect-changes (push) Successful in 4s
Build Arch Packages (Enhanced) / build-packages (push) Has been skipped

This commit is contained in:
2025-08-29 15:41:53 +02:00
parent 5f787b376f
commit 37b0dbcfa9

View File

@@ -1,4 +1,4 @@
name: Build Arch Package name: Build Arch Packages (Enhanced)
on: on:
push: push:
@@ -7,47 +7,140 @@ on:
branches: [ main, master ] branches: [ main, master ]
jobs: jobs:
build-package: detect-changes:
runs-on: ubuntu-latest
outputs:
packages: ${{ steps.changes.outputs.packages }}
matrix: ${{ steps.changes.outputs.matrix }}
total: ${{ steps.changes.outputs.total }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Detect Changed Packages
id: changes
run: |
# Alle verfügbaren Pakete finden
all_packages=$(find . -name "PKGBUILD" -type f | xargs dirname | sed 's|^\./||' | sort)
# Bei Push: nur geänderte Pakete
if [ "${{ github.event_name }}" = "push" ] && [ "${{ github.event.before }}" != "0000000000000000000000000000000000000000" ]; then
changed_files=$(git diff --name-only ${{ github.event.before }}..${{ github.sha }})
changed_packages=""
for pkg in $all_packages; do
if echo "$changed_files" | grep -q "^$pkg/"; then
changed_packages="$changed_packages $pkg"
fi
done
packages_to_build=$(echo $changed_packages | tr ' ' '\n' | sort | uniq)
else
# Bei PR oder initial commit: alle Pakete
packages_to_build="$all_packages"
fi
# 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)
else
packages_json="[]"
matrix_json="[]"
total="0"
fi
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
if: needs.detect-changes.outputs.packages != '[]'
strategy:
matrix:
include: ${{ fromJson(needs.detect-changes.outputs.matrix) }}
fail-fast: false
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
image: archlinux:base-devel # oder verwende ein custom image image: archlinux:latest
steps: steps:
- name: Install Node.js for Actions - name: Setup Build Environment
run: | run: |
echo "🔧 Setting up build environment..."
pacman -Syu --noconfirm pacman -Syu --noconfirm
pacman -S --noconfirm nodejs npm git pacman -S --noconfirm base-devel git nodejs npm namcap pacman-contrib sudo curl
# Builder user
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 uses: actions/checkout@v4
- name: Setup Build Environment - name: Package Information
run: | run: |
# Build-Tools sind bereits in base-devel enthalten echo "📦 Building package: ${{ matrix.package }}"
pacman -S --noconfirm namcap pacman-contrib sudo cd "${{ matrix.package }}"
# Build-User erstellen # PKGBUILD info extrahieren
useradd -m -G wheel builder source PKGBUILD
echo 'builder ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers echo "Package name: $pkgname"
echo "Version: $pkgver-$pkgrel"
echo "Description: $pkgdesc"
# Ownership für builder setzen chown -R builder:builder /workspace/cseyfferth/repo
chown -R builder:builder .
- name: Validate PKGBUILD - name: Validate PKGBUILD
run: | run: |
cd "${{ matrix.package }}"
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: |
sudo -u builder makepkg -s --noconfirm --needed cd "${{ matrix.package }}"
echo "🔨 Building package..."
# Build mit verbose output
sudo -u builder makepkg -s --noconfirm --needed -L
# Zeige gebaute Pakete
echo "✅ Successfully built packages:"
ls -la *.pkg.tar.zst
- name: Test Built Package - name: Test Package
run: | run: |
sudo -u builder namcap *.pkg.tar.zst cd "${{ matrix.package }}"
echo "🧪 Testing built 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"
fi
done
- name: Upload Package Artifacts - name: Upload Artifacts
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: arch-packages name: ${{ matrix.name }}-${{ github.sha }}
path: '*.pkg.tar.zst' path: |
${{ matrix.package }}/*.pkg.tar.zst
${{ matrix.package }}/.SRCINFO
retention-days: 30 retention-days: 30