feat: add relay:tmux helper for relay watcher
This commit is contained in:
@@ -11,6 +11,7 @@ import { pickProvider } from "../provider-web.js";
|
||||
import type { Provider } from "../utils.js";
|
||||
import { createDefaultDeps, logWebSelfId, logTwilioFrom, monitorTwilio } from "./deps.js";
|
||||
import { ensureTwilioEnv } from "../env.js";
|
||||
import { spawnRelayTmux } from "./relay_tmux.js";
|
||||
|
||||
export function buildProgram() {
|
||||
const program = new Command();
|
||||
@@ -250,5 +251,18 @@ With Tailscale:
|
||||
}
|
||||
});
|
||||
|
||||
program
|
||||
.command("relay:tmux")
|
||||
.description("Run relay --verbose inside tmux (session warelay-relay), restarting if already running")
|
||||
.action(async () => {
|
||||
try {
|
||||
const session = await spawnRelayTmux();
|
||||
defaultRuntime.log(info(`tmux session started: ${session} (pane running "pnpm warelay relay --verbose")`));
|
||||
} catch (err) {
|
||||
defaultRuntime.error(danger(`Failed to start relay tmux session: ${String(err)}`));
|
||||
defaultRuntime.exit(1);
|
||||
}
|
||||
});
|
||||
|
||||
return program;
|
||||
}
|
||||
|
||||
29
src/cli/relay_tmux.ts
Normal file
29
src/cli/relay_tmux.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { spawn } from "node:child_process";
|
||||
|
||||
const SESSION = "warelay-relay";
|
||||
|
||||
export async function spawnRelayTmux(cmd = "pnpm warelay relay --verbose") {
|
||||
await killSession(SESSION);
|
||||
await new Promise<void>((resolve, reject) => {
|
||||
const child = spawn("tmux", ["new", "-d", "-s", SESSION, cmd], {
|
||||
stdio: "inherit",
|
||||
shell: false,
|
||||
});
|
||||
child.on("error", reject);
|
||||
child.on("exit", (code) => {
|
||||
if (code === 0) resolve();
|
||||
else reject(new Error(`tmux exited with code ${code}`));
|
||||
});
|
||||
});
|
||||
return SESSION;
|
||||
}
|
||||
|
||||
async function killSession(name: string) {
|
||||
await new Promise<void>((resolve) => {
|
||||
const child = spawn("tmux", ["kill-session", "-t", name], {
|
||||
stdio: "ignore",
|
||||
});
|
||||
child.on("exit", () => resolve());
|
||||
child.on("error", () => resolve());
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user