diff --git a/configforge/cli.py b/configforge/cli.py new file mode 100644 index 0000000..27df772 --- /dev/null +++ b/configforge/cli.py @@ -0,0 +1,54 @@ +"""Main CLI interface for ConfigForge.""" + +import sys + +import click + +from configforge import __version__ +from configforge.commands import validate, convert, generate, schema + + +def print_version(ctx: click.Context, param: click.Parameter, value: bool) -> None: + """Callback to print version and exit.""" + if not value or ctx.resilient_parsing: + return + + click.echo(f"ConfigForge v{__version__}") + sys.exit(0) + + +@click.group() +@click.option( + "--version", + is_flag=True, + callback=print_version, + expose_value=False, + help="Show version and exit", +) +@click.option( + "--verbose", + "-v", + is_flag=True, + default=False, + help="Enable verbose output", +) +@click.option( + "--quiet", + "-q", + is_flag=True, + default=False, + help="Suppress all output except errors", +) +def main(verbose: bool, quiet: bool) -> None: + """ConfigForge - A CLI tool for validating, converting, and generating schemas for configuration files.""" + pass + + +main.add_command(validate, "validate") +main.add_command(convert, "convert") +main.add_command(generate, "generate") +main.add_command(schema, "schema") + + +if __name__ == "__main__": + main()