Simple stubbed ruby builder
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
# Multi-platform Dockerfile for Ruby builds
|
||||
# Uses menci/archlinuxarm which supports both amd64 and arm64
|
||||
FROM menci/archlinuxarm:latest
|
||||
|
||||
# Initialize pacman keyring (needed for ALARM, harmless for Arch)
|
||||
RUN pacman-key --init && pacman-key --populate
|
||||
|
||||
# Update package database and install only necessary packages (skip full system upgrade to avoid slow downloads)
|
||||
RUN pacman -Sy --noconfirm && \
|
||||
pacman -S --noconfirm --needed git curl sudo ca-certificates openssl zlib libyaml libffi readline ncurses base-devel jq && \
|
||||
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"
|
||||
|
||||
# Copy the build script
|
||||
COPY build-ruby.sh /build/build-ruby.sh
|
||||
RUN chmod +x /build/build-ruby.sh
|
||||
|
||||
# Default command
|
||||
CMD ["/build/build-ruby.sh"]
|
||||
Executable
+116
@@ -0,0 +1,116 @@
|
||||
#!/bin/bash
|
||||
# Build script for Ruby + Rails bundles
|
||||
set -e
|
||||
|
||||
# Check required environment variables
|
||||
if [[ -z "$RUBY_VERSION" ]]; then
|
||||
echo "Error: RUBY_VERSION environment variable is required"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$RAILS_VERSION" ]]; then
|
||||
echo "Error: RAILS_VERSION environment variable is required"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "$ARCH" ]]; then
|
||||
echo "Error: ARCH environment variable is required"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OUTPUT_DIR="/output/ruby/$ARCH"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
echo "==> Ruby Bundle Builder"
|
||||
echo "==> Ruby version: $RUBY_VERSION"
|
||||
echo "==> Rails version: $RAILS_VERSION"
|
||||
echo "==> Architecture: $ARCH"
|
||||
echo "==> Output directory: $OUTPUT_DIR"
|
||||
|
||||
# Handle special Ruby versions
|
||||
if [[ "$RUBY_VERSION" == "edge" ]]; then
|
||||
echo "==> Installing Ruby edge from git..."
|
||||
# mise can install Ruby from git
|
||||
mise install ruby@ref:master
|
||||
RUBY_INSTALL_VERSION="ref:master"
|
||||
TARBALL_VERSION="edge"
|
||||
else
|
||||
echo "==> Installing Ruby $RUBY_VERSION..."
|
||||
mise install "ruby@$RUBY_VERSION"
|
||||
RUBY_INSTALL_VERSION="$RUBY_VERSION"
|
||||
TARBALL_VERSION="$RUBY_VERSION"
|
||||
fi
|
||||
|
||||
# Activate Ruby
|
||||
echo "==> Activating Ruby..."
|
||||
mise use "ruby@$RUBY_INSTALL_VERSION"
|
||||
|
||||
# Verify Ruby is working
|
||||
echo "==> Ruby version check:"
|
||||
ruby --version
|
||||
|
||||
# Find the actual Ruby installation directory
|
||||
if [[ "$RUBY_INSTALL_VERSION" == "ref:master" ]]; then
|
||||
# For edge builds, find the directory (it will have a hash name)
|
||||
RUBY_DIR=$(ls -d /mise/installs/ruby/ref-* | head -1 | xargs basename)
|
||||
else
|
||||
RUBY_DIR="$RUBY_INSTALL_VERSION"
|
||||
fi
|
||||
|
||||
# Set up gem paths for relocatable installation
|
||||
export GEM_HOME="/mise/installs/ruby/$RUBY_DIR/lib/ruby/gems"
|
||||
export GEM_PATH="$GEM_HOME"
|
||||
export BUNDLE_PATH="$GEM_HOME"
|
||||
mkdir -p "$GEM_HOME"
|
||||
|
||||
echo "==> Gem environment:"
|
||||
echo " GEM_HOME: $GEM_HOME"
|
||||
echo " GEM_PATH: $GEM_PATH"
|
||||
|
||||
# Install Rails
|
||||
echo "==> Installing Rails $RAILS_VERSION..."
|
||||
if [[ "$RAILS_VERSION" == "edge" ]]; then
|
||||
gem install rails --pre
|
||||
# Get the actual version installed
|
||||
RAILS_ACTUAL_VERSION=$(gem list rails | grep "^rails " | sed 's/rails (\(.*\))/\1/')
|
||||
TARBALL_RAILS_VERSION="edge-$RAILS_ACTUAL_VERSION"
|
||||
else
|
||||
gem install rails --version "$RAILS_VERSION"
|
||||
TARBALL_RAILS_VERSION="$RAILS_VERSION"
|
||||
fi
|
||||
|
||||
# Verify Rails is installed
|
||||
echo "==> Rails version check:"
|
||||
rails --version
|
||||
|
||||
# Generate a temporary Rails app to install default gems
|
||||
echo "==> Generating temporary Rails app to install default gems..."
|
||||
rails new temp_app --skip-git --skip-bundle
|
||||
cd temp_app
|
||||
|
||||
# Install all the default gems to our GEM_HOME
|
||||
bundle install
|
||||
|
||||
# Show installed gems count
|
||||
echo "==> Installed gems:"
|
||||
gem list | wc -l
|
||||
|
||||
# Clean up
|
||||
cd /
|
||||
rm -rf temp_app
|
||||
|
||||
# Create the tarball with proper naming
|
||||
TARBALL_NAME="ruby-${TARBALL_VERSION}-rails-${TARBALL_RAILS_VERSION}-${ARCH}.tar.gz"
|
||||
TARBALL_PATH="$OUTPUT_DIR/$TARBALL_NAME"
|
||||
|
||||
echo "==> Creating tarball: $TARBALL_NAME"
|
||||
|
||||
# Create the tarball including Ruby binaries and all gems
|
||||
echo " Including Ruby installation and gems..."
|
||||
tar -czf "$TARBALL_PATH" -C /mise/installs/ruby "$RUBY_DIR"
|
||||
|
||||
# Show file info
|
||||
echo "==> Tarball created:"
|
||||
ls -lh "$TARBALL_PATH"
|
||||
|
||||
echo "==> Build complete!"
|
||||
Reference in New Issue
Block a user