Files
omarchy-pkgs/build/build-ruby.sh
T

116 lines
3.0 KiB
Bash
Executable File

#!/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!"