#!/usr/bin/env bash # Deklarix — .deb-Pakete bauen (amd64 + arm64) # # Verwendung: # ./scripts/build.sh [version] # Beide Architekturen # ./scripts/build.sh [version] amd64 # Nur amd64 # ./scripts/build.sh [version] arm64 # Nur arm64 # # Ausgabe: dist/deklarix__.deb set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" PACKAGING_DIR="$REPO_DIR/packaging" BUILD_DIR="$REPO_DIR/dist/build" VERSION="${1:-0.0.1}" ARCH_FILTER="${2:-both}" GRN='\033[0;32m'; BLD='\033[1m'; NC='\033[0m' log() { echo -e "${GRN}[build]${NC} $*"; } export PATH=$PATH:/usr/local/go/bin command -v go >/dev/null || { echo "Go nicht gefunden — PATH: $PATH"; exit 1; } command -v dpkg-deb >/dev/null || { echo "dpkg-deb nicht gefunden"; exit 1; } log "Version: $VERSION | Go: $(go version)" ARCHS=() case "$ARCH_FILTER" in amd64) ARCHS=("amd64") ;; arm64) ARCHS=("arm64") ;; *) ARCHS=("amd64" "arm64") ;; esac rm -rf "$BUILD_DIR" mkdir -p "$REPO_DIR/dist" for ARCH in "${ARCHS[@]}"; do DEB_NAME="deklarix_${VERSION}_${ARCH}" DEB_DIR="$BUILD_DIR/$DEB_NAME" log "Baue Binary ($ARCH)..." mkdir -p "$DEB_DIR/DEBIAN" \ "$DEB_DIR/usr/bin" \ "$DEB_DIR/etc/systemd/system" \ "$DEB_DIR/etc/deklarix" CGO_ENABLED=0 GOARCH=$ARCH GOOS=linux go build \ -trimpath -ldflags="-X main.Version=${VERSION} -s -w" \ -o "$DEB_DIR/usr/bin/deklarix" \ ./cmd/deklarix/ chmod 755 "$DEB_DIR/usr/bin/deklarix" log "Stelle Paket zusammen ($ARCH)..." sed "s/^Version: VERSION/Version: $VERSION/; s/^Architecture: ARCH/Architecture: $ARCH/" \ "$PACKAGING_DIR/DEBIAN/control.tmpl" > "$DEB_DIR/DEBIAN/control" cp "$PACKAGING_DIR/DEBIAN/postinst" "$DEB_DIR/DEBIAN/postinst" cp "$PACKAGING_DIR/DEBIAN/prerm" "$DEB_DIR/DEBIAN/prerm" cp "$PACKAGING_DIR/DEBIAN/conffiles" "$DEB_DIR/DEBIAN/conffiles" chmod 755 "$DEB_DIR/DEBIAN/postinst" "$DEB_DIR/DEBIAN/prerm" cp "$PACKAGING_DIR/etc/systemd/system/deklarix.service" "$DEB_DIR/etc/systemd/system/" cp "$PACKAGING_DIR/etc/deklarix/deklarix.env.example" "$DEB_DIR/etc/deklarix/" dpkg-deb --build --root-owner-group "$DEB_DIR" "$REPO_DIR/dist/$DEB_NAME.deb" log "$ARCH fertig: dist/$DEB_NAME.deb ($(du -sh "$REPO_DIR/dist/$DEB_NAME.deb" | cut -f1))" done rm -rf "$BUILD_DIR" log "Build abgeschlossen ✓"