studio / flowforge_cli.py
Ava2lon's picture
Upload 5 files
9d33f09 verified
Raw
History Blame
1.85 kB
#!/usr/bin/env python3
import argparse
import json
from pathlib import Path
from app.models.workflow import WorkflowPackageRequest
from app.services.adapters import adapters
from app.services.intelligence import documentation, package_workflow, quality
from app.services.validation import validator
def load_workflow(path: Path):
return adapters.importers["json"].load(path.read_text(encoding="utf-8"))
def main() -> int:
parser = argparse.ArgumentParser(prog="flowforge", description="Validate and package n8n workflows")
subparsers = parser.add_subparsers(dest="command", required=True)
for command in ("validate", "quality", "docs", "package"):
subparser = subparsers.add_parser(command)
subparser.add_argument("workflow", type=Path)
if command in {"docs", "package"}:
subparser.add_argument("--output", type=Path)
args = parser.parse_args()
workflow = load_workflow(args.workflow)
if args.command == "validate":
result = validator.validate(workflow)
print(result.model_dump_json(indent=2))
return 0 if result.valid else 1
if args.command == "quality":
result = quality(workflow)
print(result.model_dump_json(indent=2))
return 0 if result.overall >= 70 else 1
if args.command == "docs":
content = documentation(workflow).markdown
if args.output:
args.output.write_text(content, encoding="utf-8")
else:
print(content)
return 0
content = package_workflow(WorkflowPackageRequest(workflow=workflow)).model_dump(mode="json")
serialized = json.dumps(content, indent=2)
if args.output:
args.output.write_text(serialized, encoding="utf-8")
else:
print(serialized)
return 0
if __name__ == "__main__":
raise SystemExit(main())