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.
24 lines
727 B
TypeScript
24 lines
727 B
TypeScript
import { loadRegistry } from "../helpers/registry.ts";
|
|
|
|
export function cmdList(): void {
|
|
const registry = loadRegistry();
|
|
const entries = Object.values(registry).sort(
|
|
(a, b) => a.worktreeNum - b.worktreeNum,
|
|
);
|
|
if (entries.length === 0) {
|
|
console.log("(no registered worktrees)");
|
|
return;
|
|
}
|
|
const now = Date.now();
|
|
for (const e of entries) {
|
|
const offset = (e.worktreeNum - 1) * 100;
|
|
const lastUsed = e.lastUsedAt ?? e.createdAt;
|
|
const ageDays = Math.round((now - lastUsed) / (24 * 60 * 60 * 1000));
|
|
console.log(
|
|
` ${e.worktreeNum.toString().padStart(2)} | ${(
|
|
e.branchName ?? "(canonical)"
|
|
).padEnd(24)} | server :${8080 + offset} vite :${3000 + offset} | ${ageDays}d | ${e.path}`,
|
|
);
|
|
}
|
|
}
|