fix(jenkins): download provision tools on windows
This commit is contained in:
@@ -2,16 +2,23 @@
|
||||
set -euo pipefail
|
||||
|
||||
PROVISION_TOOLS_DIR="${PROVISION_TOOLS_DIR:-provision-tools}"
|
||||
PROVISION_DOWNLOADS_DIR="${PROVISION_DOWNLOADS_DIR:-}"
|
||||
OTELCOL_VERSION="${OTELCOL_VERSION:-0.151.0}"
|
||||
PREPARE_OTELCOL="${PREPARE_OTELCOL:-${ENABLE_OTELCOL:-true}}"
|
||||
OTELCOL_DOWNLOAD_ROOT="${OTELCOL_DOWNLOAD_ROOT:-https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download}"
|
||||
OTELCOL_ARCHIVE_PATH="${OTELCOL_ARCHIVE_PATH:-}"
|
||||
SPACETIME_INSTALLER_URL="${SPACETIME_INSTALLER_URL:-https://install.spacetimedb.com}"
|
||||
SPACETIME_DOWNLOAD_ROOT="${SPACETIME_DOWNLOAD_ROOT:-https://github.com/clockworklabs/SpacetimeDB/releases/latest/download}"
|
||||
SPACETIME_TARGET_HOST="${SPACETIME_TARGET_HOST:-x86_64-unknown-linux-gnu}"
|
||||
SPACETIME_INSTALLER_PATH="${SPACETIME_INSTALLER_PATH:-}"
|
||||
SPACETIME_UPDATE_INSTALLER_PATH="${SPACETIME_UPDATE_INSTALLER_PATH:-}"
|
||||
PROVISION_DOWNLOAD_PROXY="${PROVISION_DOWNLOAD_PROXY:-}"
|
||||
PROVISION_NO_PROXY="${PROVISION_NO_PROXY:-127.0.0.1,localhost}"
|
||||
PROVISION_REQUIRE_LOCAL_DOWNLOADS="${PROVISION_REQUIRE_LOCAL_DOWNLOADS:-false}"
|
||||
PROVISION_TOOLS_TMP_PARENT="${PROVISION_TOOLS_TMP_PARENT:-${WORKSPACE:-$(pwd)}/.tmp/server-provision-tools}"
|
||||
TMP_DIR_TO_CLEAN=""
|
||||
OTELCOL_SOURCE_DESCRIPTION="skipped"
|
||||
SPACETIME_SOURCE_DESCRIPTION="unset"
|
||||
|
||||
cleanup_tmp_dir() {
|
||||
if [[ -n "${TMP_DIR_TO_CLEAN}" ]]; then
|
||||
@@ -57,6 +64,19 @@ download_file() {
|
||||
fi
|
||||
}
|
||||
|
||||
validate_relative_dir() {
|
||||
local label="$1"
|
||||
local path="$2"
|
||||
|
||||
if [[ -z "${path}" ]]; then
|
||||
return
|
||||
fi
|
||||
if [[ "${path}" == /* || "${path}" == *..* || "${path}" == "." ]]; then
|
||||
echo "[prepare-provision-tools] ${label} 只能是工作区内的相对路径: ${path}" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
make_spacetime_wrapper() {
|
||||
local target="$1"
|
||||
|
||||
@@ -74,14 +94,32 @@ prepare_otelcol() {
|
||||
local archive="${tmp_dir}/otelcol-contrib.tar.gz"
|
||||
local extract_dir="${tmp_dir}/otelcol-contrib"
|
||||
local url="${OTELCOL_DOWNLOAD_ROOT}/v${OTELCOL_VERSION}/otelcol-contrib_${OTELCOL_VERSION}_linux_amd64.tar.gz"
|
||||
local downloaded_archive="${PROVISION_DOWNLOADS_DIR}/otelcol-contrib_${OTELCOL_VERSION}_linux_amd64.tar.gz"
|
||||
local source_archive=""
|
||||
local target="${PROVISION_TOOLS_DIR}/otelcol-contrib"
|
||||
|
||||
require_cmd tar
|
||||
|
||||
echo "[prepare-provision-tools] 下载 otelcol-contrib: ${url}"
|
||||
if [[ -n "${OTELCOL_ARCHIVE_PATH}" && -f "${OTELCOL_ARCHIVE_PATH}" ]]; then
|
||||
source_archive="${OTELCOL_ARCHIVE_PATH}"
|
||||
elif [[ -n "${PROVISION_DOWNLOADS_DIR}" && -f "${downloaded_archive}" ]]; then
|
||||
source_archive="${downloaded_archive}"
|
||||
fi
|
||||
if [[ "${PROVISION_REQUIRE_LOCAL_DOWNLOADS}" == "true" && -z "${source_archive}" ]]; then
|
||||
echo "[prepare-provision-tools] 要求使用 Windows 已下载的 otelcol-contrib 包,但未找到: ${downloaded_archive}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "${extract_dir}"
|
||||
download_file "${url}" "${archive}"
|
||||
OTELCOL_SOURCE_DESCRIPTION="download ${url}"
|
||||
if [[ -n "${source_archive}" ]]; then
|
||||
echo "[prepare-provision-tools] 使用已下载的 otelcol-contrib 包: ${source_archive}"
|
||||
cp "${source_archive}" "${archive}"
|
||||
OTELCOL_SOURCE_DESCRIPTION="local ${source_archive}"
|
||||
else
|
||||
echo "[prepare-provision-tools] 下载 otelcol-contrib: ${url}"
|
||||
download_file "${url}" "${archive}"
|
||||
OTELCOL_SOURCE_DESCRIPTION="download ${url}"
|
||||
fi
|
||||
tar -xzf "${archive}" -C "${extract_dir}"
|
||||
|
||||
if [[ ! -x "${extract_dir}/otelcol-contrib" ]]; then
|
||||
@@ -97,12 +135,51 @@ prepare_spacetime() {
|
||||
local tmp_dir="$1"
|
||||
local install_root="${tmp_dir}/spacetime-root"
|
||||
local target_dir="${PROVISION_TOOLS_DIR}/spacetime"
|
||||
local update_name="spacetimedb-update-${SPACETIME_TARGET_HOST}"
|
||||
local downloaded_update="${PROVISION_DOWNLOADS_DIR}/${update_name}"
|
||||
local source_update=""
|
||||
local prepared_update="${tmp_dir}/${update_name}"
|
||||
local downloaded_installer="${PROVISION_DOWNLOADS_DIR}/spacetime-install.sh"
|
||||
local source_installer=""
|
||||
|
||||
echo "[prepare-provision-tools] 使用官方安装器准备 SpacetimeDB: ${SPACETIME_INSTALLER_URL}"
|
||||
mkdir -p "${install_root}"
|
||||
download_file "${SPACETIME_INSTALLER_URL}" "${tmp_dir}/spacetime-install.sh"
|
||||
chmod 0755 "${tmp_dir}/spacetime-install.sh"
|
||||
TMPDIR="${tmp_dir}" SPACETIME_DOWNLOAD_ROOT="${SPACETIME_DOWNLOAD_ROOT}" sh "${tmp_dir}/spacetime-install.sh" --root-dir "${install_root}" -y
|
||||
if [[ -n "${SPACETIME_UPDATE_INSTALLER_PATH}" && -f "${SPACETIME_UPDATE_INSTALLER_PATH}" ]]; then
|
||||
source_update="${SPACETIME_UPDATE_INSTALLER_PATH}"
|
||||
elif [[ -n "${PROVISION_DOWNLOADS_DIR}" && -f "${downloaded_update}" ]]; then
|
||||
source_update="${downloaded_update}"
|
||||
fi
|
||||
if [[ "${PROVISION_REQUIRE_LOCAL_DOWNLOADS}" == "true" && -z "${source_update}" ]]; then
|
||||
echo "[prepare-provision-tools] 要求使用 Windows 已下载的 SpacetimeDB Linux update installer,但未找到: ${downloaded_update}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n "${source_update}" ]]; then
|
||||
echo "[prepare-provision-tools] 使用已下载的 SpacetimeDB Linux update installer: ${source_update}"
|
||||
cp "${source_update}" "${prepared_update}"
|
||||
chmod 0755 "${prepared_update}"
|
||||
TMPDIR="${tmp_dir}" "${prepared_update}" --root-dir "${install_root}" -y
|
||||
SPACETIME_SOURCE_DESCRIPTION="local update ${source_update}"
|
||||
else
|
||||
if [[ -n "${SPACETIME_INSTALLER_PATH}" && -f "${SPACETIME_INSTALLER_PATH}" ]]; then
|
||||
source_installer="${SPACETIME_INSTALLER_PATH}"
|
||||
elif [[ -n "${PROVISION_DOWNLOADS_DIR}" && -f "${downloaded_installer}" ]]; then
|
||||
source_installer="${downloaded_installer}"
|
||||
fi
|
||||
|
||||
if [[ "${PROVISION_REQUIRE_LOCAL_DOWNLOADS}" == "true" && -z "${source_installer}" ]]; then
|
||||
echo "[prepare-provision-tools] 要求使用 Windows 已下载的 SpacetimeDB 官方安装器脚本,但未找到: ${downloaded_installer}" >&2
|
||||
exit 1
|
||||
elif [[ -n "${source_installer}" ]]; then
|
||||
echo "[prepare-provision-tools] 使用已下载的 SpacetimeDB 官方安装器脚本: ${source_installer}"
|
||||
cp "${source_installer}" "${tmp_dir}/spacetime-install.sh"
|
||||
else
|
||||
echo "[prepare-provision-tools] 下载 SpacetimeDB 官方安装器脚本: ${SPACETIME_INSTALLER_URL}"
|
||||
download_file "${SPACETIME_INSTALLER_URL}" "${tmp_dir}/spacetime-install.sh"
|
||||
fi
|
||||
chmod 0755 "${tmp_dir}/spacetime-install.sh"
|
||||
TMPDIR="${tmp_dir}" SPACETIME_DOWNLOAD_ROOT="${SPACETIME_DOWNLOAD_ROOT}" sh "${tmp_dir}/spacetime-install.sh" --root-dir "${install_root}" -y
|
||||
SPACETIME_SOURCE_DESCRIPTION="installer ${SPACETIME_INSTALLER_URL}; download root ${SPACETIME_DOWNLOAD_ROOT}"
|
||||
fi
|
||||
|
||||
if [[ ! -x "${install_root}/bin/current/spacetimedb-cli" ]]; then
|
||||
echo "[prepare-provision-tools] SpacetimeDB 安装结果缺少 bin/current/spacetimedb-cli。" >&2
|
||||
@@ -129,6 +206,13 @@ main() {
|
||||
require_cmd mktemp
|
||||
require_cmd rm
|
||||
|
||||
validate_relative_dir "PROVISION_TOOLS_DIR" "${PROVISION_TOOLS_DIR}"
|
||||
validate_relative_dir "PROVISION_DOWNLOADS_DIR" "${PROVISION_DOWNLOADS_DIR}"
|
||||
if [[ -n "${PROVISION_DOWNLOADS_DIR}" && "${PROVISION_DOWNLOADS_DIR%/}" == "${PROVISION_TOOLS_DIR%/}" ]]; then
|
||||
echo "[prepare-provision-tools] PROVISION_DOWNLOADS_DIR 不能等于 PROVISION_TOOLS_DIR,否则会被清理: ${PROVISION_DOWNLOADS_DIR}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
configure_download_proxy
|
||||
|
||||
mkdir -p "${PROVISION_TOOLS_TMP_PARENT}"
|
||||
@@ -148,8 +232,9 @@ main() {
|
||||
|
||||
cat >"${PROVISION_TOOLS_DIR}/MANIFEST.txt" <<EOF
|
||||
otelcol-contrib ${OTELCOL_VERSION} ${OTELCOL_SOURCE_DESCRIPTION}
|
||||
spacetime installer ${SPACETIME_INSTALLER_URL}
|
||||
spacetime download root ${SPACETIME_DOWNLOAD_ROOT}
|
||||
spacetime ${SPACETIME_SOURCE_DESCRIPTION}
|
||||
spacetime target host ${SPACETIME_TARGET_HOST}
|
||||
require local downloads ${PROVISION_REQUIRE_LOCAL_DOWNLOADS}
|
||||
EOF
|
||||
|
||||
echo "[prepare-provision-tools] 工具包已准备: ${PROVISION_TOOLS_DIR}"
|
||||
|
||||
Reference in New Issue
Block a user