mirror of
https://github.com/t8y2/dbx.git
synced 2026-10-21 05:16:50 +00:00
@@ -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))]),
|
||||
|
||||
Reference in New Issue
Block a user