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.
27 lines
716 B
TypeScript
27 lines
716 B
TypeScript
import { sh, fatal } from "./shell.ts";
|
|
import { PROJECT_ROOT } from "../constants.ts";
|
|
|
|
export function getWorktreeList(): string[] {
|
|
const res = sh("git", ["worktree", "list", "--porcelain"], {
|
|
cwd: PROJECT_ROOT,
|
|
});
|
|
if (res.code !== 0) return [];
|
|
return res.stdout
|
|
.split("\n")
|
|
.filter((l) => l.startsWith("worktree "))
|
|
.map((l) => l.slice("worktree ".length).trim());
|
|
}
|
|
|
|
export function getCanonicalWorktree(): string {
|
|
const list = getWorktreeList();
|
|
return list[0] ?? PROJECT_ROOT;
|
|
}
|
|
|
|
export function getCurrentWorktree(): string {
|
|
const res = sh("git", ["rev-parse", "--show-toplevel"], {
|
|
cwd: PROJECT_ROOT,
|
|
});
|
|
if (res.code !== 0) fatal("not inside a git worktree");
|
|
return res.stdout;
|
|
}
|