mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-08 03:00:28 -04:00
Our pre-commit hooks can use an update: the type check often fails based on stale type definitions, the OpenAPI schema isn't synced/checked, and the pre-push checks aren't installed by default. ### Changes 🏗️ - Regenerate Prisma `.pyi` type stub in on `prisma generate` hook: Pyright prefers `.pyi` over `.py`, so a stale stub shadows the regenerated `types.py` - Also run setup hooks (dependency install, `prisma generate`, `pnpm generate:api`) on `post-checkout`, to keep types and packages in sync after switching branches - Switch these hooks to `git diff` checks because `post-checkout` doesn't support file triggers/filters - Add `Check & Install dependencies - AutoGPT Platform - Frontend` hook - Add `Sync API types - AutoGPT Platform - Backend -> Frontend` hook - Fix non-ASCII issue in `export-api-schema` (`ensure_ascii=False`) - Exclude `pnpm-lock.yaml` from `detect-secrets` hook (integrity hashes cause ~1800 false positives) - Add `default_stages: [pre-commit]` - Add `post-checkout`, `pre-push` to `default_install_hook_types` ### Checklist 📋 #### For code changes: - [x] I have clearly listed my changes in the PR description - [x] I have made a test plan - [x] I have tested my changes according to the test plan: - [x] Tested locally
60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Script to generate OpenAPI JSON specification for the FastAPI app.
|
|
|
|
This script imports the FastAPI app from backend.api.rest_api and outputs
|
|
the OpenAPI specification as JSON to stdout or a specified file.
|
|
|
|
Usage:
|
|
`poetry run python generate_openapi_json.py`
|
|
`poetry run python generate_openapi_json.py --output openapi.json`
|
|
`poetry run python generate_openapi_json.py --indent 4 --output openapi.json`
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
|
|
import click
|
|
|
|
|
|
@click.command()
|
|
@click.option(
|
|
"--output",
|
|
type=click.Path(dir_okay=False, path_type=Path),
|
|
help="Output file path (default: stdout)",
|
|
)
|
|
@click.option(
|
|
"--pretty",
|
|
type=click.BOOL,
|
|
default=False,
|
|
help="Pretty-print JSON output (indented 2 spaces)",
|
|
)
|
|
def main(output: Path, pretty: bool):
|
|
"""Generate and output the OpenAPI JSON specification."""
|
|
openapi_schema = get_openapi_schema()
|
|
|
|
json_output = json.dumps(
|
|
openapi_schema, indent=2 if pretty else None, ensure_ascii=False
|
|
)
|
|
|
|
if output:
|
|
output.write_text(json_output, encoding="utf-8")
|
|
click.echo(f"✅ OpenAPI specification written to {output}\n\nPreview:")
|
|
click.echo(f"\n{json_output[:500]} ...")
|
|
else:
|
|
print(json_output)
|
|
|
|
|
|
def get_openapi_schema():
|
|
"""Get the OpenAPI schema from the FastAPI app"""
|
|
from backend.api.rest_api import app
|
|
|
|
return app.openapi()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
os.environ["LOG_LEVEL"] = "ERROR" # disable stdout log output
|
|
|
|
main()
|