a7d492eea6
统一 Rust 依赖、CLI、容器与部署产物到 2.7.0 hotfix3 重新生成 Rust bindings 并接入 2.7 capability traits 补齐本地 dev 与生产 provision 的 hotfix3 commit 门禁 更新 SpacetimeDB skills、运维文档与 MCP 验证口径
168 lines
5.7 KiB
Bash
Executable File
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: d220349adb7af7eefa810eb08a185609356b83f6
|
|
spacetimedb tool version 2.7.0; spacetimedb-lib version 2.7.0;
|
|
VERSION
|
|
EOF
|
|
cat >"${SPACETIME_ROOT_DIR}/bin/current/spacetimedb-standalone" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
echo "spacetimedb-standalone 2.7.0"
|
|
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: a08663c7b94688a2542577532d472f751e641f5b
|
|
spacetimedb tool version 2.7.0; spacetimedb-lib version 2.7.0;
|
|
VERSION
|
|
EOF
|
|
cat >"${BARE_TAG_ROOT_DIR}/bin/current/spacetimedb-standalone" <<'EOF'
|
|
#!/usr/bin/env bash
|
|
echo "spacetimedb-standalone 2.7.0"
|
|
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] 裸 v2.7.0 tag 不应通过 hotfix3 复用门禁。" >&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] 裸 v2.7.0 tag 被错误复用。" >&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] 裸 v2.7.0 archive 不应通过 hotfix3 安装结果门禁。" >&2
|
|
cat "${BARE_ARCHIVE_LOG}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
grep -q "安装结果 commit 不匹配" "${BARE_ARCHIVE_LOG}"
|
|
|
|
echo "[check-server-provision-tools] OK"
|