diff --git a/src/zzpyjenkins/cli.py b/src/zzpyjenkins/cli.py index 58f86c1..15901a2 100644 --- a/src/zzpyjenkins/cli.py +++ b/src/zzpyjenkins/cli.py @@ -1,55 +1,34 @@ """Command-line interface for zzpyjenkins.""" -import os -from typing import Optional - import click from rich.console import Console +from .config import ConfigError, get_default_config_path, get_server_config, load_config from .jenkins_client import JenkinsClient console = Console() @click.group() -@click.option("--url", "-u", help="Jenkins server URL (default: JENKINS_URL env)") -@click.option( - "--username", "-U", help="Jenkins username (default: JENKINS_USERNAME env)" -) -@click.option( - "--password", "-P", help="Jenkins password/token (default: JENKINS_PASSWORD env)" -) +@click.option("--server", "-s", required=True, help="Server name from config file") @click.version_option() @click.pass_context -def main( - ctx: click.Context, - url: Optional[str], - username: Optional[str], - password: Optional[str], -): +def main(ctx: click.Context, server: str): """A CLI tool to interact with Jenkins server for building jobs.""" ctx.ensure_object(dict) - ctx.obj["url"] = url - ctx.obj["username"] = username - ctx.obj["password"] = password + ctx.obj["server"] = server def get_client(ctx: click.Context) -> JenkinsClient: - """Create Jenkins client from options or environment variables.""" - url = ctx.obj.get("url") or os.environ.get("JENKINS_URL") - username = ctx.obj.get("username") or os.environ.get("JENKINS_USERNAME") - password = ( - ctx.obj.get("password") - or os.environ.get("JENKINS_PASSWORD") - or os.environ.get("JENKINS_TOKEN") - ) + """Create Jenkins client from config file.""" + server_name = ctx.obj["server"] + config_path = get_default_config_path() - if not all([url, username, password]): - console.print("[red]Error: Missing Jenkins configuration.[/red]") - console.print( - "Use --url/--username/--password options or set environment variables:" - ) - console.print(" JENKINS_URL, JENKINS_USERNAME, JENKINS_PASSWORD") + try: + config = load_config(config_path) + url, username, password = get_server_config(config, server_name) + except ConfigError as e: + console.print(f"[red]Error: {e}[/red]") raise SystemExit(1) return JenkinsClient(url, username, password) @@ -66,7 +45,7 @@ def info(ctx: click.Context): @main.command("list") @click.option("--pattern", "-p", default=None, help="Filter jobs by name pattern") @click.pass_context -def list_jobs(ctx: click.Context, pattern: Optional[str]): +def list_jobs(ctx: click.Context, pattern: str | None): """List all jobs on Jenkins server.""" client = get_client(ctx) client.list_jobs(pattern) @@ -96,7 +75,7 @@ def build(ctx: click.Context, job_name: str, params: tuple[str, ...]): @click.argument("job_name") @click.argument("build_number", type=int, required=False) @click.pass_context -def status(ctx: click.Context, job_name: str, build_number: Optional[int]): +def status(ctx: click.Context, job_name: str, build_number: int | None): """Get build status for a job.""" client = get_client(ctx) client.get_build_status(job_name, build_number)