2026-04-02 18:39:35 +08:00
|
|
|
#!/bin/bash
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
|
|
|
ENV_FILE="$ROOT_DIR/.env"
|
|
|
|
|
ENV_LOADER="$ROOT_DIR/infra/scripts/lib/env.sh"
|
|
|
|
|
|
|
|
|
|
usage() {
|
2026-04-16 17:48:36 +08:00
|
|
|
echo "Usage: $0 {migrate|init-data|sync-notifications|bootstrap}"
|
2026-04-02 18:39:35 +08:00
|
|
|
echo ""
|
|
|
|
|
echo "Commands:"
|
2026-04-16 17:48:36 +08:00
|
|
|
echo " migrate Run database migrations only"
|
|
|
|
|
echo " init-data Initialize seed data only"
|
|
|
|
|
echo " sync-notifications Sync static notification configs to DB"
|
|
|
|
|
echo " bootstrap Run migrations + init-data + sync-notifications"
|
2026-04-02 18:39:35 +08:00
|
|
|
echo ""
|
|
|
|
|
echo "Note: Requires redis service running (docker compose up -d redis)"
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
|
|
|
echo "Error: env file not found at $ENV_FILE" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# shellcheck disable=SC1090
|
|
|
|
|
. "$ENV_LOADER"
|
|
|
|
|
load_env_file "$ENV_FILE"
|
2026-04-28 18:49:38 +08:00
|
|
|
load_env_file "$ROOT_DIR/.env.local"
|
2026-04-02 18:39:35 +08:00
|
|
|
|
|
|
|
|
cd "$ROOT_DIR"
|
|
|
|
|
|
|
|
|
|
case "${1:-}" in
|
|
|
|
|
migrate)
|
|
|
|
|
echo "=== Running Migrations ==="
|
|
|
|
|
PYTHONPATH=backend/src uv run python -m core.runtime.cli migrate
|
|
|
|
|
;;
|
|
|
|
|
init-data)
|
|
|
|
|
echo "=== Running Init Data ==="
|
|
|
|
|
PYTHONPATH=backend/src uv run python -m core.runtime.cli init-data
|
|
|
|
|
;;
|
2026-04-16 17:48:36 +08:00
|
|
|
sync-notifications)
|
|
|
|
|
shift
|
|
|
|
|
echo "=== Running Sync Notifications ==="
|
|
|
|
|
PYTHONPATH=backend/src uv run python -m core.runtime.cli sync-notifications "$@"
|
|
|
|
|
;;
|
2026-04-02 18:39:35 +08:00
|
|
|
bootstrap)
|
|
|
|
|
echo "=== Running Bootstrap ==="
|
|
|
|
|
PYTHONPATH=backend/src uv run python -m core.runtime.cli bootstrap
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
usage
|
|
|
|
|
;;
|
|
|
|
|
esac
|