修复 Server-Provision 按目标状态准备工具包
新增目标机已有 SpacetimeDB 与 otelcol-contrib 时复用本机安装的准备逻辑 补充 Prepare Provision Tools 传入 SPACETIME_ROOT,避免非默认路径检查错目录 新增 Server-Provision 工具准备回归检查脚本,防止已有工具时仍触发下载 更新开发运维文档与 Hermes 共享记忆,沉淀先检查目标机状态再准备文件的约定
This commit is contained in:
86
scripts/check-server-provision-tools.sh
Executable file
86
scripts/check-server-provision-tools.sh
Executable file
@@ -0,0 +1,86 @@
|
||||
#!/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
|
||||
echo "spacetimedb-cli 2.4.1"
|
||||
EOF
|
||||
cat >"${SPACETIME_ROOT_DIR}/bin/current/spacetimedb-standalone" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
echo "spacetimedb-standalone 2.4.1"
|
||||
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}" \
|
||||
SPACETIME_EXPECTED_VERSION="2.4.1" \
|
||||
"${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
|
||||
|
||||
echo "[check-server-provision-tools] OK"
|
||||
Reference in New Issue
Block a user