Files
MyGoNavi/tools/diff-driver-agent-revisions.test.sh
Syngnat f7dd90a5d1 🐛 fix(ci): 修复 DuckDB 变更后驱动重建漏判
- 新增 diff-driver-agent-revisions 脚本,直接比对 base/head 在各平台实际生成出的 driver revision 差异
- dev/release workflow 的驱动检测改为源码归因结果叠加各平台 revision diff union,避免只改 DuckDB 时漏重建真实已变更的 driver assets
- 将 CI Go 版本固定到 1.24.3,减少 runner patch 漂移导致的 revision 指纹抖动
- 补充 DuckDB 变更命中与前端变更不误触发的 revision diff 回归测试
2026-06-05 15:03:44 +08:00

67 lines
2.2 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$SCRIPT_DIR"
same_commit_result="$(bash ./tools/diff-driver-agent-revisions.sh --base HEAD --head HEAD --platform darwin/arm64)"
if [[ -n "$same_commit_result" ]]; then
echo "expected same commit revision diff to be empty, got: ${same_commit_result}" >&2
exit 1
fi
tmpdir="$(mktemp -d "${TMPDIR:-/tmp}/gonavi-diff-driver-revisions.XXXXXX")"
cleanup() {
rm -rf "$tmpdir"
}
trap cleanup EXIT
rsync -a --exclude .git ./ "$tmpdir/" >/dev/null
(
cd "$tmpdir"
git init -q
git add .
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m initial
base="$(git rev-parse HEAD)"
perl -0pi -e 's/type DuckDB struct \{/\/\/ test revision change\n&type DuckDB struct {/' internal/db/duckdb_impl.go
git add internal/db/duckdb_impl.go
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m 'touch duckdb impl'
actual="$(bash ./tools/diff-driver-agent-revisions.sh --base "$base" --head HEAD --platform darwin/arm64)"
if [[ "$actual" != *"duckdb"* ]]; then
echo "expected duckdb-specific source change to include duckdb revision rebuild, got: ${actual:-<empty>}" >&2
exit 1
fi
)
tmpdir_frontend="$(mktemp -d "${TMPDIR:-/tmp}/gonavi-diff-driver-revisions-frontend.XXXXXX")"
cleanup_frontend() {
rm -rf "$tmpdir_frontend"
}
trap cleanup_frontend EXIT
rsync -a --exclude .git ./ "$tmpdir_frontend/" >/dev/null
(
cd "$tmpdir_frontend"
git init -q
git add .
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m initial
base="$(git rev-parse HEAD)"
perl -0pi -e 's/isAddingPrimaryKey:/isAddingPrimaryKeyFlag:/' frontend/src/components/tableDesignerDuckDbPrimaryKey.ts
git add frontend/src/components/tableDesignerDuckDbPrimaryKey.ts
git -c user.name=GoNavi -c user.email=gonavi@example.test commit -q -m 'touch frontend only'
actual="$(bash ./tools/diff-driver-agent-revisions.sh --base "$base" --head HEAD --platform darwin/arm64)"
if [[ -n "$actual" ]]; then
echo "expected frontend-only change to keep driver revision diff empty, got: ${actual}" >&2
exit 1
fi
)
echo "diff-driver-agent-revisions test passed"