bun dw spins up a fully isolated per-worktree dev stack: Neon DB branch, Dragonfly + ElasticMQ via docker compose, portless aliases, tmux session, and emulate.dev Google OAuth. Workers, dev server, vite, checkout, and stripe-listen run as concurrently siblings. bun setup-test auto-runs on first dw and seeds unit-test-org via clearOrg+setupOrg+ensureDefaultStripeAccount with 13 features + team invites for all 5 useautumn.com members. Hardcoded localhost URLs in test scenarios now read AUTUMN_TEST_BASE_URL/AUTUMN_TEST_VITE_URL. preload-env.ts loads .env.local so bun t/cm/setup-test route to the worktree server. 1265-line scripts/dw.ts split into scripts/dw/ module (index + commands + helpers). server/src/db/initDrizzle.ts reverted to upstream (search_path concerns solved by per-branch Neon isolation). Workers enabled in agent worktrees now that SQS is per-worktree via ElasticMQ.
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
// Preload script - runs BEFORE main script imports are evaluated
|
|
// This allows local .env to override Infisical secrets.
|
|
import { existsSync, readFileSync } from "node:fs";
|
|
import { join, resolve } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { loadLocalEnv } from "@server/utils/envUtils.js";
|
|
|
|
loadLocalEnv();
|
|
|
|
// Worktree-aware: `bun dw` writes per-worktree `.env.local` files to each
|
|
// workspace dir. infisical run + server/.env stop short of these, so things
|
|
// like AUTUMN_TEST_BASE_URL and DATABASE_URL never get the worktree value.
|
|
// Loading here covers `bun t`, `bun cm`, `bun setup-test`, and any direct
|
|
// `bun test` invocation from the repo root. Missing files = no-op (canonical
|
|
// repo has none of these).
|
|
const __preloadRoot = resolve(
|
|
fileURLToPath(new URL(".", import.meta.url)),
|
|
"..",
|
|
);
|
|
for (const rel of [
|
|
"server/.env.local",
|
|
"vite/.env.local",
|
|
"apps/checkout/.env.local",
|
|
]) {
|
|
const abs = join(__preloadRoot, rel);
|
|
if (!existsSync(abs)) continue;
|
|
const contents = readFileSync(abs, "utf-8");
|
|
let loadedCount = 0;
|
|
for (const line of contents.split(/\r?\n/)) {
|
|
const m = line.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);
|
|
if (!m) continue;
|
|
// Worktree-local overrides win over infisical + server/.env.
|
|
process.env[m[1]] = m[2];
|
|
loadedCount++;
|
|
}
|
|
if (loadedCount > 0) {
|
|
console.log(`[preload] loaded ${rel} — AUTUMN_TEST_BASE_URL=${process.env.AUTUMN_TEST_BASE_URL || "(unset)"}`);
|
|
}
|
|
}
|