Files
Genarrative/scripts/check-server-provision-tools.sh
T
suzmii 94521af890
Project CI / Repository checks (push) Successful in 2m52s
Project CI / Frontend tests (push) Successful in 10m40s
Project CI / Backend tests (push) Successful in 6m26s
Project CI / Native shell tests (push) Successful in 18m17s
升级 SpacetimeDB 工具链到 2.8.3 (#200)
将 spacetimedb、SDK、lib 精确升级到 2.8.3 并更新 Cargo.lock。

用 2.8.3 CLI 重新生成 spacetime-client Rust bindings。

同步本地 dev、生产 provision、容器镜像和事务 smoke 的版本与 commit 门禁。

更新后端契约、开发运维、项目记忆和 SpacetimeDB skills 的 2.8.3 口径。

---------

Co-authored-by: 段舒康 <kdletters@qq.com>
Reviewed-on: http://192.168.35.82/git/GenarrativeAI/Genarrative/pulls/200
Co-authored-by: suzmii <suzmii@qq.com>
Co-committed-by: suzmii <suzmii@qq.com>
2026-08-27 17:10:17 +08:00

168 lines
5.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
TMP_ROOT="$(mktemp -d)"
trap 'rm -rf "${TMP_ROOT}"' EXIT
WORK_DIR="${TMP_ROOT}/workspace"
FAKE_BIN_DIR="${TMP_ROOT}/fake-bin"
TARGET_BIN_DIR="${TMP_ROOT}/target-bin"
SPACETIME_ROOT_DIR="${TMP_ROOT}/stdb"
OUTPUT_LOG="${TMP_ROOT}/prepare.log"
mkdir -p \
"${WORK_DIR}" \
"${FAKE_BIN_DIR}" \
"${TARGET_BIN_DIR}" \
"${SPACETIME_ROOT_DIR}/bin/current"
cat >"${FAKE_BIN_DIR}/curl" <<'EOF'
#!/usr/bin/env bash
echo "curl should not be called when target tools are already ready" >&2
exit 97
EOF
cat >"${FAKE_BIN_DIR}/wget" <<'EOF'
#!/usr/bin/env bash
echo "wget should not be called when target tools are already ready" >&2
exit 97
EOF
chmod +x "${FAKE_BIN_DIR}/curl" "${FAKE_BIN_DIR}/wget"
cat >"${TARGET_BIN_DIR}/otelcol-contrib" <<'EOF'
#!/usr/bin/env bash
echo "otelcol-contrib version 0.151.0"
EOF
chmod +x "${TARGET_BIN_DIR}/otelcol-contrib"
cat >"${SPACETIME_ROOT_DIR}/bin/current/spacetimedb-cli" <<'EOF'
#!/usr/bin/env bash
cat <<'VERSION'
spacetime Path: /tmp/spacetimedb-cli
Commit: 8e410d2842147bd8e5a32a9589cc00c19f7478e2
spacetimedb tool version 2.8.3; spacetimedb-lib version 2.8.3;
VERSION
EOF
cat >"${SPACETIME_ROOT_DIR}/bin/current/spacetimedb-standalone" <<'EOF'
#!/usr/bin/env bash
echo "spacetimedb-standalone 2.8.3"
EOF
chmod +x \
"${SPACETIME_ROOT_DIR}/bin/current/spacetimedb-cli" \
"${SPACETIME_ROOT_DIR}/bin/current/spacetimedb-standalone"
if ! (
cd "${WORK_DIR}"
PATH="${FAKE_BIN_DIR}:${PATH}" \
WORKSPACE="${WORK_DIR}" \
PROVISION_TOOLS_DIR="provision-tools" \
PROVISION_DOWNLOADS_DIR="downloads" \
PROVISION_TOOLS_TMP_PARENT="${WORK_DIR}/.tmp/server-provision-tools" \
PROVISION_REQUIRE_LOCAL_DOWNLOADS="true" \
OTELCOL_TARGET_BIN="${TARGET_BIN_DIR}/otelcol-contrib" \
OTELCOL_VERSION="0.151.0" \
SPACETIME_ROOT="${SPACETIME_ROOT_DIR}" \
"${REPO_ROOT}/scripts/prepare-server-provision-tools.sh" \
>"${OUTPUT_LOG}" 2>&1
); then
echo "[check-server-provision-tools] prepare-server-provision-tools.sh 执行失败。" >&2
cat "${OUTPUT_LOG}" >&2
exit 1
fi
grep -q "复用目标机已有 otelcol-contrib" "${OUTPUT_LOG}"
grep -q "复用目标机已有 SpacetimeDB 安装" "${OUTPUT_LOG}"
grep -q "otelcol-contrib 0.151.0 target existing" "${WORK_DIR}/provision-tools/MANIFEST.txt"
grep -q "spacetime target existing" "${WORK_DIR}/provision-tools/MANIFEST.txt"
test -x "${WORK_DIR}/provision-tools/otelcol-contrib"
test -x "${WORK_DIR}/provision-tools/spacetime/spacetime"
test -x "${WORK_DIR}/provision-tools/spacetime/bin/current/spacetimedb-cli"
test -x "${WORK_DIR}/provision-tools/spacetime/bin/current/spacetimedb-standalone"
if grep -q "下载 " "${OUTPUT_LOG}"; then
echo "[check-server-provision-tools] 已有目标机工具时不应进入下载分支。" >&2
cat "${OUTPUT_LOG}" >&2
exit 1
fi
BARE_TAG_ROOT_DIR="${TMP_ROOT}/bare-tag-stdb"
BARE_TAG_WORK_DIR="${TMP_ROOT}/bare-tag-workspace"
BARE_TAG_LOG="${TMP_ROOT}/bare-tag.log"
mkdir -p "${BARE_TAG_ROOT_DIR}/bin/current" "${BARE_TAG_WORK_DIR}"
cat >"${BARE_TAG_ROOT_DIR}/bin/current/spacetimedb-cli" <<'EOF'
#!/usr/bin/env bash
cat <<'VERSION'
spacetime Path: /tmp/spacetimedb-cli
Commit: 0000000000000000000000000000000000000000
spacetimedb tool version 2.8.3; spacetimedb-lib version 2.8.3;
VERSION
EOF
cat >"${BARE_TAG_ROOT_DIR}/bin/current/spacetimedb-standalone" <<'EOF'
#!/usr/bin/env bash
echo "spacetimedb-standalone 2.8.3"
EOF
chmod +x \
"${BARE_TAG_ROOT_DIR}/bin/current/spacetimedb-cli" \
"${BARE_TAG_ROOT_DIR}/bin/current/spacetimedb-standalone"
if (
cd "${BARE_TAG_WORK_DIR}"
PATH="${FAKE_BIN_DIR}:${PATH}" \
WORKSPACE="${BARE_TAG_WORK_DIR}" \
PROVISION_TOOLS_DIR="provision-tools" \
PROVISION_DOWNLOADS_DIR="downloads" \
PROVISION_TOOLS_TMP_PARENT="${BARE_TAG_WORK_DIR}/.tmp/server-provision-tools" \
PROVISION_REQUIRE_LOCAL_DOWNLOADS="true" \
PREPARE_OTELCOL="false" \
SPACETIME_ROOT="${BARE_TAG_ROOT_DIR}" \
"${REPO_ROOT}/scripts/prepare-server-provision-tools.sh" \
>"${BARE_TAG_LOG}" 2>&1
); then
echo "[check-server-provision-tools] commit 不匹配的 v2.8.3 不应通过复用门禁。" >&2
cat "${BARE_TAG_LOG}" >&2
exit 1
fi
grep -q "SpacetimeDB commit 不匹配" "${BARE_TAG_LOG}"
if grep -q "复用目标机已有 SpacetimeDB 安装" "${BARE_TAG_LOG}"; then
echo "[check-server-provision-tools] commit 不匹配的 v2.8.3 被错误复用。" >&2
cat "${BARE_TAG_LOG}" >&2
exit 1
fi
BARE_ARCHIVE_DIR="${TMP_ROOT}/bare-archive"
BARE_ARCHIVE_PATH="${TMP_ROOT}/bare-spacetime.tar.gz"
BARE_ARCHIVE_WORK_DIR="${TMP_ROOT}/bare-archive-workspace"
BARE_ARCHIVE_LOG="${TMP_ROOT}/bare-archive.log"
mkdir -p "${BARE_ARCHIVE_DIR}" "${BARE_ARCHIVE_WORK_DIR}"
cp \
"${BARE_TAG_ROOT_DIR}/bin/current/spacetimedb-cli" \
"${BARE_TAG_ROOT_DIR}/bin/current/spacetimedb-standalone" \
"${BARE_ARCHIVE_DIR}/"
tar -czf "${BARE_ARCHIVE_PATH}" -C "${BARE_ARCHIVE_DIR}" \
spacetimedb-cli spacetimedb-standalone
if (
cd "${BARE_ARCHIVE_WORK_DIR}"
PATH="${FAKE_BIN_DIR}:${PATH}" \
WORKSPACE="${BARE_ARCHIVE_WORK_DIR}" \
PROVISION_TOOLS_DIR="provision-tools" \
PROVISION_DOWNLOADS_DIR="downloads" \
PROVISION_TOOLS_TMP_PARENT="${BARE_ARCHIVE_WORK_DIR}/.tmp/server-provision-tools" \
PROVISION_REQUIRE_LOCAL_DOWNLOADS="true" \
PREPARE_OTELCOL="false" \
SPACETIME_ROOT="${TMP_ROOT}/missing-target-stdb" \
SPACETIME_ARCHIVE_PATH="${BARE_ARCHIVE_PATH}" \
"${REPO_ROOT}/scripts/prepare-server-provision-tools.sh" \
>"${BARE_ARCHIVE_LOG}" 2>&1
); then
echo "[check-server-provision-tools] commit 不匹配的 v2.8.3 archive 不应通过安装结果门禁。" >&2
cat "${BARE_ARCHIVE_LOG}" >&2
exit 1
fi
grep -q "安装结果 commit 不匹配" "${BARE_ARCHIVE_LOG}"
echo "[check-server-provision-tools] OK"