mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-06 10:31:30 +08:00
⚡️ perf(ci): 减少 driver-agent 检测与平台 diff 的重复计算
- driver_agents job 一次性产出各平台 driver 集合,build 矩阵直接消费结果\n- detect 阶段补充 setup-go 与缓存,降低 revision 检测的冷启动成本\n- diff-driver-agent-revisions 支持候选 drivers 过滤,并行生成 base/head revisions\n- 补充脚本测试,覆盖候选 driver 过滤与无关 driver 忽略场景
This commit is contained in:
@@ -33,6 +33,20 @@ public_driver_name() {
|
||||
esac
|
||||
}
|
||||
|
||||
normalize_driver_name() {
|
||||
local value
|
||||
value="$(printf '%s' "${1:-}" | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]')"
|
||||
case "$value" in
|
||||
doris|diros) echo "diros" ;;
|
||||
mariadb|oceanbase|starrocks|sphinx|sqlserver|sqlite|duckdb|dameng|kingbase|highgo|vastbase|opengauss|gaussdb|iris|mongodb|tdengine|iotdb|clickhouse|elasticsearch)
|
||||
echo "$value"
|
||||
;;
|
||||
*)
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
extract_revision() {
|
||||
local file="$1"
|
||||
local driver="$2"
|
||||
@@ -49,6 +63,7 @@ extract_revision() {
|
||||
base_ref=""
|
||||
head_ref=""
|
||||
target_platform=""
|
||||
driver_csv=""
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
@@ -64,6 +79,10 @@ while [[ $# -gt 0 ]]; do
|
||||
target_platform="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
--drivers)
|
||||
driver_csv="${2:-}"
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
@@ -102,6 +121,27 @@ if [[ "$base_commit" == "$head_commit" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
declare -a drivers_to_compare=()
|
||||
if [[ -n "$driver_csv" ]]; then
|
||||
seen="|"
|
||||
IFS=',' read -r -a raw_drivers <<< "$driver_csv"
|
||||
for raw_driver in "${raw_drivers[@]}"; do
|
||||
driver="$(normalize_driver_name "$raw_driver")" || continue
|
||||
if [[ "$seen" == *"|$driver|"* ]]; then
|
||||
continue
|
||||
fi
|
||||
drivers_to_compare+=("$driver")
|
||||
seen="${seen}${driver}|"
|
||||
done
|
||||
else
|
||||
drivers_to_compare=("${DEFAULT_DRIVERS[@]}")
|
||||
fi
|
||||
|
||||
if [[ ${#drivers_to_compare[@]} -eq 0 ]]; then
|
||||
echo ""
|
||||
exit 0
|
||||
fi
|
||||
|
||||
base_worktree="$(mktemp -d "${TMPDIR:-/tmp}/gonavi-driver-rev-base.XXXXXX")"
|
||||
head_worktree="$(mktemp -d "${TMPDIR:-/tmp}/gonavi-driver-rev-head.XXXXXX")"
|
||||
|
||||
@@ -119,19 +159,27 @@ generate_revisions() {
|
||||
local worktree="$1"
|
||||
(
|
||||
cd "$worktree"
|
||||
GONAVI_DRIVER_REVISION_JOBS="${GONAVI_DRIVER_REVISION_JOBS:-1}" \
|
||||
if [[ -n "$driver_csv" ]]; then
|
||||
bash ./tools/generate-driver-agent-revisions.sh --platform "$target_platform" --drivers "$driver_csv" >/dev/null
|
||||
else
|
||||
bash ./tools/generate-driver-agent-revisions.sh --platform "$target_platform" >/dev/null
|
||||
fi
|
||||
)
|
||||
}
|
||||
|
||||
generate_revisions "$base_worktree"
|
||||
generate_revisions "$head_worktree"
|
||||
generate_revisions "$base_worktree" &
|
||||
base_pid=$!
|
||||
generate_revisions "$head_worktree" &
|
||||
head_pid=$!
|
||||
|
||||
wait "$base_pid"
|
||||
wait "$head_pid"
|
||||
|
||||
base_file="$base_worktree/internal/db/driver_agent_revisions_gen.go"
|
||||
head_file="$head_worktree/internal/db/driver_agent_revisions_gen.go"
|
||||
|
||||
declare -a changed_drivers=()
|
||||
for driver in "${DEFAULT_DRIVERS[@]}"; do
|
||||
for driver in "${drivers_to_compare[@]}"; do
|
||||
base_revision="$(extract_revision "$base_file" "$driver")"
|
||||
head_revision="$(extract_revision "$head_file" "$driver")"
|
||||
if [[ "$base_revision" != "$head_revision" ]]; then
|
||||
|
||||
@@ -35,6 +35,18 @@ rsync -a --exclude .git ./ "$tmpdir/" >/dev/null
|
||||
echo "expected duckdb-specific source change to include duckdb revision rebuild, got: ${actual:-<empty>}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
filtered_actual="$(bash ./tools/diff-driver-agent-revisions.sh --base "$base" --head HEAD --platform darwin/arm64 --drivers duckdb)"
|
||||
if [[ "$filtered_actual" != "duckdb" ]]; then
|
||||
echo "expected --drivers duckdb to keep duckdb revision rebuild only, got: ${filtered_actual:-<empty>}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ignored_actual="$(bash ./tools/diff-driver-agent-revisions.sh --base "$base" --head HEAD --platform darwin/arm64 --drivers mariadb)"
|
||||
if [[ -n "$ignored_actual" ]]; then
|
||||
echo "expected --drivers mariadb to ignore unrelated duckdb revision diff, got: ${ignored_actual}" >&2
|
||||
exit 1
|
||||
fi
|
||||
)
|
||||
|
||||
tmpdir_frontend="$(mktemp -d "${TMPDIR:-/tmp}/gonavi-diff-driver-revisions-frontend.XXXXXX")"
|
||||
|
||||
Reference in New Issue
Block a user