@@ -317,6 +317,22 @@ def _wait_for_ready(
317317 return last_status
318318
319319
320+ def _resolve_env_push_target (raw_env_id : str | None , raw_path : str ) -> tuple [str , Path ]:
321+ base_path = Path (raw_path ).expanduser ().resolve ()
322+
323+ if raw_env_id is None :
324+ env_dir = base_path
325+ env_id_underscore = env_dir .name
326+ if not env_id_underscore :
327+ raise ValueError ("Could not infer environment id from --path." )
328+ else :
329+ _ , env_id_underscore = _normalize_env_id (raw_env_id )
330+ env_dir = base_path / env_id_underscore
331+
332+ env_id_dash = env_id_underscore .replace ("_" , "-" )
333+ return env_id_dash , env_dir
334+
335+
320336def main (argv : list [str ] | None = None ) -> int :
321337 parser = argparse .ArgumentParser (
322338 description = (
@@ -326,29 +342,38 @@ def main(argv: list[str] | None = None) -> int:
326342 )
327343 parser .add_argument (
328344 "env" ,
329- help = "Environment id (hyphenated, e.g. openenv-echo)." ,
345+ nargs = "?" ,
346+ help = (
347+ "Optional environment id (hyphenated, e.g. openenv-echo). "
348+ "When provided, it is appended to --path as the final directory name "
349+ "after converting hyphens to underscores."
350+ ),
330351 )
331352 parser .add_argument (
332353 "-p" ,
333354 "--path" ,
334355 default = "./environments" ,
335- help = "Path to the environments directory (default: ./environments)." ,
356+ help = (
357+ "Base path for environments (default: ./environments). "
358+ "When env id is omitted, this should point directly to the target "
359+ "environment directory."
360+ ),
336361 )
337362 args = parser .parse_args (argv )
338363
339364 try :
340- env_id_dash , env_id_underscore = _normalize_env_id (args .env )
365+ env_id_dash , env_path = _resolve_env_push_target (args .env , args .path )
366+ env_id_underscore = env_path .name
341367 except ValueError as e :
342368 print (str (e ), file = sys .stderr )
343369 return 2
344370
345- environments_root = Path (args .path ).expanduser ().resolve ()
346- if not environments_root .exists () or not environments_root .is_dir ():
347- print (f"Environments path not found: { environments_root } " , file = sys .stderr )
371+ if not env_path .exists () or not env_path .is_dir ():
372+ print (f"Environment path not found: { env_path } " , file = sys .stderr )
348373 return 2
349374
350375 try :
351- project_dir = _resolve_project_dir (environments_root , env_id_underscore )
376+ project_dir = _resolve_project_dir (env_path . parent , env_id_underscore )
352377 dockerfile = _find_dockerfile (project_dir )
353378 except FileNotFoundError as e :
354379 print (str (e ), file = sys .stderr )
0 commit comments