#!/usr/bin/env bash set -eo pipefail # Prefer app executables app_root="$(cd "$(dirname "$0")/.."; pwd)" export PATH="$app_root/bin:$PATH" # 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 135 --bold "▸ $step_name" gum style --foreground 240 "$*" "$@" local exit_code=$? echo return $exit_code } needs_seeding() { if [ "$CI" != "" ] ; then return 1 fi has_tenant=$(bin/rails runner "pp ApplicationRecord.tenants.any? { ApplicationRecord.with_tenant(_1) { Account.sole } }" 2>/dev/null) if [ "$has_tenant" = "true" ] ; then return 1 else return 0 fi } echo gum style --foreground 153 " ˚ ∘ ∘ ˚ " gum style --foreground 111 --bold " ∘˚˳°∘° 𝒻𝒾𝓏𝓏𝓎 °∘°˳˚∘ " echo step "Installing Ruby" mise install --yes eval "$(mise hook-env)" if which pacman >/dev/null 2>&1; then packages=(imagemagick openslide libvips) if ! pacman -Q "${packages[@]}" >/dev/null 2>&1; then step "Installing packages" sudo pacman -S --noconfirm --needed "${packages[@]}" fi fi bundle config set --local auto_install true step "Installing RubyGems" bundle install if [ -e tmp/minio-dev.txt ] ; then step "Starting Docker services" bash -c "[ -d ~/Work/basecamp/docker-dev ] && git -C ~/Work/basecamp/docker-dev pull || gh repo clone basecamp/docker-dev ~/Work/basecamp/docker-dev && ~/Work/basecamp/docker-dev/setup minio" step "Configuring MinIO" bin/minio-setup fi if [[ $* == *--reset* ]]; then step "Resetting the database" rails db:reset elif needs_seeding; then step "Setting up the database" rails db:reset else step "Preparing the database" rails db:prepare fi step "Cleaning up logs and tempfiles" rails log:clear tmp:clear gum style --foreground 46 "✓ Done (${SECONDS} sec)"