- Load .env via python-dotenv in core.py - Skip analytics DB open if file doesn't exist - Guard dashboard analytics calls when DB not available - Namespace admin templates under admin/ to avoid blueprint conflicts - Add dev-login routes for user and admin (DEBUG only) - Update .copier-answers.yml src_path to GitLab remote Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
109 lines
3.2 KiB
Bash
109 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Bootstrap a local dev environment for BeanFlows.
|
|
#
|
|
# Usage: ./scripts/dev_setup.sh
|
|
#
|
|
# Checks prerequisites, installs deps, creates .env, runs migrations,
|
|
# and builds CSS.
|
|
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# -- Colors & helpers -------------------------------------------------------
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
BOLD='\033[1m'
|
|
NC='\033[0m'
|
|
|
|
info() { echo -e "${BLUE}==>${NC} ${BOLD}$1${NC}"; }
|
|
ok() { echo -e "${GREEN} ✓${NC} $1"; }
|
|
warn() { echo -e "${YELLOW} !${NC} $1"; }
|
|
fail() { echo -e "${RED} ✗${NC} $1"; exit 1; }
|
|
|
|
# -- Prerequisites -----------------------------------------------------------
|
|
|
|
info "Checking prerequisites"
|
|
|
|
command -v python3 >/dev/null 2>&1 || fail "python3 not found. Install Python 3.13+."
|
|
command -v uv >/dev/null 2>&1 || fail "uv not found. Install: https://docs.astral.sh/uv/getting-started/installation/"
|
|
|
|
PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
|
|
ok "python3 ${PYTHON_VERSION}"
|
|
ok "uv $(uv --version 2>/dev/null | head -1)"
|
|
|
|
# -- Install dependencies ----------------------------------------------------
|
|
|
|
info "Installing Python dependencies"
|
|
# Sync from workspace root to get all packages
|
|
(cd .. && uv sync --all-packages --all-groups)
|
|
ok "Dependencies installed"
|
|
|
|
# -- .env --------------------------------------------------------------------
|
|
|
|
if [ -f .env ]; then
|
|
warn ".env already exists — skipping creation"
|
|
else
|
|
info "Creating .env from .env.example"
|
|
cp .env.example .env
|
|
|
|
# Auto-generate SECRET_KEY
|
|
SECRET_KEY=$(python3 -c "import secrets; print(secrets.token_hex(32))")
|
|
sed -i "s/^SECRET_KEY=.*/SECRET_KEY=${SECRET_KEY}/" .env
|
|
ok "SECRET_KEY generated"
|
|
|
|
# Prompt for optional keys
|
|
echo ""
|
|
echo -e "${BOLD}Optional API keys${NC} (press Enter to skip — everything works without them)"
|
|
echo ""
|
|
|
|
read -rp " Paddle API key (for checkout testing): " PADDLE_API_KEY
|
|
if [ -n "$PADDLE_API_KEY" ]; then
|
|
sed -i "s/^PADDLE_API_KEY=.*/PADDLE_API_KEY=${PADDLE_API_KEY}/" .env
|
|
ok "PADDLE_API_KEY set"
|
|
fi
|
|
|
|
read -rp " Resend API key (for email testing): " RESEND_API_KEY
|
|
if [ -n "$RESEND_API_KEY" ]; then
|
|
sed -i "s/^RESEND_API_KEY=.*/RESEND_API_KEY=${RESEND_API_KEY}/" .env
|
|
ok "RESEND_API_KEY set"
|
|
fi
|
|
|
|
echo ""
|
|
ok ".env created"
|
|
fi
|
|
|
|
# -- Migrations ---------------------------------------------------------------
|
|
|
|
info "Running database migrations"
|
|
uv run --package beanflows python -m beanflows.migrations.migrate
|
|
ok "Migrations applied"
|
|
|
|
# -- CSS build ----------------------------------------------------------------
|
|
|
|
info "Building CSS"
|
|
make css-build
|
|
ok "CSS built"
|
|
|
|
# -- Summary ------------------------------------------------------------------
|
|
|
|
echo ""
|
|
echo -e "${GREEN}${BOLD}Setup complete!${NC}"
|
|
echo ""
|
|
echo " Start all services: ./scripts/dev_run.sh"
|
|
echo ""
|
|
echo " URLs:"
|
|
echo " App: http://localhost:5001"
|
|
echo " Admin: http://localhost:5001/admin (password: admin)"
|
|
echo ""
|
|
echo " Email:"
|
|
if grep -q '^RESEND_API_KEY=.\+' .env 2>/dev/null; then
|
|
echo " Resend configured — emails sent via API"
|
|
else
|
|
echo " No Resend key — emails print to console"
|
|
fi
|
|
echo ""
|