from __future__ import annotations import argparse import os from .build import handler as build_handler from .common import make_compose def add_parser(sub: argparse._SubParsersAction) -> None: p = sub.add_parser("up", help="Start compose stack (coredns + infinito).") p.add_argument( "--skip-entry-init", action="store_true", help="Do not run ${INFINITO_SRC_DIR}/scripts/docker/entry.sh true after stack is up.", ) p.add_argument( "--when-down", action="store_true", help="Only start stack if it is not already running.", ) p.set_defaults(_handler=handler) def _maybe_build_missing() -> int: if os.environ["INFINITO_BUILD"] != "1": return 0 build_args = argparse.Namespace( missing=True, no_cache=False, target="", tag="", push=False, publish=False, registry="", owner="", repo_prefix="", version="", stable="", ) return int(build_handler(build_args)) def _stack_is_running() -> bool: compose = make_compose() r = compose.run(["ps", "-q", "infinito"], check=False, capture=True) cid = (r.stdout or "").strip() return bool(cid) def handler(args: argparse.Namespace) -> int: if args.when_down and _stack_is_running(): print(">>> Stack already running — skipping up") return 0 rc = _maybe_build_missing() if rc != 0: return rc compose = make_compose() compose.up(run_entry_init=not bool(args.skip_entry_init)) return 0