🔧 chore(driver): 自动生成驱动代理 revision

- 新增脚本按 optional driver-agent 源码依赖生成 revision 指纹
- 构建脚本与 dev/release workflow 在打包前自动刷新 revision
- 生成驱动 revision 映射并补充 optional driver 覆盖校验
This commit is contained in:
Syngnat
2026-04-29 17:20:47 +08:00
parent 0c1586d7a4
commit 824aafbdea
8 changed files with 309 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
// Code generated by tools/generate-driver-agent-revisions.sh; DO NOT EDIT.
package db
func init() {
optionalDriverAgentRevisions = map[string]string{
"mariadb": "src-d6c5c6717338834c",
"diros": "src-ed4f0f64ed28d3fa",
"sphinx": "src-f52324f0a812d7c8",
"sqlserver": "src-ec165f18de9cd8b3",
"sqlite": "src-9dea6c76bc931114",
"duckdb": "src-14027ac1de3c50c7",
"dameng": "src-1a08880ff5bbcf31",
"kingbase": "src-28eed0e4d942b724",
"highgo": "src-76146bf97f07f25c",
"vastbase": "src-555b60c4863542b6",
"mongodb": "src-2540a7350c4243aa",
"tdengine": "src-ce3e4a9c46f6b92d",
"clickhouse": "src-78e5ada4da56704d",
}
}

View File

@@ -36,6 +36,11 @@ var optionalGoDrivers = map[string]struct{}{
"clickhouse": {},
}
// optionalDriverAgentRevisions 记录 GoNavi 对各可选 driver-agent 包装逻辑的兼容版本。
// 该 map 由 tools/generate-driver-agent-revisions.sh 按 driver-agent 源码依赖自动生成,
// 避免人工判断需要 bump 哪个驱动 revision。
var optionalDriverAgentRevisions = map[string]string{}
var (
externalDriverDirMu sync.RWMutex
externalDriverDir string
@@ -105,6 +110,10 @@ func IsOptionalGoDriverBuildIncluded(driverType string) bool {
return optionalGoDriverBuildIncluded(normalizeRuntimeDriverType(driverType))
}
func OptionalDriverAgentRevision(driverType string) string {
return strings.TrimSpace(optionalDriverAgentRevisions[normalizeRuntimeDriverType(driverType)])
}
// IsBuiltinDriver 返回指定驱动类型是否为核心内置驱动(始终可用,无需安装)。
func IsBuiltinDriver(driverType string) bool {
_, ok := coreBuiltinDrivers[normalizeRuntimeDriverType(driverType)]

View File

@@ -31,6 +31,17 @@ func TestBuiltinLikeDriversRemainAvailable(t *testing.T) {
}
}
func TestOptionalDriverAgentRevisionsGeneratedForOptionalDrivers(t *testing.T) {
for driverType := range optionalGoDrivers {
if revision := OptionalDriverAgentRevision(driverType); revision == "" {
t.Fatalf("%s 缺少自动生成的 driver-agent revision", driverType)
}
}
if OptionalDriverAgentRevision("doris") != OptionalDriverAgentRevision("diros") {
t.Fatalf("doris/diros revision 应归一一致")
}
}
func TestManagedDriverRequiresInstallMarker(t *testing.T) {
tmpDir := t.TempDir()
SetExternalDriverDownloadDirectory(tmpDir)