.gitea/workflows/build-package.yml aktualisiert
This commit is contained in:
@@ -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..."
|
||||||
|
|
||||||
- name: Test Built 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 Package
|
||||||
run: |
|
run: |
|
||||||
sudo -u builder namcap *.pkg.tar.zst
|
cd "${{ matrix.package }}"
|
||||||
|
echo "🧪 Testing built packages..."
|
||||||
|
|
||||||
- name: Upload Package Artifacts
|
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 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
|
||||||
|
|||||||
Reference in New Issue
Block a user