Files
fizzy/bin/dev
T
Alexander Zaytsev 8f3086daa9 Pretty-print dev server URL and login in bin/dev (#2808)
* Make dev server URL and login info look nicer

* DRY

* Adjust comments

* Adjust comments
2026-04-15 14:54:11 -04:00

81 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env sh
PORT=3006
USE_TAILSCALE=0
USE_PUSH=0
if [ -t 1 ]; then
c_bar='\033[2m▎\033[0m' # dim
c_label='\033[37m' # gray
c_url='\033[96m' # cyan
c_reset='\033[0m'
else
c_bar='▎' c_label='' c_url='' c_reset=''
fi
for arg in "$@"; do
case $arg in
--tailscale) USE_TAILSCALE=1 ;;
--push) USE_PUSH=1 ;;
esac
done
if [ "$USE_PUSH" = "1" ]; then
if [ ! -f tmp/saas.txt ]; then
echo "Enabling SaaS mode for push notifications..."
./bin/rails saas:enable
fi
echo "Loading push credentials from 1Password..."
if ! eval "$(BUNDLE_GEMFILE=Gemfile.saas bundle exec push-dev)"; then
echo "Error: failed to load push credentials. Are you signed into 1Password?" >&2
exit 1
fi
if [ -z "$APNS_ENCRYPTION_KEY_B64" ] || [ -z "$APNS_KEY_ID" ]; then
echo "Error: Push credentials not set. Missing APNS_ENCRYPTION_KEY_B64 or APNS_KEY_ID." >&2
exit 1
fi
fi
if [ ! -f tmp/solid-queue.txt ]; then
export SOLID_QUEUE_IN_PUMA=false
fi
if [ -f tmp/oss-config.txt ]; then
export OSS_CONFIG=1
fi
if [ "$USE_TAILSCALE" = "1" ]; then
if ! command -v tailscale >/dev/null 2>&1; then
echo "Error: tailscale not found" >&2
exit 1
fi
TS_STATUS=$(tailscale status --self --json 2>/dev/null)
if [ $? -ne 0 ]; then
echo "Error: tailscale not logged in" >&2
exit 1
fi
TS_HOSTNAME=$(echo "$TS_STATUS" | jq -r '.Self.DNSName | rtrimstr(".")')
TS_PORT="4$PORT"
stop_tailscale() { tailscale serve --https=$TS_PORT off >/dev/null 2>&1; }
trap stop_tailscale EXIT INT TERM
tailscale serve --bg --https=$TS_PORT localhost:$PORT >/dev/null 2>&1
if ! tailscale serve status --json 2>/dev/null | jq -e ".TCP.\"$TS_PORT\"" >/dev/null 2>&1; then
echo "Error: tailscale serve failed. On Linux, run once: sudo tailscale set --operator=\$USER" >&2
exit 1
fi
DEV_URL="https://$TS_HOSTNAME:$TS_PORT/"
else
DEV_URL="http://app.fizzy.localhost:$PORT/"
fi
printf "\n"
printf " ${c_bar} ${c_label}URL${c_reset} ${c_url}${DEV_URL}${c_reset}\n"
printf " ${c_bar} ${c_label}Login${c_reset} david@example.com\n"
printf "\n"
./bin/rails server -b 0.0.0.0 -p $PORT