104 lines
2.6 KiB
Bash
Executable File
104 lines
2.6 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"
|
|
|
|
if [ -e tmp/saas.txt ]; then
|
|
export SAAS=1
|
|
fi
|
|
|
|
if [ -n "$SAAS" ]; then
|
|
export BUNDLE_GEMFILE="Gemfile.saas"
|
|
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 135 --bold "▸ $step_name"
|
|
gum style --foreground 240 "$*"
|
|
|
|
"$@"
|
|
|
|
local exit_code=$?
|
|
echo
|
|
return $exit_code
|
|
}
|
|
|
|
needs_seeding() {
|
|
if [ "$CI" != "" ]; then
|
|
return 1
|
|
fi
|
|
|
|
has_data=$(bin/rails runner "pp Account.all.any?" 2>/dev/null)
|
|
if [ "$has_data" = "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 mariadb-libs openslide libvips gitleaks)
|
|
if ! pacman -Q "${packages[@]}" >/dev/null 2>&1; then
|
|
step "Installing packages" sudo pacman -S --noconfirm --needed "${packages[@]}"
|
|
fi
|
|
fi
|
|
|
|
# Ensure gh-signoff is installed and up to date
|
|
step "Set up gh-signoff" bash -c "gh extension install basecamp/gh-signoff || gh extension upgrade basecamp/gh-signoff"
|
|
|
|
bundle config set --local auto_install true
|
|
step "Installing RubyGems" bundle install
|
|
|
|
if [ -n "$SAAS" ]; then
|
|
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
|
|
|
|
step "Starting mysql" 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 mysql80"
|
|
fi
|
|
|
|
if [[ $* == *--reset* ]]; then
|
|
step "Resetting the database" rails db:reset
|
|
else
|
|
step "Preparing the database" rails db:prepare
|
|
|
|
if needs_seeding; then
|
|
step "Seeding the database" rails db:seed
|
|
fi
|
|
fi
|
|
|
|
step "Cleaning up logs and tempfiles" rails log:clear tmp:clear
|
|
|
|
gum style --foreground 46 "✓ Done (${SECONDS} sec)"
|