import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";import { tmpdir } from "node:os";import { dirname, join, resolve } from "node:path"; import { describe, expect, it } from "vitest"; import { releasePackageFiles, updateReleasePackageVersions,} from "./update-release-package-versions";import { writeKeybindingsJsonSchemas } from "./lib/keybindings-schema";import { writeServerSettingsJsonSchemas } from "./lib/server-settings-schema"; describe("updateReleasePackageVersions", () => { it("updates package versions and writes latest plus versioned config schemas", () => { const rootDir = mkdtempSync(join(tmpdir(), "t3-release-version-bump-")); try { for (const relativePath of releasePackageFiles) { const filePath = resolve(rootDir, relativePath); mkdirSync(dirname(filePath), { recursive: true }); writeFileSync( filePath, `${JSON.stringify({ name: relativePath, version: "0.0.0" }, null, 2)}\n`, ); } const result = updateReleasePackageVersions("1.2.3", { rootDir }); expect(result.changed).toBe(true); for (const relativePath of releasePackageFiles) { const packageJson = JSON.parse(readFileSync(resolve(rootDir, relativePath), "utf8")) as { version?: string; }; expect(packageJson.version).toBe("1.2.3"); } expect( JSON.parse( readFileSync(resolve(rootDir, "apps/marketing/public/schemas/settings.json"), "utf8"), ), ).toMatchObject({ title: "T3 Code Server Settings" }); expect( JSON.parse( readFileSync( resolve(rootDir, "apps/marketing/public/schemas/settings/1.2.3.json"), "utf8", ), ), ).toMatchObject({ title: "T3 Code Server Settings" }); expect( JSON.parse( readFileSync(resolve(rootDir, "apps/marketing/public/schemas/keybindings.json"), "utf8"), ), ).toMatchObject({ title: "T3 Code Keybindings" }); expect( JSON.parse( readFileSync( resolve(rootDir, "apps/marketing/public/schemas/keybindings/1.2.3.json"), "utf8", ), ), ).toMatchObject({ title: "T3 Code Keybindings" }); } finally { rmSync(rootDir, { recursive: true, force: true }); } }); it("skips versioned schema snapshots when the latest schemas are unchanged", () => { const rootDir = mkdtempSync(join(tmpdir(), "t3-release-version-bump-")); try { for (const relativePath of releasePackageFiles) { const filePath = resolve(rootDir, relativePath); mkdirSync(dirname(filePath), { recursive: true }); writeFileSync( filePath, `${JSON.stringify({ name: relativePath, version: "1.2.3" }, null, 2)}\n`, ); } writeServerSettingsJsonSchemas({ rootDir }); writeKeybindingsJsonSchemas({ rootDir }); const result = updateReleasePackageVersions("1.2.3", { rootDir }); expect(result.changed).toBe(false); expect( existsSync(resolve(rootDir, "apps/marketing/public/schemas/settings/1.2.3.json")), ).toBe(false); expect( existsSync(resolve(rootDir, "apps/marketing/public/schemas/keybindings/1.2.3.json")), ).toBe(false); } finally { rmSync(rootDir, { recursive: true, force: true }); } });});
import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
import { tmpdir } from "node:os";
import { dirname, join, resolve } from "node:path";
import { describe, expect, it } from "vitest";
import {
releasePackageFiles,
updateReleasePackageVersions,
} from "./update-release-package-versions";
import { writeKeybindingsJsonSchemas } from "./lib/keybindings-schema";
import { writeServerSettingsJsonSchemas } from "./lib/server-settings-schema";
describe("updateReleasePackageVersions", () => {
it("updates package versions and writes latest plus versioned config schemas", () => {
const rootDir = mkdtempSync(join(tmpdir(), "t3-release-version-bump-"));
try {
for (const relativePath of releasePackageFiles) {
const filePath = resolve(rootDir, relativePath);
mkdirSync(dirname(filePath), { recursive: true });
writeFileSync(
filePath,
`${JSON.stringify({ name: relativePath, version: "0.0.0" }, null, 2)}\n`,
);
}
const result = updateReleasePackageVersions("1.2.3", { rootDir });
expect(result.changed).toBe(true);
for (const relativePath of releasePackageFiles) {
const packageJson = JSON.parse(readFileSync(resolve(rootDir, relativePath), "utf8")) as {
version?: string;
};
expect(packageJson.version).toBe("1.2.3");
}
expect(
JSON.parse(
readFileSync(resolve(rootDir, "apps/marketing/public/schemas/settings.json"), "utf8"),
),
).toMatchObject({ title: "T3 Code Server Settings" });
expect(
JSON.parse(
readFileSync(
resolve(rootDir, "apps/marketing/public/schemas/settings/1.2.3.json"),
"utf8",
),
),
).toMatchObject({ title: "T3 Code Server Settings" });
expect(
JSON.parse(
readFileSync(resolve(rootDir, "apps/marketing/public/schemas/keybindings.json"), "utf8"),
),
).toMatchObject({ title: "T3 Code Keybindings" });
expect(
JSON.parse(
readFileSync(
resolve(rootDir, "apps/marketing/public/schemas/keybindings/1.2.3.json"),
"utf8",
),
),
).toMatchObject({ title: "T3 Code Keybindings" });
} finally {
rmSync(rootDir, { recursive: true, force: true });
}
});
it("skips versioned schema snapshots when the latest schemas are unchanged", () => {
const rootDir = mkdtempSync(join(tmpdir(), "t3-release-version-bump-"));
try {
for (const relativePath of releasePackageFiles) {
const filePath = resolve(rootDir, relativePath);
mkdirSync(dirname(filePath), { recursive: true });
writeFileSync(
filePath,
`${JSON.stringify({ name: relativePath, version: "1.2.3" }, null, 2)}\n`,
);
}
writeServerSettingsJsonSchemas({ rootDir });
writeKeybindingsJsonSchemas({ rootDir });
const result = updateReleasePackageVersions("1.2.3", { rootDir });
expect(result.changed).toBe(false);
expect(
existsSync(resolve(rootDir, "apps/marketing/public/schemas/settings/1.2.3.json")),
).toBe(false);
expect(
existsSync(resolve(rootDir, "apps/marketing/public/schemas/keybindings/1.2.3.json")),
).toBe(false);
} finally {
rmSync(rootDir, { recursive: true, force: true });
}
});
});