Open-Harness-Leaderboard / apps /control-api /src /generate-openapi.ts
joelniklaus's picture
joelniklaus HF Staff
deploy: 3804adc3edeea13240af7f334f11c3f9f046b73f
fc9f257 verified
Raw
History Blame Contribute Delete
2.21 kB
import { mkdir, mkdtemp, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { dirname, join, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import openapiTS, { astToString, type OpenAPI3 } from "openapi-typescript";
import { buildApp } from "./app.js";
import type { AppConfig } from "./config.js";
import { createRuntime } from "./runtime.js";
const repository = resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
const scratch = await mkdtemp(join(tmpdir(), "harbor-hf-openapi-"));
const bucket = join(scratch, "bucket");
await mkdir(bucket, { recursive: true });
const config: AppConfig = {
node_env: "test",
port: 7860,
namespace: "example",
bucket_id: "example/artifacts",
bucket_root: bucket,
store_mode: "filesystem",
projection_path: join(scratch, "projection.sqlite"),
auth_path: join(scratch, "auth.sqlite"),
profiles_root: join(repository, "profiles"),
capacity_profile_alias: null,
max_active_jobs: 16,
task_image_mirror_repository: "mirror.example/harbor-hf/tasks",
web_root: join(scratch, "web"),
auth_mode: "development",
write_mode: "disabled",
public_origin: "http://127.0.0.1:7860",
oauth: null,
hf_token: null,
hf_inference_token: null,
reconcile_interval_ms: 1000,
sync_interval_ms: 30000,
observe_interval_ms: 1000,
worker_receipt_grace_ms: 0,
source_revision: "development",
bootstrap_operator_subjects: [],
};
const runtime = await createRuntime(config);
const app = await buildApp(runtime);
try {
await runtime.initialize();
await app.ready();
const document = app.swagger();
const documentPath = join(repository, "docs", "control-api-v1.openapi.json");
await writeFile(documentPath, `${JSON.stringify(document, null, 2)}\n`, "utf8");
const generated = astToString(await openapiTS(document as unknown as OpenAPI3));
const outputPath = join(
repository,
"apps",
"control-web",
"src",
"generated",
"api.ts",
);
await mkdir(dirname(outputPath), { recursive: true });
await writeFile(outputPath, generated, "utf8");
} finally {
await app.close();
await runtime.close();
await rm(scratch, { recursive: true, force: true });
}