#!/bin/bash # Omarchy Repository Package Builder - Docker Isolated # Builds packages in Docker without affecting the host system set -e # Source common functions SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/../lib/common.sh" # Repository paths REPO_DIR="/home/ryan/Dev/omarchy-repo" ARCH_DIR="$REPO_DIR/x86_64" BUILD_DIR="$REPO_DIR/build" # Create directories if they don't exist mkdir -p "$ARCH_DIR" "$BUILD_DIR" # Function to build Docker image build_docker_image() { print_info "Building Docker image..." # Check if Dockerfile exists if [[ ! -f "$BUILD_DIR/Dockerfile" ]]; then print_error "Dockerfile not found at $BUILD_DIR/Dockerfile" exit 1 fi # Build image cd "$BUILD_DIR" docker build -t omarchy-builder . || { print_error "Failed to build Docker image" exit 1 } print_success "Docker image built successfully!" } # Function to run build in Docker run_docker_build() { print_info "Running package build in Docker..." # Create src directory if it doesn't exist mkdir -p "$REPO_DIR/src" # Build docker run command with options DOCKER_ENV="" if [[ "$SKIP_PGP" == true ]]; then print_warning "Skipping PGP signature verification" DOCKER_ENV="$DOCKER_ENV -e SKIP_PGP=true" fi if [[ "$FORCE_REBUILD" == true ]]; then print_warning "Forcing rebuild of all packages" DOCKER_ENV="$DOCKER_ENV -e FORCE_REBUILD=true" fi if [[ -n "$ONLY_PACKAGES" ]]; then print_warning "Filtering packages: $ONLY_PACKAGES" DOCKER_ENV="$DOCKER_ENV -e ONLY_PACKAGES='$ONLY_PACKAGES'" fi docker run --rm \ $DOCKER_ENV \ -v "$ARCH_DIR:/output" \ -v "$ARCH_DIR:/var/cache/pacman/pkg" \ -v "$REPO_DIR/src:/src" \ -v "$BUILD_DIR:/build:ro" \ omarchy-builder # Check exit code but don't fail immediately BUILD_EXIT_CODE=$? if [[ $BUILD_EXIT_CODE -ne 0 ]]; then print_warning "Some packages failed (see summary above)" return $BUILD_EXIT_CODE fi print_success "Package build complete!" } # Function to clean Docker resources clean_docker() { print_info "Cleaning Docker resources..." # Remove image docker rmi omarchy-builder 2>/dev/null || true # Nothing to clean for packages anymore print_success "Cleanup complete!" } # Main execution main() { print_header "Omarchy Repository Docker Builder" # Check for Docker if ! command -v docker &> /dev/null; then print_error "Docker is not installed" print_warning "Please install Docker first:" echo " sudo pacman -S docker" echo " sudo systemctl start docker" echo " sudo usermod -aG docker $USER" exit 1 fi # Check if Docker daemon is running if ! docker info &> /dev/null; then print_error "Docker daemon is not running" print_warning "Start Docker with: sudo systemctl start docker" exit 1 fi # Parse command line arguments CLEAN_ONLY=false KEEP_IMAGE=false ONLY_PACKAGES="" SKIP_PGP=false FORCE_REBUILD=false while [[ $# -gt 0 ]]; do case $1 in --clean) CLEAN_ONLY=true shift ;; --keep-image) KEEP_IMAGE=true shift ;; --only) ONLY_PACKAGES="$2" shift 2 ;; --skip-pgp) SKIP_PGP=true shift ;; --force) FORCE_REBUILD=true shift ;; -h|--help) echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" echo " --clean Clean Docker resources only" echo " --keep-image Keep Docker image after build" echo " --only \"pkg1 pkg2\" Only build specific packages" echo " --skip-pgp Skip PGP signature verification" echo " --force Force rebuild even if no updates" echo " -h, --help Show this help message" echo "" echo "Examples:" echo " $0 # Build all packages" echo " $0 --only \"yay walker-bin\" # Only build yay and walker-bin" echo " $0 --skip-pgp # Build without PGP checks" echo "" echo "This script builds all packages listed in:" echo " - build/packages/*.packages files" echo "" echo "All builds happen inside a Docker container." echo "No packages are installed on your host system." exit 0 ;; *) print_error "Unknown option: $1" exit 1 ;; esac done # Execute based on options if [[ "$CLEAN_ONLY" == true ]]; then clean_docker else # Build packages build_docker_image run_docker_build BUILD_RESULT=$? # Clean up unless keeping image if [[ "$KEEP_IMAGE" != true ]]; then clean_docker else print_warning "Docker image kept: omarchy-builder" print_warning "Remove with: docker rmi omarchy-builder" fi # Show results echo "" print_info "Final Summary:" local count=$(ls -1 "$ARCH_DIR"/*.pkg.tar.* 2>/dev/null | wc -l) if [[ $count -gt 0 ]]; then print_step "Total packages in repository: $count" print_step "Packages are in: $ARCH_DIR" if [[ $BUILD_RESULT -eq 0 ]]; then print_success "All requested packages processed successfully" else print_warning "Some packages failed (check output above)" fi echo "" print_warning "Next step: Run ./scripts/update-repo.sh" else print_warning "No packages in repository" print_warning "Check your package lists" fi # Exit with the build result code exit $BUILD_RESULT fi } # Run main function main "$@"