import assert from "node:assert/strict"; import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import test from "node:test"; import { DEFAULT_SIDECAR_PLATFORMS } from "./packages.js"; import { bumpCargoVersions, bumpPackageJsons } from "./version.js"; async function writeJson(root: string, rel: string, value: unknown) { const path = join(root, rel); await mkdir(join(path, ".."), { recursive: true }); await writeFile(path, `${JSON.stringify(value, null, "\t")}\n`); } test("bumpCargoVersions bumps [workspace.package] and AgentOS path deps", async () => { const repoRoot = await mkdtemp(join(tmpdir(), "agentos-version-test-")); try { await writeFile( join(repoRoot, "Cargo.toml"), `[workspace.package] version = "0.2.0" [workspace.dependencies] agentos-protocol = { path = "crates/agentos-protocol", version = "0.2.0-rc.3" } agentos-kernel = { path = "crates/kernel", version = "0.2.0-rc.3" } serde = "1" `, ); await mkdir(join(repoRoot, "crates", "excluded-core"), { recursive: true }); await writeFile( join(repoRoot, "crates", "excluded-core", "Cargo.toml"), `[package] name = "agentos-excluded-core" version = "0.2.0" [dependencies] agentos-protocol = { path = "../agentos-protocol", version = "0.2.0" } `, ); await bumpCargoVersions(repoRoot, "0.3.0"); const cargoToml = await readFile(join(repoRoot, "Cargo.toml"), "utf8"); // a6 workspace version bumped... assert.match(cargoToml, /\[workspace\.package\]\nversion = "0\.3\.0"/); // ...AgentOS-owned crate deps (path = "crates/...") bumped... assert.match( cargoToml, /agentos-protocol = \{ path = "crates\/agentos-protocol", version = "0\.3\.0" \}/, ); assert.match( cargoToml, /agentos-kernel = \{ path = "crates\/kernel", version = "0\.3\.0" \}/, ); assert.match(cargoToml, /serde = "1"/); const excludedCargoToml = await readFile( join(repoRoot, "crates", "excluded-core", "Cargo.toml"), "utf8", ); assert.match(excludedCargoToml, /version = "0\.3\.0"/); assert.match( excludedCargoToml, /agentos-protocol = \{ path = "\.\.\/agentos-protocol", version = "0\.3\.0" \}/, ); } finally { await rm(repoRoot, { recursive: true, force: true }); } }); test("bumpPackageJsons injects sidecar platform optional dependencies", async () => { const repoRoot = await mkdtemp(join(tmpdir(), "agentos-version-test-")); try { await writeJson(repoRoot, "package.json", { name: "agentos-workspace", private: true, packageManager: "pnpm@10.13.1", }); await writeFile( join(repoRoot, "pnpm-workspace.yaml"), [ "packages:", " - packages/*", " - packages/sidecar-binary/npm/*", " - packages/runtime-sidecar/npm/*", "", ].join("\n"), ); for (const [rel, name] of [ ["packages/agentos", "@rivet-dev/agentos"], ["packages/core", "@rivet-dev/agentos-core"], ["packages/sidecar-binary", "@rivet-dev/agentos-sidecar"], ["packages/runtime-sidecar", "@rivet-dev/agentos-runtime-sidecar"], ...DEFAULT_SIDECAR_PLATFORMS.map((platform) => [ `packages/sidecar-binary/npm/${platform}`, `@rivet-dev/agentos-sidecar-${platform}`, ]), ...DEFAULT_SIDECAR_PLATFORMS.map((platform) => [ `packages/runtime-sidecar/npm/${platform}`, `@rivet-dev/agentos-runtime-sidecar-${platform}`, ]), ]) { await writeJson(repoRoot, join(rel, "package.json"), { name, version: "0.0.0", }); } await bumpPackageJsons(repoRoot, "0.3.0"); const sidecarManifest = JSON.parse( await readFile( join(repoRoot, "packages/sidecar-binary/package.json"), "utf8", ), ); assert.deepEqual( sidecarManifest.optionalDependencies, Object.fromEntries( DEFAULT_SIDECAR_PLATFORMS.map((platform) => [ `@rivet-dev/agentos-sidecar-${platform}`, "0.3.0", ]).sort(), ), ); const runtimeSidecarManifest = JSON.parse( await readFile( join(repoRoot, "packages/runtime-sidecar/package.json"), "utf8", ), ); assert.deepEqual( runtimeSidecarManifest.optionalDependencies, Object.fromEntries( DEFAULT_SIDECAR_PLATFORMS.map((platform) => [ `@rivet-dev/agentos-runtime-sidecar-${platform}`, "0.3.0", ]).sort(), ), ); } finally { await rm(repoRoot, { recursive: true, force: true }); } });