Files
once-campfire/bin/setup
Stanko K.R. 7593a27a6b Use bash for the setup script
This allows us to bootstrap Ruby during setup
2025-12-01 11:21:18 +01:00

108 lines
2.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -eo pipefail
# Prefer app executables
app_root="$(
cd "$(dirname "$0")/.."
pwd
)"
export PATH="$app_root/bin:$PATH"
REDIS_PORT=6379
REDIS_HOST=localhost
if [ "$RAILS_ENV" = "production" ]; then
echo "RAILS_ENV is production; bailing out"
exit 1
fi
# Install gum if needed
if ! command -v gum &>/dev/null; then
echo
echo "▸ Installing gum"
if command -v pacman &>/dev/null; then
sudo pacman -S --noconfirm gum
elif command -v brew &>/dev/null; then
brew install gum
else
echo "Please install gum: https://github.com/charmbracelet/gum"
exit 1
fi
echo
fi
step() {
local step_name="$1"
shift
gum style --foreground 208 --bold "$step_name"
gum style --foreground 240 "$*"
"$@"
local exit_code=$?
echo
return $exit_code
}
redis_running() {
nc -z "$REDIS_HOST" "$REDIS_PORT" 2>/dev/null
}
echo
gum style --foreground 214 " ) "
gum style --foreground 208 " ) \\ campfire"
gum style --foreground 202 " ( ( ("
gum style --foreground 94 " .^^^."
echo
# Install dependencies
if command -v brew &>/dev/null; then
step "Installing packages" brew install sqlite ffmpeg mise
elif command -v pacman &>/dev/null; then
step "Installing packages" sudo pacman -S --noconfirm --needed sqlite ffmpeg mise
elif command -v apt &>/dev/null; then
step "Installing packages" sudo apt-get install --no-install-recommends -y libsqlite3-0 ffmpeg
fi
if ! command -v mise &>/dev/null; then
echo "Couldn't install mise"
echo "Install mise using your package manager or via:"
echo "https://mise.jdx.dev/installing-mise.html"
exit 1
fi
step "Installing Ruby" mise install --yes
eval "$(mise hook-env)"
bundle config set --local auto_install true
step "Installing RubyGems" bundle install
# Prepare database
if [[ $* == *--reset* ]]; then
rm -rf ./storage/{db,files}
step "Resetting the database" rails db:reset
fi
step "Preparing the database" rails db:prepare
# Start Redis if not running
if ! redis_running; then
if command -v docker &>/dev/null; then
if docker ps -aq -f name=campfire-redis | grep -q .; then
step "Starting Redis" docker start campfire-redis
else
step "Setting up Redis" docker run -d --name campfire-redis -p "$REDIS_PORT:$REDIS_PORT" redis:7
fi
else
echo "Couldn't start Redis"
echo "Install either docker or redis and then run this command again"
exit 1
fi
fi
step "Cleaning up logs and tempfiles" rails log:clear tmp:clear
step "Restarting services" rails restart
gum style --foreground 46 "✓ Done (${SECONDS} sec)"