build: add spacetime local dev scripts

This commit is contained in:
2026-04-21 01:58:46 +08:00
parent c9850c8caf
commit a1a02eee7d
7 changed files with 138 additions and 6 deletions

View File

@@ -0,0 +1,67 @@
[CmdletBinding()]
param(
[Alias("h")]
[switch]$Help,
[string]$ListenHost = "127.0.0.1",
[int]$Port = 3001,
[string]$RootDir = ""
)
$ErrorActionPreference = "Stop"
function Write-Usage {
@(
'Usage:'
' ./server-rs/scripts/spacetime-dev.ps1'
' ./server-rs/scripts/spacetime-dev.ps1 -ListenHost 127.0.0.1 -Port 3101'
''
'Notes:'
' 1. Start local standalone SpacetimeDB for the Genarrative Rust backend'
' 2. Store local SpacetimeDB state in server-rs/.spacetimedb/local by default'
' 3. Current stage only boots the standalone server and does not publish a module yet'
) -join [Environment]::NewLine
}
if ($Help) {
Write-Usage
exit 0
}
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$serverRsDir = Split-Path -Parent $scriptDir
if ([string]::IsNullOrWhiteSpace($RootDir)) {
$RootDir = Join-Path $serverRsDir ".spacetimedb\local"
}
if (-not (Test-Path (Join-Path $serverRsDir "apps\spacetime-module\README.md"))) {
throw "Missing server-rs/apps/spacetime-module/README.md, cannot start SpacetimeDB local dev script."
}
$spacetimeCommand = Get-Command spacetime -ErrorAction SilentlyContinue
if ($null -eq $spacetimeCommand) {
throw @(
"Missing 'spacetime' CLI.",
"Install guide: https://spacetimedb.com/install",
"Windows PowerShell: iwr https://windows.spacetimedb.com -useb | iex"
) -join " "
}
New-Item -ItemType Directory -Force -Path $RootDir | Out-Null
$listenAddress = "$ListenHost`:$Port"
Write-Host "[server-rs:spacetime-dev] working dir: $serverRsDir"
Write-Host "[server-rs:spacetime-dev] root dir: $RootDir"
Write-Host "[server-rs:spacetime-dev] listen addr: $listenAddress"
Write-Host "[server-rs:spacetime-dev] mode: standalone"
Write-Host "[server-rs:spacetime-dev] note: module publish is deferred until apps/spacetime-module scaffold lands"
Push-Location $serverRsDir
try {
& $spacetimeCommand.Source --root-dir $RootDir start --edition standalone --listen-addr $listenAddress
}
finally {
Pop-Location
}

View File

@@ -0,0 +1,52 @@
#!/usr/bin/env bash
set -euo pipefail
# 当前阶段只负责启动本地 standalone SpacetimeDB先把服务器进程和数据目录口径固定下来不提前耦合 publish 流程。
usage() {
cat <<'EOF'
用法:
./server-rs/scripts/spacetime-dev.sh
GENARRATIVE_SPACETIME_PORT=3101 ./server-rs/scripts/spacetime-dev.sh
说明:
1. 启动 Genarrative Rust 后端使用的本地 standalone SpacetimeDB
2. 默认把本地数据目录放到 `server-rs/.spacetimedb/local`
3. 当前阶段只负责启动 standalone server暂不自动 publish `apps/spacetime-module`
EOF
}
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
usage
exit 0
fi
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
SERVER_RS_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
LISTEN_HOST="${GENARRATIVE_SPACETIME_HOST:-127.0.0.1}"
PORT="${GENARRATIVE_SPACETIME_PORT:-3001}"
ROOT_DIR="${GENARRATIVE_SPACETIME_ROOT_DIR:-${SERVER_RS_DIR}/.spacetimedb/local}"
if [[ ! -f "${SERVER_RS_DIR}/apps/spacetime-module/README.md" ]]; then
echo "[server-rs:spacetime-dev] 未找到 apps/spacetime-module/README.md无法启动本地 SpacetimeDB 脚本。" >&2
exit 1
fi
if ! command -v spacetime >/dev/null 2>&1; then
echo "[server-rs:spacetime-dev] 缺少 spacetime CLI。" >&2
echo "[server-rs:spacetime-dev] 安装文档: https://spacetimedb.com/install" >&2
echo "[server-rs:spacetime-dev] Linux/macOS 安装命令: curl -sSf https://install.spacetimedb.com | sh" >&2
exit 1
fi
mkdir -p "${ROOT_DIR}"
echo "[server-rs:spacetime-dev] 工作目录: ${SERVER_RS_DIR}"
echo "[server-rs:spacetime-dev] 数据目录: ${ROOT_DIR}"
echo "[server-rs:spacetime-dev] 监听地址: ${LISTEN_HOST}:${PORT}"
echo "[server-rs:spacetime-dev] 模式: standalone"
echo "[server-rs:spacetime-dev] 说明: 当前阶段暂不自动 publish apps/spacetime-module"
cd "${SERVER_RS_DIR}"
spacetime --root-dir "${ROOT_DIR}" start --edition standalone --listen-addr "${LISTEN_HOST}:${PORT}"