mirror of
https://github.com/different-ai/openwork
synced 2026-04-25 17:15:34 +02:00
* feat(server-v2): add standalone runtime and SDK foundation * docs(server-v2): drop planning task checklists * build(server-v2): generate OpenAPI and SDK during dev * build(server-v2): generate API artifacts before builds * build(server-v2): drop duplicate root SDK generation * build(app): remove SDK generation hooks --------- Co-authored-by: src-opn <src-opn@users.noreply.github.com>
59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
import os from "node:os";
|
|
import { dirname, join, resolve } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { createAppDependencies } from "../src/context/app-dependencies.js";
|
|
import { createApp } from "../src/app-factory.js";
|
|
import { resolveServerV2Version } from "../src/version.js";
|
|
|
|
const scriptDir = dirname(fileURLToPath(import.meta.url));
|
|
const packageDir = resolve(scriptDir, "..");
|
|
const outputPath = resolve(packageDir, "openapi/openapi.json");
|
|
|
|
async function writeIfChanged(filePath: string, contents: string) {
|
|
try {
|
|
const current = await readFile(filePath, "utf8");
|
|
if (current === contents) {
|
|
return false;
|
|
}
|
|
} catch {
|
|
// ignore missing file
|
|
}
|
|
|
|
await mkdir(dirname(filePath), { recursive: true });
|
|
await writeFile(filePath, contents, "utf8");
|
|
return true;
|
|
}
|
|
|
|
async function main() {
|
|
const workingDirectory = await mkdtemp(join(os.tmpdir(), "openwork-server-v2-openapi-"));
|
|
const dependencies = createAppDependencies({
|
|
environment: "test",
|
|
inMemory: true,
|
|
version: resolveServerV2Version(),
|
|
workingDirectory,
|
|
});
|
|
try {
|
|
const app = createApp({ dependencies });
|
|
const response = await app.request("http://openwork.local/openapi.json");
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to generate OpenAPI document: ${response.status} ${response.statusText}`);
|
|
}
|
|
|
|
const document = await response.json();
|
|
const contents = `${JSON.stringify(document, null, 2)}\n`;
|
|
const changed = await writeIfChanged(outputPath, contents);
|
|
|
|
process.stdout.write(`[openwork-server-v2] ${changed ? "wrote" : "verified"} ${outputPath}\n`);
|
|
} finally {
|
|
await dependencies.close();
|
|
await rm(workingDirectory, { force: true, recursive: true });
|
|
}
|
|
}
|
|
|
|
main().catch((error) => {
|
|
process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : String(error)}\n`);
|
|
process.exit(1);
|
|
});
|