71 lines · 2.3 KB · TypeScript
RawDownload
// One-off: boot a cloud stack (emulators + dev-db + vite) for ad-hoc// recording, outside vitest. Same wiring as setup/cloud.globalsetup.ts.//// Usage: bun e2e/scripts/boot-stack.ts <cloud-app-dir> <port>//   (emulators take port+1/+2, dev-db port+3; Ctrl-C tears down)import { rmSync } from "node:fs";import { resolve } from "node:path"; import { createEmulator } from "@executor-js/emulate"; import { bootProcesses, waitForHttp } from "../setup/boot"; const [cloudDirArg, portArg] = process.argv.slice(2);if (!cloudDirArg || !portArg) {  console.error("usage: bun e2e/scripts/boot-stack.ts <cloud-app-dir> <port>");  process.exit(1);}const cloudDir = resolve(cloudDirArg);const port = Number(portArg);const baseUrl = `http://127.0.0.1:${port}`; const workos = await createEmulator({ service: "workos", port: port + 1 });const autumn = await createEmulator({ service: "autumn", port: port + 2 }); const dbPath = resolve(cloudDir, ".e2e-record-db");rmSync(dbPath, { recursive: true, force: true }); const env = {  WORKOS_API_URL: workos.url,  AUTUMN_API_URL: autumn.url,  WORKOS_API_KEY: "sk_test_emulate",  WORKOS_CLIENT_ID: "client_e2e_emulate",  WORKOS_COOKIE_PASSWORD: "e2e_cookie_password_0123456789abcdef0123456789abcdef",  AUTUMN_SECRET_KEY: "am_test_emulate",  ENCRYPTION_KEY: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",  DATABASE_URL: `postgresql://postgres:postgres@127.0.0.1:${port + 3}/postgres`,  EXECUTOR_DIRECT_DATABASE_URL: "true",  CLOUDFLARE_INCLUDE_PROCESS_ENV: "true",  VITE_PUBLIC_SITE_URL: baseUrl,  MCP_AUTHKIT_DOMAIN: workos.url,  MCP_RESOURCE_ORIGIN: baseUrl,  ALLOW_LOCAL_NETWORK: "true",  DEV_DB_PORT: String(port + 3),  DEV_DB_PATH: dbPath,}; const procs = bootProcesses(  [    { cmd: "bun", args: ["run", "scripts/dev-db.ts"], cwd: cloudDir, env },    {      cmd: "bunx",      args: ["vite", "dev", "--port", String(port), "--strictPort", "--host", "127.0.0.1"],      cwd: cloudDir,      env,    },  ],  { label: "record-stack" },); await waitForHttp(baseUrl);await waitForHttp(`${baseUrl}/api/auth/login`, { expectRedirect: true });console.log(`ready: ${baseUrl}`); const teardown = async () => {  await procs.teardown();  await workos.close();  await autumn.close();  process.exit(0);};process.on("SIGINT", () => void teardown());process.on("SIGTERM", () => void teardown());