Files
wehub-resource-sync 9f2e1cd2af
Ruby / Ruby 4.0.5 (push) Failing after 5m13s
Ruby / Ruby 3.3.4 (push) Failing after 5m43s
Ruby / Ruby 2.6.8 (push) Failing after 16m2s
chore: import upstream snapshot with attribution
2026-07-13 12:33:07 +08:00

126 lines
4.6 KiB
Bash

# mise.sh — install mise, Ruby, and Node via mise
# Depends-On: colors.sh os.sh
# Requires-Vars: $SHELL_RC $USE_CN_MIRRORS $CURRENT_SHELL $MISE_INSTALL_URL $NODE_MIRROR_URL $RUBY_VERSION_SPEC $CN_RUBY_PRECOMPILED_URL
# Sets-Vars: $MISE_BIN
# Include via: @include lib/mise.sh
# --------------------------------------------------------------------------
# Internal helper — locate the mise binary
# --------------------------------------------------------------------------
_mise_bin() {
if [ -x "$HOME/.local/bin/mise" ]; then
echo "$HOME/.local/bin/mise"
elif command_exists mise; then
command -v mise
else
echo ""
fi
}
# --------------------------------------------------------------------------
# ensure_mise — install mise if missing, activate it in the current session
# --------------------------------------------------------------------------
ensure_mise() {
local mise
mise=$(_mise_bin)
if [ -n "$mise" ]; then
print_success "mise already installed: $($mise --version 2>/dev/null || echo 'n/a')"
export PATH="$HOME/.local/bin:$PATH"
eval "$($mise activate bash 2>/dev/null)" 2>/dev/null || true
MISE_BIN="$mise"
return 0
fi
print_step "Installing mise..."
if curl -fsSL "$MISE_INSTALL_URL" | sh; then
export PATH="$HOME/.local/bin:$PATH"
eval "$(~/.local/bin/mise activate bash 2>/dev/null)" 2>/dev/null || true
# Persist mise activation to shell rc
local init_line='eval "$(~/.local/bin/mise activate '"$CURRENT_SHELL"')"'
if ! grep -q "mise activate" "$SHELL_RC" 2>/dev/null; then
echo "$init_line" >> "$SHELL_RC"
print_info "Added mise activation to $SHELL_RC"
fi
MISE_BIN="$HOME/.local/bin/mise"
print_success "mise installed"
else
print_error "Failed to install mise"
return 1
fi
}
# --------------------------------------------------------------------------
# install_ruby_via_mise — install Ruby via mise
# CN mode: precompiled binary from oss.1024code.com
# Global: mise default (precompiled where available)
# --------------------------------------------------------------------------
install_ruby_via_mise() {
local mise="${MISE_BIN:-$(_mise_bin)}"
if [ -z "$mise" ]; then
print_error "mise not found — call ensure_mise first"
return 1
fi
print_info "Installing Ruby via mise ($RUBY_VERSION_SPEC)..."
if [ "$USE_CN_MIRRORS" = true ]; then
"$mise" settings ruby.compile=false 2>/dev/null || true
"$mise" settings ruby.precompiled_url="$CN_RUBY_PRECOMPILED_URL" 2>/dev/null || true
print_info "Using precompiled Ruby from CN CDN"
else
# Enable precompiled binaries globally (mise supports this on common platforms)
"$mise" settings ruby.compile=false 2>/dev/null || true
"$mise" settings unset ruby.precompiled_url 2>/dev/null || true
fi
if "$mise" use -g "$RUBY_VERSION_SPEC"; then
eval "$($mise activate bash 2>/dev/null)" 2>/dev/null || true
local installed
installed=$(ruby -e 'puts RUBY_VERSION' 2>/dev/null || echo "unknown")
print_success "Ruby $installed installed"
else
print_error "Failed to install Ruby via mise"
return 1
fi
}
# --------------------------------------------------------------------------
# install_node_via_mise — install Node.js 22 via mise
# --------------------------------------------------------------------------
install_node_via_mise() {
local mise="${MISE_BIN:-$(_mise_bin)}"
if [ -z "$mise" ]; then
print_error "mise not found — call ensure_mise first"
return 1
fi
# Skip if compatible Node is already active
if command_exists node; then
local ver major
ver=$(node --version 2>/dev/null | sed 's/v//')
major="${ver%%.*}"
if [ "${major:-0}" -ge 22 ] 2>/dev/null; then
print_success "Node.js v${ver} already satisfies >= 22 — skipping"
return 0
fi
fi
# Apply CN Node mirror if needed
if [ "$USE_CN_MIRRORS" = true ] && [ -n "$NODE_MIRROR_URL" ]; then
"$mise" settings node.mirror_url="$NODE_MIRROR_URL" 2>/dev/null || true
print_info "Node mirror → ${NODE_MIRROR_URL}"
fi
print_info "Installing Node.js 22 via mise..."
if "$mise" use -g node@22; then
eval "$($mise activate bash 2>/dev/null)" 2>/dev/null || true
print_success "Node.js $(node --version 2>/dev/null) installed"
else
print_error "Failed to install Node.js via mise"
return 1
fi
}