Log SpacetimeDB database names in Jenkins deploy
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-30 09:45:47 +08:00
parent 805d6f8cae
commit 12f68ca614
8 changed files with 53 additions and 13 deletions

View File

@@ -270,11 +270,13 @@ if [[ ! "${BUILD_NAME}" =~ ^[0-9A-Za-z._-]+$ ]]; then
exit 1
fi
if [[ ! "${DATABASE}" =~ ^[0-9A-Za-z.-]+$ ]]; then
echo "[deploy:rust] --database 只能包含数字、字母、点和短横线,不能包含下划线: ${DATABASE}" >&2
if [[ ! "${DATABASE}" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]]; then
echo "[deploy:rust] --database 必须匹配 SpacetimeDB 数据库名规则 ^[a-z0-9]+(-[a-z0-9]+)*$,只能使用小写字母、数字,并用单个短横线分隔: ${DATABASE}" >&2
exit 1
fi
echo "[deploy:rust] SpacetimeDB 发布数据库: ${DATABASE}"
if [[ "${SKIP_SPACETIME_BUILD}" -eq 1 && "${MIGRATION_BOOTSTRAP_SECRET_MODE}" != "disabled" ]]; then
echo "[deploy:rust] --skip-spacetime-build 无法把迁移引导密钥注入 wasm。" >&2
echo "[deploy:rust] 请移除 --skip-spacetime-build或同时传 --no-migration-bootstrap-secret。" >&2
@@ -662,8 +664,8 @@ sanitize_path_segment() {
validate_spacetime_database_name() {
local database="$1"
if [[ ! "${database}" =~ ^[0-9A-Za-z.-]+$ ]]; then
echo "[start] GENARRATIVE_SPACETIME_DATABASE 只能包含数字、字母、点和短横线,不能包含下划线: ${database}" >&2
if [[ ! "${database}" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]]; then
echo "[start] GENARRATIVE_SPACETIME_DATABASE 必须匹配 SpacetimeDB 数据库名规则 ^[a-z0-9]+(-[a-z0-9]+)*$,只能使用小写字母、数字,并用单个短横线分隔: ${database}" >&2
exit 1
fi
}
@@ -985,9 +987,15 @@ start_process() {
echo "$!" >"${pid_file}"
}
validate_spacetime_database_name "${SPACETIME_DATABASE}"
echo "[start] SpacetimeDB 发布配置:"
echo "[start] - database: ${SPACETIME_DATABASE}"
echo "[start] - server: ${SPACETIME_SERVER_URL}"
echo "[start] - root-dir: ${SPACETIME_ROOT_DIR}"
require_command node
require_command spacetime
validate_spacetime_database_name "${SPACETIME_DATABASE}"
mkdir -p "${PID_DIR}" "${LOG_DIR}" "${SPACETIME_ROOT_DIR}"
sync_ubuntu_spacetime_install "${SPACETIME_ROOT_DIR}"
@@ -1075,6 +1083,7 @@ echo "[start] 完成"
echo "[start] Web: http://${WEB_HOST}:${WEB_PORT}"
echo "[start] API: http://${API_HOST}:${API_PORT}"
echo "[start] SpacetimeDB: ${SPACETIME_SERVER_URL}"
echo "[start] SpacetimeDB database: ${SPACETIME_DATABASE}"
START_SCRIPT
replace_placeholder_in_file "${TARGET_DIR}/start.sh" "__GENARRATIVE_DEFAULT_SPACETIME_HOST__" "${SPACETIME_HOST}"

View File

@@ -85,6 +85,7 @@ export function buildSpacetimeCallArgs(options, procedureName, input) {
if (!options.database) {
throw new Error('必须传入 --database。');
}
validateSpacetimeDatabaseName(options.database);
const args = [];
if (options.rootDir) {
@@ -108,6 +109,7 @@ export async function callSpacetimeProcedure(options, procedureName, input) {
if (!options.database) {
throw new Error('必须传入 --database或设置 GENARRATIVE_SPACETIME_DATABASE。');
}
validateSpacetimeDatabaseName(options.database);
const serverUrl = resolveServerUrl(options).replace(/\/+$/u, '');
const url = `${serverUrl}/v1/database/${encodeURIComponent(options.database)}/call/${encodeURIComponent(procedureName)}`;
@@ -195,6 +197,14 @@ export async function callSpacetimeProcedureViaCli(options, procedureName, input
return parseProcedureResult(output);
}
export function validateSpacetimeDatabaseName(database) {
if (!/^[a-z0-9]+(-[a-z0-9]+)*$/u.test(database)) {
throw new Error(
`SpacetimeDB 数据库名必须匹配 ^[a-z0-9]+(-[a-z0-9]+)*$,只能使用小写字母、数字,并用单个短横线分隔: ${database}`,
);
}
}
export function parseProcedureResult(output) {
const candidates = [];
const trimmed = output.trim();

View File

@@ -88,6 +88,15 @@ timestamp_slug() {
node -e 'process.stdout.write(new Date().toISOString().replace(/[:.]/g, "-"));'
}
validate_spacetime_database_name() {
local database="$1"
if [[ ! "${database}" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]]; then
echo "[spacetime:maincloud] --database 必须匹配 SpacetimeDB 数据库名规则 ^[a-z0-9]+(-[a-z0-9]+)*$,只能使用小写字母、数字,并用单个短横线分隔: ${database}" >&2
exit 1
fi
}
is_publish_conflict_output() {
local output="$1"
[[ "${output}" == *"conflict"* ]] \
@@ -209,6 +218,11 @@ if [[ -z "${SPACETIME_DATABASE}" ]]; then
exit 1
fi
validate_spacetime_database_name "${SPACETIME_DATABASE}"
echo "[spacetime:maincloud] SpacetimeDB 发布数据库: ${SPACETIME_DATABASE}"
echo "[spacetime:maincloud] SpacetimeDB server: ${SPACETIME_SERVER_ALIAS} (${SPACETIME_SERVER_URL})"
if ! command -v cargo >/dev/null 2>&1; then
echo "[spacetime:maincloud] 缺少 cargo 命令。" >&2
exit 1