Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
72 lines
2.2 KiB
Bash
Executable File
72 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
step_start() { echo "==> START $1"; }
|
|
step_done() { echo "==> DONE"; }
|
|
|
|
# Wait for PostgreSQL to be ready (timeout after 60s)
|
|
step_start "Waiting for PostgreSQL"
|
|
TRIES=0
|
|
until su-exec postgres pg_isready -h localhost > /dev/null 2>&1; do
|
|
TRIES=$((TRIES + 1))
|
|
if [ "$TRIES" -ge 120 ]; then
|
|
echo "ERROR: PostgreSQL did not become ready within 60s"
|
|
exit 1
|
|
fi
|
|
sleep 0.5
|
|
done
|
|
step_done
|
|
|
|
# Create role if it doesn't exist
|
|
su-exec postgres psql -h localhost -tc \
|
|
"SELECT 1 FROM pg_roles WHERE rolname='twenty'" | grep -q 1 \
|
|
|| su-exec postgres psql -h localhost -c "CREATE ROLE twenty WITH LOGIN PASSWORD 'twenty' SUPERUSER"
|
|
|
|
# Create database if it doesn't exist
|
|
su-exec postgres psql -h localhost -tc \
|
|
"SELECT 1 FROM pg_database WHERE datname='default'" | grep -q 1 \
|
|
|| su-exec postgres createdb -h localhost -O twenty default
|
|
|
|
# Run Twenty database setup and migrations
|
|
cd /app/packages/twenty-server
|
|
|
|
has_schema=$(PGPASSWORD=twenty psql -h localhost -U twenty -d default -tAc \
|
|
"SELECT EXISTS (SELECT 1 FROM information_schema.schemata WHERE schema_name = 'core')")
|
|
|
|
if [ "$has_schema" = "f" ]; then
|
|
step_start "Running initial database setup and migrations"
|
|
yarn database:init:prod
|
|
step_done
|
|
fi
|
|
|
|
step_start "Flushing cache"
|
|
if ! yarn command:prod cache:flush; then
|
|
echo "Warning: Failed to flush cache before upgrade, but continuing startup..."
|
|
fi
|
|
step_done
|
|
|
|
step_start "Running upgrade"
|
|
if ! yarn command:prod upgrade; then
|
|
echo "Warning: Upgrade completed with errors. Some workspaces may not be fully migrated. Check logs for details."
|
|
fi
|
|
step_done
|
|
|
|
step_start "Flushing cache"
|
|
if ! yarn command:prod cache:flush; then
|
|
echo "Warning: Failed to flush cache after upgrade, but continuing startup..."
|
|
fi
|
|
step_done
|
|
|
|
# Only seed on first boot — check if the dev workspace already exists
|
|
has_workspace=$(PGPASSWORD=twenty psql -h localhost -U twenty -d default -tAc \
|
|
"SELECT EXISTS (SELECT 1 FROM core.workspace WHERE id = '20202020-1c25-4d02-bf25-6aeccf7ea419')")
|
|
|
|
if [ "$has_workspace" = "f" ]; then
|
|
step_start "Seeding workspace data"
|
|
yarn command:prod workspace:seed:dev --light || true
|
|
step_done
|
|
fi
|
|
|
|
echo "==> START Database ready"
|
|
echo "==> DONE"
|