#!/bin/bash # Build RPM Package for RHEL/CentOS/Fedora # Run on: RHEL 8/9, CentOS 8/9, Fedora 38+ # Designed for native Gitea Actions runner execution set -e echo "=== Linux Patch API - RPM Build Script ===" echo "" # Check if running on RPM-based system if ! command -v rpmbuild &> /dev/null; then echo "Installing RPM build tools..." if command -v dnf &> /dev/null; then dnf install -y rpm-build cargo rust gcc systemd-devel elif command -v yum &> /dev/null; then yum install -y rpm-build cargo rust gcc systemd-devel else echo "Error: Cannot install rpm-build. Please install manually." exit 1 fi fi # Get version from Cargo.toml VERSION=$(grep '^version' Cargo.toml | head -1 | sed 's/.*=.*"\([^"]*\)".*/\1/') echo "Building version: $VERSION" # Setup RPM build directory structure mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} # Create source tarball (required by %autosetup in spec file) echo "Creating source tarball..." TMPDIR=$(mktemp -d) mkdir -p "$TMPDIR/linux-patch-api-${VERSION}" # Copy files excluding unnecessary directories cp -r . "$TMPDIR/linux-patch-api-${VERSION}/" # Remove unnecessary directories from tarball rm -rf "$TMPDIR/linux-patch-api-${VERSION}/target" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/.git" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/releases" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/.github" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/debian" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/arch-package" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/.abuild" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/apk-package" rm -rf "$TMPDIR/linux-patch-api-${VERSION}/.a0proj" tar -czf ~/rpmbuild/SOURCES/linux-patch-api-${VERSION}.tar.gz -C "$TMPDIR" "linux-patch-api-${VERSION}" rm -rf "$TMPDIR" # Prepare spec file with dynamic version echo "Preparing spec file..." sed "s/VERSION_PLACEHOLDER/$VERSION/" linux-patch-api.spec > ~/rpmbuild/SPECS/linux-patch-api.spec # Build RPM echo "Building RPM package..." rpmbuild -ba ~/rpmbuild/SPECS/linux-patch-api.spec # Copy to releases directory echo "" echo "Copying package to releases/..." mkdir -p releases cp ~/rpmbuild/RPMS/x86_64/*.rpm releases/ echo "" echo "=== Build Complete ===" echo "Package: releases/linux-patch-api-*.rpm" echo "" echo "Install with:" echo " dnf install -y ./releases/linux-patch-api-*.rpm" echo " # or" echo " yum install -y ./releases/linux-patch-api-*.rpm"