Skip to content

Commit efcb347

Browse files
committed
feat(cli): add --with-server flag to CLI mode
1 parent 935788d commit efcb347

1 file changed

Lines changed: 40 additions & 1 deletion

File tree

rogue/__main__.py

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ def parse_args() -> Namespace:
9595
help="Run in non-interactive CLI mode",
9696
parents=[common_parser()],
9797
)
98+
cli_parser.add_argument(
99+
"--with-server",
100+
action="store_true",
101+
default=False,
102+
help="Start the rogue server alongside the CLI",
103+
)
104+
set_server_args(cli_parser)
98105
set_cli_args(cli_parser)
99106

100107
# TUI mode
@@ -263,7 +270,39 @@ def main() -> None:
263270
if args.mode == "server":
264271
run_server(args, background=False)
265272
elif args.mode == "cli":
266-
exit_code = asyncio.run(run_cli(args))
273+
server_process = None
274+
if args.with_server:
275+
try:
276+
server_process = run_server(
277+
args,
278+
background=True,
279+
)
280+
except Exception as e:
281+
logger.error(f"Failed to start rogue server: {e}")
282+
sys.exit(1)
283+
if not server_process:
284+
logger.error("Failed to start rogue server. Exiting.")
285+
sys.exit(1)
286+
client_host = (
287+
"127.0.0.1"
288+
if args.host in {"0.0.0.0", "::"} # nosec B104
289+
else args.host
290+
)
291+
args.rogue_server_url = f"http://{client_host}:{args.port}"
292+
293+
exit_code = 1
294+
try:
295+
exit_code = asyncio.run(run_cli(args))
296+
except KeyboardInterrupt:
297+
logger.info("Keyboard interrupt received. Exiting.")
298+
exit_code = 0
299+
except Exception as e:
300+
logger.error(f"CLI execution failed: {e}")
301+
exit_code = 1
302+
finally:
303+
if server_process:
304+
server_process.terminate()
305+
server_process.join()
267306
sys.exit(exit_code)
268307
elif args.mode == "tui":
269308
if not RogueTuiInstaller().install_rogue_tui():

0 commit comments

Comments
 (0)