Coverage for src / mysingle / cli / __main__.py: 0%
53 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
« prev ^ index » next coverage.py v7.12.0, created at 2025-12-02 00:58 +0900
1"""
2MySingle CLI - 통합 명령줄 도구.
4현재 제공 기능:
5- 버전 관리
6- Proto 관리
8향후 확장: 패키지 관리, 서비스 스캐폴딩 등
9"""
11from __future__ import annotations
13import argparse
14import sys
16from .utils import console, print_error, print_header, print_info
19def show_interactive_menu() -> int:
20 """대화형 메뉴를 표시하고 사용자 선택을 처리합니다."""
21 from rich.prompt import Prompt
23 print_header("🚀 MySingle CLI")
25 console.print("[cyan]사용 가능한 명령:[/cyan]\n")
26 console.print(" [green]1.[/green] version - 패키지 버전 관리")
27 console.print(" [green]2.[/green] proto - Proto 파일 관리")
28 console.print(" [green]3.[/green] help - 도움말 표시")
29 console.print(" [green]q.[/green] quit - 종료\n")
31 choice = Prompt.ask("명령을 선택하세요", choices=["1", "2", "3", "q"], default="q")
33 if choice == "q":
34 print_info("종료합니다.")
35 return 0
36 elif choice == "1":
37 # Version subcommand interactive mode
38 from .core import version as version_cmd
40 return version_cmd.execute_interactive()
41 elif choice == "2":
42 # Proto subcommand - redirect to mysingle-proto
43 print_info("Proto 관리는 'mysingle-proto' 명령을 사용하세요.")
44 console.print("\n예시:")
45 console.print(" mysingle-proto init")
46 console.print(" mysingle-proto generate")
47 console.print(" mysingle-proto status\n")
48 return 0
49 elif choice == "3":
50 # Show help
51 main_with_args(["--help"])
52 return 0
54 return 0
57def main_with_args(argv: list[str] | None = None) -> int:
58 """명령줄 인자를 처리하는 메인 함수."""
59 parser = argparse.ArgumentParser(
60 prog="mysingle",
61 description="MySingle 플랫폼 CLI",
62 formatter_class=argparse.RawDescriptionHelpFormatter,
63 )
65 subparsers = parser.add_subparsers(dest="command", help="사용 가능한 명령")
67 # Version command
68 from .core import version as version_cmd
70 version_parser = subparsers.add_parser(
71 "version",
72 help="패키지 버전 관리",
73 description="패키지 버전을 업데이트하고 릴리즈를 생성합니다",
74 )
75 version_cmd.setup_parser(version_parser)
77 # Parse arguments
78 args = parser.parse_args(argv)
80 if not args.command:
81 return show_interactive_menu()
83 # Execute command
84 if args.command == "version":
85 return version_cmd.execute(args)
87 return 0
90def main() -> int:
91 """메인 진입점."""
92 try:
93 return main_with_args()
94 except KeyboardInterrupt:
95 print_error("\n사용자에 의해 중단되었습니다.")
96 return 130
97 except Exception as e:
98 print_error(f"예상치 못한 오류가 발생했습니다: {e}")
99 return 1
102if __name__ == "__main__":
103 sys.exit(main())