76 lines
2.1 KiB
Bash
Executable File
76 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")/../.zscripts" && pwd)"
|
|
TEST_ROOT="$(mktemp -d)"
|
|
trap 'rm -rf "$TEST_ROOT"' EXIT
|
|
|
|
FAKE_BIN="$TEST_ROOT/bin"
|
|
mkdir -p "$FAKE_BIN"
|
|
cat >"$FAKE_BIN/bun" <<'EOF'
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
if [ "$#" -ne 2 ] || [ "$1" != "run" ] || [ "$2" != "db:push" ]; then
|
|
echo "unexpected bun invocation: $*" >&2
|
|
exit 1
|
|
fi
|
|
|
|
case "${DATABASE_URL:-}" in
|
|
file:*) db_path="${DATABASE_URL#file:}" ;;
|
|
*)
|
|
echo "DATABASE_URL must be an absolute SQLite file URL" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
case "$db_path" in
|
|
/*) ;;
|
|
*)
|
|
echo "database path must be absolute: $db_path" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
mkdir -p "$(dirname "$db_path")"
|
|
if [ ! -f "$db_path" ]; then
|
|
printf 'initialized\n' >"$db_path"
|
|
fi
|
|
printf '%s\n' "$DATABASE_URL" >>"${DB_PUSH_CALLS:?}"
|
|
EOF
|
|
chmod +x "$FAKE_BIN/bun"
|
|
|
|
export PATH="$FAKE_BIN:$PATH"
|
|
export DB_PUSH_CALLS="$TEST_ROOT/db-push-calls"
|
|
|
|
# 没有 Preview 数据库时,应只在部署产物中初始化空库,不修改项目目录。
|
|
EMPTY_PROJECT="$TEST_ROOT/empty-project"
|
|
EMPTY_BUILD="$TEST_ROOT/empty-build"
|
|
mkdir -p "$EMPTY_PROJECT"
|
|
|
|
PROJECT_DIR="$EMPTY_PROJECT" BUILD_DIR="$EMPTY_BUILD" \
|
|
bash "$SCRIPT_DIR/database-runtime-build.sh"
|
|
|
|
test -f "$EMPTY_BUILD/db/custom.db"
|
|
test "$(cat "$EMPTY_BUILD/db/custom.db")" = "initialized"
|
|
test ! -e "$EMPTY_PROJECT/db/custom.db"
|
|
|
|
# 有 Preview 数据库时,应保留数据和同目录文件,再对产物执行 schema 同步。
|
|
EXISTING_PROJECT="$TEST_ROOT/existing-project"
|
|
EXISTING_BUILD="$TEST_ROOT/existing-build"
|
|
mkdir -p "$EXISTING_PROJECT/db"
|
|
printf 'preview-data\n' >"$EXISTING_PROJECT/db/custom.db"
|
|
printf 'sidecar\n' >"$EXISTING_PROJECT/db/README.txt"
|
|
|
|
PROJECT_DIR="$EXISTING_PROJECT" BUILD_DIR="$EXISTING_BUILD" \
|
|
bash "$SCRIPT_DIR/database-runtime-build.sh"
|
|
|
|
test "$(cat "$EXISTING_BUILD/db/custom.db")" = "preview-data"
|
|
test "$(cat "$EXISTING_BUILD/db/README.txt")" = "sidecar"
|
|
test "$(wc -l <"$DB_PUSH_CALLS" | tr -d ' ')" = "2"
|
|
grep -Fx "file:$EMPTY_BUILD/db/custom.db" "$DB_PUSH_CALLS"
|
|
grep -Fx "file:$EXISTING_BUILD/db/custom.db" "$DB_PUSH_CALLS"
|
|
|
|
echo "database runtime build tests passed"
|