Files
KohakuHub/scripts/dev/run_backend.sh

77 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
ENV_FILE="${ROOT_DIR}/.env.dev"
LAKEFS_CREDENTIALS_FILE="${ROOT_DIR}/hub-meta/dev/lakefs/credentials.env"
PREPARE_ONLY=false
SKIP_SEED=false
while [[ $# -gt 0 ]]; do
case "$1" in
--prepare-only)
PREPARE_ONLY=true
;;
--skip-seed)
SKIP_SEED=true
;;
*)
echo "Unknown argument: $1"
echo "Usage: $0 [--prepare-only] [--skip-seed]"
exit 1
;;
esac
shift
done
if [[ ! -f "${ENV_FILE}" ]]; then
echo "Missing ${ENV_FILE}"
echo "Create it first: cp .env.dev.example .env.dev"
exit 1
fi
if [[ -n "${VIRTUAL_ENV:-}" ]]; then
PYTHON_BIN="${PYTHON_BIN:-python}"
elif [[ -x "${ROOT_DIR}/venv/bin/python" ]]; then
PYTHON_BIN="${PYTHON_BIN:-${ROOT_DIR}/venv/bin/python}"
else
PYTHON_BIN="${PYTHON_BIN:-python3}"
fi
set -a
# shellcheck disable=SC1090
source "${ENV_FILE}"
set +a
export PYTHONPATH="${ROOT_DIR}/src${PYTHONPATH:+:${PYTHONPATH}}"
# LakeFS bootstrap credentials are only returned once, so persist and reuse them locally.
mkdir -p "${ROOT_DIR}/hub-meta/dev/lakefs"
"${PYTHON_BIN}" "${ROOT_DIR}/scripts/dev/init_lakefs.py" \
--credentials-file "${LAKEFS_CREDENTIALS_FILE}"
if [[ -f "${LAKEFS_CREDENTIALS_FILE}" ]]; then
# Source the persisted credentials so the local backend can talk to LakeFS directly.
set -a
# shellcheck disable=SC1090
source "${LAKEFS_CREDENTIALS_FILE}"
set +a
fi
"${PYTHON_BIN}" "${ROOT_DIR}/scripts/run_migrations.py"
if [[ "${KOHAKU_HUB_DEV_AUTO_SEED:-true}" == "true" && "${SKIP_SEED}" != "true" ]]; then
# Keep local demo data creation on the same bootstrap path as normal backend startup.
"${PYTHON_BIN}" "${ROOT_DIR}/scripts/dev/seed_demo_data.py"
fi
if [[ "${PREPARE_ONLY}" == "true" ]]; then
echo "Backend bootstrap completed."
exit 0
fi
exec "${PYTHON_BIN}" -m uvicorn kohakuhub.main:app \
--reload \
--host 0.0.0.0 \
--port 48888