feat: publish applications CRM
This commit is contained in:
Executable
+75
@@ -0,0 +1,75 @@
|
||||
#!/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"
|
||||
Executable
+64
@@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")/../.zscripts" && pwd)"
|
||||
TEST_ROOT="$(mktemp -d)"
|
||||
trap 'rm -rf "$TEST_ROOT"' EXIT
|
||||
|
||||
PROJECT_DIR="$TEST_ROOT/project"
|
||||
BUILD_DIR="$TEST_ROOT/build"
|
||||
mkdir -p \
|
||||
"$PROJECT_DIR/scripts" \
|
||||
"$PROJECT_DIR/.venv" \
|
||||
"$BUILD_DIR/next-service-dist"
|
||||
|
||||
cat >"$PROJECT_DIR/requirements.txt" <<'EOF'
|
||||
EOF
|
||||
cat >"$PROJECT_DIR/scripts/report.py" <<'EOF'
|
||||
print("report")
|
||||
EOF
|
||||
cat >"$PROJECT_DIR/.venv/should-not-copy.py" <<'EOF'
|
||||
ignored
|
||||
EOF
|
||||
|
||||
PROJECT_DIR="$PROJECT_DIR" BUILD_DIR="$BUILD_DIR" \
|
||||
bash "$SCRIPT_DIR/python-runtime-build.sh"
|
||||
|
||||
test -f "$BUILD_DIR/next-service-dist/scripts/report.py"
|
||||
test ! -e "$BUILD_DIR/next-service-dist/.venv/should-not-copy.py"
|
||||
|
||||
PYPROJECT_DIR="$TEST_ROOT/pyproject-app"
|
||||
PYPROJECT_BUILD="$TEST_ROOT/pyproject-build"
|
||||
mkdir -p "$PYPROJECT_DIR" "$PYPROJECT_BUILD/next-service-dist"
|
||||
cat >"$PYPROJECT_DIR/pyproject.toml" <<'EOF'
|
||||
[project]
|
||||
name = "deploy-test"
|
||||
version = "0.1.0"
|
||||
requires-python = ">=3.12"
|
||||
dependencies = []
|
||||
EOF
|
||||
cat >"$PYPROJECT_DIR/app.py" <<'EOF'
|
||||
print("pyproject app")
|
||||
EOF
|
||||
|
||||
PROJECT_DIR="$PYPROJECT_DIR" BUILD_DIR="$PYPROJECT_BUILD" \
|
||||
bash "$SCRIPT_DIR/python-runtime-build.sh"
|
||||
test -f "$PYPROJECT_BUILD/next-service-dist/app.py"
|
||||
test -f "$PYPROJECT_BUILD/python-runtime/requirements.txt"
|
||||
|
||||
NODE_ONLY_PROJECT="$TEST_ROOT/node-only"
|
||||
NODE_ONLY_BUILD="$TEST_ROOT/node-only-build"
|
||||
mkdir -p "$NODE_ONLY_PROJECT/mini-services/python-worker" "$NODE_ONLY_BUILD"
|
||||
cat >"$NODE_ONLY_PROJECT/package.json" <<'EOF'
|
||||
{"name": "node-only"}
|
||||
EOF
|
||||
cat >"$NODE_ONLY_PROJECT/mini-services/python-worker/main.py" <<'EOF'
|
||||
print("unsupported preview-only service")
|
||||
EOF
|
||||
|
||||
PROJECT_DIR="$NODE_ONLY_PROJECT" BUILD_DIR="$NODE_ONLY_BUILD" \
|
||||
bash "$SCRIPT_DIR/python-runtime-build.sh"
|
||||
test ! -e "$NODE_ONLY_BUILD/python-runtime"
|
||||
|
||||
echo "python runtime build tests passed"
|
||||
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
RUNNER_IMAGE="${RUNNER_IMAGE:-z-ai-python-deploy-runner:test}"
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")/../.zscripts" && pwd)"
|
||||
TEST_ROOT="$(mktemp -d)"
|
||||
trap 'rm -rf "$TEST_ROOT"' EXIT
|
||||
|
||||
PROJECT_DIR="$TEST_ROOT/project"
|
||||
BUILD_DIR="$TEST_ROOT/build"
|
||||
mkdir -p "$PROJECT_DIR" "$BUILD_DIR/next-service-dist"
|
||||
|
||||
cat >"$PROJECT_DIR/requirements.txt" <<'EOF'
|
||||
idna==3.10
|
||||
EOF
|
||||
cat >"$PROJECT_DIR/check_runtime.py" <<'EOF'
|
||||
import idna
|
||||
|
||||
assert idna.__version__ == "3.10"
|
||||
print("python artifact import passed")
|
||||
EOF
|
||||
|
||||
PROJECT_DIR="$PROJECT_DIR" BUILD_DIR="$BUILD_DIR" \
|
||||
bash "$SCRIPT_DIR/python-runtime-build.sh"
|
||||
|
||||
docker run --rm \
|
||||
--entrypoint sh \
|
||||
-v "$BUILD_DIR:/app" \
|
||||
"$RUNNER_IMAGE" \
|
||||
-c 'PYTHONPATH=/app/python-runtime/site-packages:/app/next-service-dist python /app/next-service-dist/check_runtime.py'
|
||||
Reference in New Issue
Block a user