TDengine/tests/parallel_test/run_container.sh
WANG Xu c52c68aa4f
sync: apply remaining build system changes from monorepo (main)
The following commits could not be applied individually due to context
differences between the monorepo and the public repo's build files.
They have been applied as a cumulative diff to ensure the final state
matches the monorepo exactly:

- chore: sync CI files with 3.0 branch to eliminate merge conflicts (rd-public/tsdb!271)
- revert(refactor): dynamically link taosd taosudf taosmqtt against libtaosnative.so to reduce binary size (revert #183) (rd-public/tsdb!282)
- fix(docs): autofix formatting issues across all doc files (rd-public/tsdb!296)
- feat: support -DBUILD_SANITIZER=true on windows for debug build (rd-public/tsdb!291)
- feat(build): build cache, mirror, and sccache optimizations (rd-public/tsdb!326)
- docs: update image for three replica (rd-public/tsdb!324)
- enh: shared storage on windows (rd-public/tsdb!333)
- fix(cmake): convert ext_libs3 from git clone to URL tarball download (rd-public/tsdb!360)
- feat: dual-source deps and comprehensive docs/packaging (cherry-pick to main) (rd-public/tsdb!352)
- fix(cmake): guard DOWNLOAD_EXTRACT_TIMESTAMP for CMake < 3.24 and fix duplicate Cargo.lock entry (rd-public/tsdb!369)
- fix: test case execution failure in pytest.sh (rd-public/tsdb!338)
- enh: built-in compilation support for Python UDF plugins use abi3 (rd-public/tsdb!325)
2026-05-23 14:11:50 +08:00

134 lines
No EOL
4.9 KiB
Bash
Executable file

#!/bin/bash
set -e # 确保任何命令失败时退出
function usage() {
echo "$0"
echo -e "\t -w work dir"
echo -e "\t -d execution dir"
echo -e "\t -c command"
echo -e "\t -t thread number"
echo -e "\t -e enterprise edition"
echo -e "\t -o default timeout value"
echo -e "\t -s build with sanitizer"
echo -e "\t -h help"
}
ent=0
while getopts "w:d:c:t:o:s:eh" opt; do
case $opt in
w) WORKDIR=$OPTARG ;;
d) exec_dir=$OPTARG ;;
c) cmd=$OPTARG ;;
t) thread_no=$OPTARG ;;
e) ent=1 ;;
o) extra_param="-o $OPTARG" ;;
s) buildSan=$OPTARG ;;
h) usage; exit 0 ;;
\?) echo "Invalid option: -$OPTARG"; usage; exit 1 ;;
esac
done
if [ -z "$WORKDIR" ] || [ -z "$exec_dir" ] || [ -z "$cmd" ] || [ -z "$thread_no" ]; then
usage
exit 1
fi
if [ "${buildSan}" == "y" ]; then
DEBUGPATH="debugSan"
elif [[ "${buildSan}" == "n" ]] || [[ -z "${buildSan}" ]]; then
DEBUGPATH="debugNoSan"
else
usage
exit 1
fi
if [ -d "$WORKDIR/TDinternal/enterprise" ]; then
# ── TDinternal CI 布局 ──────────────────────────────────────────────
if [ $ent -ne 0 ]; then
echo "TDinternal-Enterprise edition selected"
extra_param="$extra_param -e"
INTERNAL_REPDIR="$WORKDIR/TDinternal"
REPDIR="$INTERNAL_REPDIR/community"
REPDIR_DEBUG="$WORKDIR/$DEBUGPATH/"
CONTAINER_TESTDIR="/home/TDinternal/community"
SIM_DIR="/home/TDinternal/sim"
REP_MOUNT_PARAM="$INTERNAL_REPDIR:/home/TDinternal"
REP_MOUNT_DEBUG="${REPDIR_DEBUG}:/home/TDinternal/debug/"
REP_MOUNT_LIB="${REPDIR_DEBUG}/build/lib:/home/TDinternal/debug/build/lib:ro"
else
echo "TDinternal-OSS edition selected"
REPDIR="$WORKDIR/TDengine"
REPDIR_DEBUG="$WORKDIR/$DEBUGPATH/"
CONTAINER_TESTDIR="/home/TDengine"
SIM_DIR="/home/TDengine/sim"
REP_MOUNT_PARAM="$REPDIR:/home/TDengine"
REP_MOUNT_DEBUG="${REPDIR_DEBUG}:/home/TDengine/debug/"
REP_MOUNT_LIB="${REPDIR_DEBUG}/build/lib:/home/TDengine/debug/build/lib:ro"
fi
else
# ── tsdb CI 布局 ────────────────────────────────────────────────────
# tsdb 仓库原生路径:脚本位于 tests/parallel_test/run_container.sh
# 优先从脚本位置反推,兼容 sparse-checkout 创建的 symlink
[ $ent -ne 0 ] && extra_param="$extra_param -e"
echo "TSDB edition selected (ent=$ent)"
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
TSDB_COMMUNITY=$(cd "${SCRIPT_DIR}/../.." && pwd) # → source/taos-community
if [ -d "${TSDB_COMMUNITY}/tests" ] && [ -d "${TSDB_COMMUNITY}/source" ]; then
REPDIR="${TSDB_COMMUNITY}"
elif [ -d "$WORKDIR/TDengine" ]; then
REPDIR="$WORKDIR/TDengine"
elif [ -d "$WORKDIR/TDinternal/community" ]; then
REPDIR="$WORKDIR/TDinternal/community"
else
echo "ERROR: Cannot find source directory under $WORKDIR"
exit 1
fi
REPDIR_DEBUG="$WORKDIR/$DEBUGPATH/"
CONTAINER_TESTDIR="/mnt/tsdb/source/taos-community"
SIM_DIR="/mnt/tsdb/sim"
REP_MOUNT_PARAM="${REPDIR}:/mnt/tsdb/source/taos-community"
REP_MOUNT_DEBUG="${REPDIR_DEBUG}:/mnt/tsdb/debug/"
REP_MOUNT_LIB="${REPDIR_DEBUG}/build/lib:/mnt/tsdb/debug/build/lib:ro"
fi
ulimit -c unlimited
TMP_DIR="$WORKDIR/tmp"
SOURCEDIR="$WORKDIR/src"
MOUNT_DIR=""
rm -rf "${TMP_DIR}/thread_volume/$thread_no/sim"
mkdir -p "$SOURCEDIR"
mkdir -p "${TMP_DIR}/thread_volume/$thread_no/sim/var_taoslog"
mkdir -p "${TMP_DIR}/thread_volume/$thread_no/sim/tsim"
mkdir -p "${TMP_DIR}/thread_volume/$thread_no/coredump"
rm -rf "${TMP_DIR}/thread_volume/$thread_no/coredump"/*
if [ ! -d "${TMP_DIR}/thread_volume/$thread_no/$exec_dir" ]; then
subdir=$(echo "$exec_dir"|cut -d/ -f1)
echo "cp -rf ${REPDIR}/tests/$subdir ${TMP_DIR}/thread_volume/$thread_no/"
cp -rf "${REPDIR}/tests/$subdir" "${TMP_DIR}/thread_volume/$thread_no/"
fi
MOUNT_DIR="$TMP_DIR/thread_volume/$thread_no/$exec_dir:$CONTAINER_TESTDIR/tests/$exec_dir"
echo "$thread_no -> ${exec_dir}:$cmd"
coredump_dir=$(cat /proc/sys/kernel/core_pattern | xargs dirname)
if [ -z "$coredump_dir" ] || [ "$coredump_dir" = "." ]; then
coredump_dir="/home/coredump"
fi
SIM_VOL="$TMP_DIR/thread_volume/$thread_no/sim:${SIM_DIR}"
CORE_VOL="$TMP_DIR/thread_volume/$thread_no/coredump:/home/coredump"
docker_cmd="docker run --privileged=true \
-v \"${REP_MOUNT_PARAM}\" \
-v \"${REP_MOUNT_DEBUG}\" \
-v \"${REP_MOUNT_LIB}\" \
-v \"${MOUNT_DIR}\" \
-v \"${SOURCEDIR}:/usr/local/src/\" \
-v \"${SIM_VOL}\" \
-v \"${CORE_VOL}\" \
--rm --ulimit core=-1 tdengine-ci:0.1 $CONTAINER_TESTDIR/tests/parallel_test/run_case.sh -d ${exec_dir} -c \"${cmd}\" ${extra_param}"
echo "$docker_cmd"
eval "$docker_cmd"
ret=$?
exit "$ret"