diff --git a/app/env_pro/commands/validate_cmd.py b/app/env_pro/commands/validate_cmd.py new file mode 100644 index 0000000..cfdffeb --- /dev/null +++ b/app/env_pro/commands/validate_cmd.py @@ -0,0 +1,62 @@ +"""Validation commands for env-pro.""" + +import click + + +@click.command() +@click.option("--schema", "-s", help="Path to schema file") +@click.option("--verbose/--quiet", default=False) +def validate(schema: str, verbose: bool): + """Validate environment variables against schema.""" + from pathlib import Path + from env_pro.core.validator import Validator + from env_pro.core.profile import get_active_profile, get_profile_vars + + schema_path = Path(schema) if schema else Path.cwd() / ".env.schema.yaml" + + if not schema_path.exists(): + if verbose: + click.echo("No schema file found. Create .env.schema.yaml to enable validation.") + else: + click.echo("ok") + return + + validator = Validator.from_file(schema_path) + profile = get_active_profile() or "default" + vars = get_profile_vars(profile) + + errors = validator.validate(vars) + + if errors: + click.echo(f"Validation failed with {len(errors)} error(s):") + for error in errors: + click.echo(f" {error}") + raise click.ClickException("Validation failed") + else: + click.echo("Validation passed") + + +@click.command() +def check(): + """Check for required variables.""" + from env_pro.core.profile import get_active_profile, get_profile_vars + from env_pro.core.validator import Validator + + profile = get_active_profile() or "default" + vars = get_profile_vars(profile) + + validator = Validator.from_file() + + if validator.schema is None: + click.echo("No schema defined") + return + + errors = validator.validate(vars) + required_errors = [e for e in errors if "missing" in e.message.lower()] + + if required_errors: + click.echo(f"Missing required variables:") + for e in required_errors: + click.echo(f" {e.key}") + else: + click.echo("All required variables are set")