From c5c8cf13793291f4ee858161d38edf5bca394c3d Mon Sep 17 00:00:00 2001 From: Ratish jain <43003421+ratishjain12@users.noreply.github.com> Date: Mon, 15 Jun 2026 02:19:59 +0530 Subject: [PATCH] fix(setup-script): add database schema initialization to setup script (#20063) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes #20062 ### Changes Made packages/twenty-utils/setup-dev-env.sh: - Added step 4 to header comment (line 11) - Added schema_exists() helper function (lines 83-91) — checks if core schema exists in default database - Added schema initialization step (lines 255-270) — runs npx nx database:reset twenty-server when schema doesn't exist - Fixed conflicting error message (line 267) CLAUDE.md: - Updated line 210 to document that the script now initializes database schema --------- Co-authored-by: Charles Bochet --- CLAUDE.md | 2 +- packages/twenty-utils/setup-dev-env.sh | 30 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1dd0dbc3e6..e6d4f89799 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -208,7 +208,7 @@ All dev environments (Claude Code web, Cursor, local) use one script: bash packages/twenty-utils/setup-dev-env.sh ``` -This handles everything: starts Postgres + Redis (auto-detects local services vs Docker), creates databases, and copies `.env` files. Idempotent — safe to run multiple times. +This handles everything: starts Postgres + Redis (auto-detects local services vs Docker), creates databases, copies `.env` files, and initializes the database schema (runs migrations) on a fresh database. Idempotent — safe to run multiple times. - `--docker` — force Docker mode (uses `packages/twenty-docker/docker-compose.dev.yml`) - `--down` — stop services diff --git a/packages/twenty-utils/setup-dev-env.sh b/packages/twenty-utils/setup-dev-env.sh index 817a00d661..99f9763447 100755 --- a/packages/twenty-utils/setup-dev-env.sh +++ b/packages/twenty-utils/setup-dev-env.sh @@ -8,6 +8,7 @@ # 1. Starts Postgres + Redis (local services or Docker, auto-detected) # 2. Creates 'default' and 'test' databases # 3. Copies .env.example -> .env for front and server +# 4. Initializes database schema (runs migrations) when not already present # # Usage (from repo root): # bash packages/twenty-utils/setup-dev-env.sh # start + configure @@ -79,6 +80,16 @@ wait_for_redis() { done } +schema_exists() { + if command -v psql &>/dev/null; then + PGPASSWORD=postgres psql -h localhost -p 5432 -U postgres -d default -t -c "SELECT 1 FROM pg_catalog.pg_namespace WHERE nspname = 'core'" 2>/dev/null | grep -q 1 + elif can_use_docker && docker compose -f "$COMPOSE_FILE" ps --quiet db 2>/dev/null | grep -q .; then + docker compose -f "$COMPOSE_FILE" exec -T db psql -U postgres -d default -t -c "SELECT 1 FROM pg_catalog.pg_namespace WHERE nspname = 'core'" 2>/dev/null | grep -q 1 + else + return 1 + fi +} + # --------------- parse flags --------------- USE_DOCKER=false ACTION="up" @@ -241,6 +252,25 @@ else done fi +# ============================================================================= +# 4. Initialize database schema +# ============================================================================= +if command -v npx &>/dev/null && [ -d node_modules ]; then + if schema_exists; then + ok "Database schema already initialized" + else + info "Initializing database schema (running migrations)..." + if npx nx database:init twenty-server; then + ok "Database schema initialized" + else + fail "Database schema initialization failed" + exit 1 + fi + fi +else + info "Run 'npx nx database:init twenty-server' to initialize the schema" +fi + # ============================================================================= echo "" echo "Dev environment ready."