import { strict as assert } from "node:assert"; import { readFileSync } from "node:fs"; import { resolve } from "node:path"; import { test } from "vitest"; const { evaluateAgentVersionBump } = await importScript(".github/scripts/bump-agent-versions.mjs"); function importScript(path: string): Promise> { const source = readFileSync(resolve(path), "utf8").replace(/^#!.*\r?\n/, ""); return import(`data:text/javascript;base64,${Buffer.from(source).toString("base64")}`); } function moduleFixture(paths: string[], files: Record = {}) { const existing = new Set(paths); return { moduleExists: (path: string) => existing.has(path), readModuleFile: (path: string) => files[path] ?? "", }; } test("common agent runtime changes bump only modules that package common", () => { const fixture = moduleFixture( [ "agents/drivers/access", "agents/drivers/access/build.gradle", "agents/drivers/kafka", "agents/drivers/kafka/build.gradle", "agents/drivers/mongodb", "agents/drivers/mongodb/build.gradle", "agents/drivers/oracle-go", "agents/drivers/xugu", ], { "agents/drivers/mongodb/build.gradle": "dependencies { implementation project(':common') }", }, ); const result = evaluateAgentVersionBump({ versions: { access: "0.1.0", kafka: "0.1.0", mongodb: "0.1.0", oracle: "0.1.0", xugu: "0.1.0", }, changedFiles: ["agents/common/src/main/resources/agent-protocol-v1.json"], legacyStandaloneModules: new Set(["kafka", "mongodb"]), ...fixture, }); assert.equal(result.changed, true); assert.deepEqual(result.versions, { access: "0.1.1", kafka: "0.1.0", mongodb: "0.1.1", oracle: "0.1.0", xugu: "0.1.0", }); }); test("common agent test changes do not bump driver versions", () => { const fixture = moduleFixture(["agents/drivers/access", "agents/drivers/access/build.gradle"]); const result = evaluateAgentVersionBump({ versions: { access: "0.1.0", }, changedFiles: ["agents/common/src/test/java/com/dbx/agent/AbstractJdbcAgentTest.java"], ...fixture, }); assert.equal(result.changed, false); assert.deepEqual(result.versions, { access: "0.1.0", }); }); test("native agent source changes still bump native module versions", () => { const fixture = moduleFixture([ "agents/drivers/access", "agents/drivers/access/build.gradle", "agents/drivers/oracle-go", "agents/drivers/xugu", ]); const result = evaluateAgentVersionBump({ versions: { access: "0.1.0", oracle: "0.1.0", xugu: "0.1.0", }, changedFiles: ["agents/drivers/oracle-go/main.go", "agents/drivers/xugu/main.go"], ...fixture, }); assert.equal(result.changed, true); assert.deepEqual(result.versions, { access: "0.1.0", oracle: "0.1.1", xugu: "0.1.1", }); }); test("manual agent versions are preserved while other changed modules auto bump", () => { const fixture = moduleFixture([ "agents/drivers/access", "agents/drivers/access/build.gradle", "agents/drivers/dameng", "agents/drivers/dameng/build.gradle", ]); const result = evaluateAgentVersionBump({ versions: { access: "0.1.2", dameng: "0.1.0", }, prevVersions: { access: "0.1.1", dameng: "0.1.0", }, changedFiles: ["agents/common/src/main/java/com/dbx/agent/JdbcExecutor.java", "agents/versions.json"], ...fixture, }); assert.equal(result.changed, true); assert.deepEqual(result.versions, { access: "0.1.2", dameng: "0.1.1", }); });