From fde981aa954d97dffc5e961401f937dde21840da Mon Sep 17 00:00:00 2001 From: Ryan Hughes Date: Mon, 27 Oct 2025 00:23:59 -0400 Subject: [PATCH] Remove ruby builds since we're not doing that --- bin/build-ruby | 293 ------------------------------------------ build/Dockerfile.ruby | 33 ----- 2 files changed, 326 deletions(-) delete mode 100755 bin/build-ruby delete mode 100644 build/Dockerfile.ruby diff --git a/bin/build-ruby b/bin/build-ruby deleted file mode 100755 index 7f0e005..0000000 --- a/bin/build-ruby +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/bash - -# Abort if anything fails -set -e - -# Source common functions -BUILD_ROOT=$(realpath "${BASH_SOURCE[0]%/*}/..") -source "$BUILD_ROOT/lib/message-helpers.sh" - -# Configuration -BUILD_DIR="$BUILD_ROOT/build" -OUTPUT_DIR="$BUILD_ROOT/output/ruby" - -# Default values -ARCHITECTURES=("x86_64") -RUBY_VERSIONS=() -RAILS_VERSIONS=("8.0.2.1") # Current stable Rails version - -# Function to fetch last N Ruby releases -fetch_ruby_releases() { - local count=$1 - print_info "Fetching last $count Ruby releases..." - - # Fetch releases from Ruby's release page - curl -s https://api.github.com/repos/ruby/ruby/releases | \ - jq -r '.[].tag_name' | \ - grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | \ - sed 's/^v//' | \ - head -n "$count" -} - -# Parse command line arguments -while [[ $# -gt 0 ]]; do - case $1 in - --ruby) - IFS=',' read -ra RUBY_VERSIONS <<< "$2" - shift 2 - ;; - --rails) - IFS=',' read -ra RAILS_VERSIONS <<< "$2" - shift 2 - ;; - --arch) - IFS=',' read -ra ARCHITECTURES <<< "$2" - shift 2 - ;; - --last) - # Fetch last N Ruby releases - RUBY_VERSIONS=($(fetch_ruby_releases "$2")) - shift 2 - ;; - -h | --help) - echo "Usage: $0 [OPTIONS]" - echo "" - echo "Options:" - echo " --ruby Comma-separated Ruby versions (e.g., 3.4.5,3.3.0,edge)" - echo " --rails Comma-separated Rails versions (e.g., 8.0.2.1,7.2.0,edge)" - echo " --arch Comma-separated architectures (e.g., x86_64,aarch64)" - echo " --last Build last N Ruby releases" - echo " -h, --help Show this help message" - echo "" - echo "Examples:" - echo " $0 --ruby 3.4.5,edge --rails 8.0.2.1" - echo " $0 --last 10 --rails 8.0.2.1" - echo " $0 --ruby 3.4.5 --rails 8.0.2.1,7.2.0 --arch x86_64,aarch64" - echo "" - echo "Default behavior:" - echo " - Builds Ruby 3.4.5, edge, and last 10 releases" - echo " - Uses Rails 8.0.2.1" - echo " - Builds for x86_64 architecture" - exit 0 - ;; - *) - print_error "Unknown option: $1" - exit 1 - ;; - esac -done - -# If no Ruby versions specified, use defaults -if [[ ${#RUBY_VERSIONS[@]} -eq 0 ]]; then - print_info "No Ruby versions specified, using defaults..." - # Get last 10 releases - LAST_10=($(fetch_ruby_releases 10)) - # Combine with specific versions - RUBY_VERSIONS=("3.4.5" "edge" "${LAST_10[@]}") - # Remove duplicates - RUBY_VERSIONS=($(echo "${RUBY_VERSIONS[@]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')) -fi - -print_header "Ruby Bundle Builder" -print_info "Ruby versions: ${RUBY_VERSIONS[*]}" -print_info "Rails versions: ${RAILS_VERSIONS[*]}" -print_info "Architectures: ${ARCHITECTURES[*]}" - -# Check for Docker -if ! command -v docker &>/dev/null; then - print_error "Docker is not installed" - 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 - -# Setup QEMU for multi-platform builds if aarch64 is requested -if [[ " ${ARCHITECTURES[@]} " =~ " aarch64 " ]]; then - print_info "Setting up QEMU for aarch64 emulation..." - - # Install QEMU user static for cross-platform emulation - if ! docker run --rm --privileged multiarch/qemu-user-static --reset -p yes; then - print_warning "Failed to setup QEMU, aarch64 builds may fail" - print_info "You may need to install qemu-user-static on your host" - else - print_success "QEMU emulation enabled for multi-arch builds" - fi -fi - -# Create output directories -for arch in "${ARCHITECTURES[@]}"; do - mkdir -p "$OUTPUT_DIR/$arch" -done - -# Build the Docker image using buildx for multi-platform support -print_info "Building Docker image..." - -# Determine platforms needed -PLATFORMS="" -for arch in "${ARCHITECTURES[@]}"; do - case "$arch" in - x86_64) - [[ -n "$PLATFORMS" ]] && PLATFORMS+="," - PLATFORMS+="linux/amd64" - ;; - aarch64) - [[ -n "$PLATFORMS" ]] && PLATFORMS+="," - PLATFORMS+="linux/arm64" - ;; - *) - print_error "Unsupported architecture: $arch" - continue - ;; - esac -done - -# Use buildx to build multi-platform image -if command -v docker buildx &>/dev/null; then - # Ensure we have a builder instance - BUILDER_NAME="ruby-multiarch" - if ! docker buildx ls | grep -q "$BUILDER_NAME"; then - print_info "Creating buildx builder instance..." - docker buildx create --name "$BUILDER_NAME" --driver docker-container --use - else - docker buildx use "$BUILDER_NAME" - fi - - print_info "Building multi-platform image for: $PLATFORMS" - - # Build for all platforms at once - # We can't use --load with multiple platforms, so we build separately for each - for arch in "${ARCHITECTURES[@]}"; do - case "$arch" in - x86_64) - PLATFORM="linux/amd64" - ;; - aarch64) - PLATFORM="linux/arm64" - ;; - esac - - print_info "Building for $arch ($PLATFORM)..." - if ! docker buildx build \ - --platform "$PLATFORM" \ - -t "ruby-builder:$arch" \ - --load \ - -f "$BUILD_DIR/Dockerfile.ruby-builder" \ - "$BUILD_DIR"; then - print_error "Failed to build Docker image for $arch" - exit 1 - fi - print_success "Built image for $arch" - done -else - print_error "Docker buildx is required for multi-platform builds" - print_info "Install with: docker buildx install" - exit 1 -fi - -print_success "Docker image built successfully" -print_info "Starting Ruby builds..." - -# Track results -SUCCESSFUL_BUILDS=() -FAILED_BUILDS=() - -# Build each combination -TOTAL_BUILDS=$((${#RUBY_VERSIONS[@]} * ${#RAILS_VERSIONS[@]} * ${#ARCHITECTURES[@]})) -CURRENT_BUILD=0 - -print_info "Total builds to perform: $TOTAL_BUILDS" - -for ruby_version in "${RUBY_VERSIONS[@]}"; do - print_info "Processing Ruby version: $ruby_version" - for rails_version in "${RAILS_VERSIONS[@]}"; do - print_info "Processing Rails version: $rails_version" - for arch in "${ARCHITECTURES[@]}"; do - print_info "Processing architecture: $arch" - CURRENT_BUILD=$((CURRENT_BUILD + 1)) - - echo "" - print_info "[$CURRENT_BUILD/$TOTAL_BUILDS] Building Ruby $ruby_version + Rails $rails_version for $arch..." - - # Check if this combination already exists - if [[ "$ruby_version" == "edge" ]]; then - TARBALL_PATTERN="ruby-edge-rails-*-${arch}.tar.gz" - else - if [[ "$rails_version" == "edge" ]]; then - TARBALL_PATTERN="ruby-${ruby_version}-rails-edge-*-${arch}.tar.gz" - else - TARBALL_PATTERN="ruby-${ruby_version}-rails-${rails_version}-${arch}.tar.gz" - fi - fi - - if ls "$OUTPUT_DIR/$arch"/$TARBALL_PATTERN 1>/dev/null 2>&1; then - print_warning "Skipping: $TARBALL_PATTERN already exists" - continue - fi - - # Map architecture to Docker platform - case "$arch" in - x86_64) - PLATFORM="linux/amd64" - ;; - aarch64) - PLATFORM="linux/arm64" - ;; - *) - print_error "Unsupported architecture: $arch" - continue - ;; - esac - - # Run the build in Docker using the architecture-specific image - print_info "Running Ruby build in container for $arch..." - if docker run --rm \ - --platform "$PLATFORM" \ - -e RUBY_VERSION="$ruby_version" \ - -e RAILS_VERSION="$rails_version" \ - -e ARCH="$arch" \ - -v "$OUTPUT_DIR:/output/ruby" \ - -v "$BUILD_DIR/build-ruby.sh:/build/build-ruby.sh:ro" \ - "ruby-builder:$arch"; then - - print_success "Successfully built Ruby $ruby_version + Rails $rails_version for $arch" - SUCCESSFUL_BUILDS+=("ruby-$ruby_version-rails-$rails_version-$arch") - else - print_error "Failed to build Ruby $ruby_version + Rails $rails_version for $arch" - FAILED_BUILDS+=("ruby-$ruby_version-rails-$rails_version-$arch") - fi - done - done -done - -# Summary -echo "" -print_header "Build Summary" -print_info "Total builds attempted: $TOTAL_BUILDS" -print_success "Successful: ${#SUCCESSFUL_BUILDS[@]}" -if [[ ${#FAILED_BUILDS[@]} -gt 0 ]]; then - print_error "Failed: ${#FAILED_BUILDS[@]}" - echo "Failed builds:" - for build in "${FAILED_BUILDS[@]}"; do - echo " - $build" - done - exit 1 -else - print_success "All builds completed successfully!" -fi - -# Show output directory contents -echo "" -print_info "Output directory contents:" -for arch in "${ARCHITECTURES[@]}"; do - echo " $OUTPUT_DIR/$arch:" - ls -lh "$OUTPUT_DIR/$arch/" 2>/dev/null | tail -n +2 | head -5 | sed 's/^/ /' - TOTAL_FILES=$(ls "$OUTPUT_DIR/$arch/" 2>/dev/null | wc -l) - if [[ $TOTAL_FILES -gt 5 ]]; then - echo " ... and $((TOTAL_FILES - 5)) more files" - fi -done diff --git a/build/Dockerfile.ruby b/build/Dockerfile.ruby deleted file mode 100644 index 3e3ede8..0000000 --- a/build/Dockerfile.ruby +++ /dev/null @@ -1,33 +0,0 @@ -FROM archlinux:base-devel - -# Update packages and install dependencies for mise and Ruby compilation -RUN pacman -Syu --noconfirm --needed git curl sudo ca-certificates openssl zlib libyaml libffi readline ncurses base-devel \ - && pacman -Scc --noconfirm - -# Set mise environment variables for a consistent, container-friendly path -ENV MISE_DATA_DIR=/mise -ENV MISE_CONFIG_DIR=/mise -ENV MISE_CACHE_DIR=/mise/cache -ENV MISE_INSTALL_PATH=/usr/local/bin/mise -ENV PATH=/mise/shims:$PATH - -# Install mise -SHELL ["/bin/bash", "-o", "pipefail", "-c"] -RUN curl https://mise.run | sh - -# Set Ruby build options for relocatable/portable compilation -ENV MISE_RUBY_BUILD_OPTS="--enable-load-relative --with-static-linked-ext" - -# Install Ruby 3.4.5 -RUN mise install ruby@3.4.5 - -# Activate Ruby and install Rails -RUN mise use ruby@3.4.5 -RUN gem install rails --version 8.0.2.1 - -# Generate a temporary Rails app to install default gems -RUN rails new temp_app \ - && rm -rf temp_app - -# Create a single tarball with Ruby and all gems -RUN tar -czf /ruby-3.4.5-rails-8.0.2.1.tar.gz -C /mise/installs/ruby 3.4.5