fix(agents): include Neo4j in native release packaging

Closes #5489
This commit is contained in:
t8y2
2026-08-07 02:23:58 +08:00
parent 4a0de8c586
commit ef4d7664ac
6 changed files with 68 additions and 4 deletions
+10 -1
View File
@@ -5,6 +5,10 @@ import { appendFileSync, existsSync, readFileSync, writeFileSync } from "node:fs
const VERSIONS_PATH = "agents/versions.json";
const VERSION_SYNC_SUBJECT = "chore: bump module versions [skip ci]";
const JRE_BUILD_PATHS = new Set([".github/workflows/agents-release.yml"]);
const NATIVE_RELEASE_PACKAGING_PATHS = new Set([
".github/scripts/reuse-agent-release-assets.mjs",
"agents/scripts/version_agent_artifacts.py",
]);
function bumpPatchVersion(version) {
const match = /^(\d+)\.(\d+)\.(\d+)(.*)$/.exec(version);
@@ -126,16 +130,21 @@ export function evaluateAgentVersionBump({
if (commonChanged) {
logs.push("Common agent runtime changes detected; common-triggered bumps are limited to modules that package agents/common.");
}
const nativeReleasePackagingChanged = changedFiles.some((file) => NATIVE_RELEASE_PACKAGING_PATHS.has(file));
if (nativeReleasePackagingChanged) {
logs.push("Shared native release packaging changes detected; all native modules will be rebuilt.");
}
for (const { moduleName, module } of resolvedModules) {
const moduleChanged = pathChanged(changedFiles, module.modulePath);
// Only modules that package agents/common need installer-visible updates
// for shared Java runtime changes; native and standalone agents do not.
const commonAffectsModule = commonChanged && module.commonDependent;
const nativePackagingAffectsModule = nativeReleasePackagingChanged && module.nativeBuild;
const oldVersion = nextVersions[moduleName] ?? "0.1.0";
const prevVersion = prevVersions[moduleName] ?? "";
const manuallyVersioned = manualVersionsChanged && (!prevVersion || prevVersion !== oldVersion);
const moduleNeedsBuild = moduleChanged || commonAffectsModule || manuallyVersioned;
const moduleNeedsBuild = moduleChanged || commonAffectsModule || nativePackagingAffectsModule || manuallyVersioned;
if (!moduleNeedsBuild) {
logs.push(` ${moduleName}: no changes`);
@@ -96,6 +96,27 @@ test("bumps Neo4j from its native Go source directory", () => {
assert.deepEqual(result.nativeModules, ["neo4j"]);
});
test("rebuilds native modules when shared native packaging changes", () => {
const existing = new Set([
"agents/drivers/access",
"agents/drivers/access/build.gradle",
"agents/drivers/duckdb",
"agents/drivers/neo4j-go",
]);
const result = evaluateAgentVersionBump({
versions: { access: "0.1.37", duckdb: "0.1.3", neo4j: "0.1.40" },
changedFiles: ["agents/scripts/version_agent_artifacts.py"],
moduleExists: (path) => existing.has(path),
readModuleFile: () => "implementation project(':common')",
});
assert.equal(result.versions.access, "0.1.37");
assert.equal(result.versions.duckdb, "0.1.4");
assert.equal(result.versions.neo4j, "0.1.41");
assert.deepEqual(result.nativeModules, ["duckdb", "neo4j"]);
assert.deepEqual(result.reusedModules, ["access"]);
});
test("builds a manually versioned module even without runtime file changes", () => {
const result = evaluateAgentVersionBump({
versions: { duckdb: "0.1.1" },
@@ -15,7 +15,7 @@ import { basename, join } from "node:path";
import { tmpdir } from "node:os";
const REGISTRY_ASSET = "agent-registry.json";
const NATIVE_MODULES = new Set(["duckdb", "oracle", "xugu", "kingbase", "vastbase", "rabbitmq", "tdengine"]);
const NATIVE_MODULES = new Set(["duckdb", "oracle", "xugu", "kingbase", "neo4j", "vastbase", "rabbitmq", "tdengine"]);
const PLATFORMS = [
"macos-aarch64",
"macos-x64",
@@ -78,6 +78,24 @@ test("requires all TDengine native platforms when reusing a release", () => {
);
});
test("requires all Neo4j native platforms when reusing a release", () => {
const native = Object.fromEntries(
platforms.slice(0, -1).map((platform, index) => [platform, artifact(`dbx-agent-neo4j-0.1.40-${platform}.tar.zst`, String(index + 1))]),
);
const registry = { drivers: { neo4j: { version: "0.1.40", native } }, jres: {} };
assert.throws(
() => collectReusableAssetPlan({
registry,
release: releaseFor(Object.values(native)),
versions: { neo4j: "0.1.40" },
modules: ["neo4j"],
reuseJre: false,
}),
/missing=windows-x64/,
);
});
test("ignores zero-size legacy JAR placeholders for native-only modules", () => {
const native = Object.fromEntries(
platforms.map((platform, index) => [platform, artifact(`dbx-agent-duckdb-0.1.2-${platform}.tar.zst`, String(index + 1))]),