default_install_hook_types: - pre-commit - pre-push - post-checkout default_stages: [pre-commit] repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: check-added-large-files args: ["--maxkb=500"] - id: fix-byte-order-marker - id: check-case-conflict - id: check-merge-conflict - id: check-symlinks - id: debug-statements - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 hooks: - id: detect-secrets name: Detect secrets description: Detects high entropy strings that are likely to be passwords. files: ^autogpt_platform/ exclude: pnpm-lock\.yaml$ stages: [pre-push] - repo: local # For proper type checking, all dependencies need to be up-to-date. # It's also a good idea to check that poetry.lock is consistent with pyproject.toml. hooks: - id: poetry-install name: Check & Install dependencies - AutoGPT Platform - Backend alias: poetry-install-platform-backend # include autogpt_libs source (since it's a path dependency) entry: > bash -c ' if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --name-only "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" else git diff --cached --name-only fi | grep -qE "^autogpt_platform/(backend|autogpt_libs)/poetry\.lock$" || exit 0; poetry -C autogpt_platform/backend install ' always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - id: poetry-install name: Check & Install dependencies - AutoGPT Platform - Libs alias: poetry-install-platform-libs entry: > bash -c ' if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --name-only "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" else git diff --cached --name-only fi | grep -qE "^autogpt_platform/autogpt_libs/poetry\.lock$" || exit 0; poetry -C autogpt_platform/autogpt_libs install ' always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - id: pnpm-install name: Check & Install dependencies - AutoGPT Platform - Frontend alias: pnpm-install-platform-frontend entry: > bash -c ' if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --name-only "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" else git diff --cached --name-only fi | grep -qE "^autogpt_platform/frontend/pnpm-lock\.yaml$" || exit 0; pnpm --prefix autogpt_platform/frontend install ' always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - id: poetry-install name: Check & Install dependencies - Classic - AutoGPT alias: poetry-install-classic-autogpt entry: > bash -c ' if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --name-only "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" else git diff --cached --name-only fi | grep -qE "^classic/(original_autogpt|forge)/poetry\.lock$" || exit 0; poetry -C classic/original_autogpt install ' # include forge source (since it's a path dependency) always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - id: poetry-install name: Check & Install dependencies - Classic - Forge alias: poetry-install-classic-forge entry: > bash -c ' if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --name-only "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" else git diff --cached --name-only fi | grep -qE "^classic/forge/poetry\.lock$" || exit 0; poetry -C classic/forge install ' always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - id: poetry-install name: Check & Install dependencies - Classic - Benchmark alias: poetry-install-classic-benchmark entry: > bash -c ' if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --name-only "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" else git diff --cached --name-only fi | grep -qE "^classic/benchmark/poetry\.lock$" || exit 0; poetry -C classic/benchmark install ' always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - repo: local # For proper type checking, Prisma client must be up-to-date. hooks: - id: prisma-generate name: Prisma Generate - AutoGPT Platform - Backend alias: prisma-generate-platform-backend entry: > bash -c ' if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --name-only "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" else git diff --cached --name-only fi | grep -qE "^autogpt_platform/((backend|autogpt_libs)/poetry\.lock|backend/schema\.prisma)$" || exit 0; cd autogpt_platform/backend && poetry run prisma generate && poetry run gen-prisma-stub ' # include everything that triggers poetry install + the prisma schema always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - id: export-api-schema name: Export API schema - AutoGPT Platform - Backend -> Frontend alias: export-api-schema-platform entry: > bash -c ' cd autogpt_platform/backend && poetry run export-api-schema --output ../frontend/src/app/api/openapi.json && cd ../frontend && pnpm prettier --write ./src/app/api/openapi.json ' files: ^autogpt_platform/backend/ language: system pass_filenames: false - id: generate-api-client name: Generate API client - AutoGPT Platform - Frontend alias: generate-api-client-platform-frontend entry: > bash -c ' SCHEMA=autogpt_platform/frontend/src/app/api/openapi.json; if [ -n "$PRE_COMMIT_FROM_REF" ]; then git diff --quiet "$PRE_COMMIT_FROM_REF" "$PRE_COMMIT_TO_REF" -- "$SCHEMA" && exit 0 else git diff --quiet HEAD -- "$SCHEMA" && exit 0 fi; cd autogpt_platform/frontend && pnpm generate:api ' always_run: true language: system pass_filenames: false stages: [pre-commit, post-checkout] - repo: https://github.com/astral-sh/ruff-pre-commit rev: v0.7.2 hooks: - id: ruff name: Lint (Ruff) - AutoGPT Platform - Backend alias: ruff-lint-platform-backend files: ^autogpt_platform/backend/ args: [--fix] - id: ruff name: Lint (Ruff) - AutoGPT Platform - Libs alias: ruff-lint-platform-libs files: ^autogpt_platform/autogpt_libs/ args: [--fix] - id: ruff-format name: Format (Ruff) - AutoGPT Platform - Libs alias: ruff-lint-platform-libs files: ^autogpt_platform/autogpt_libs/ - repo: local # isort needs the context of which packages are installed to function, so we # can't use a vendored isort pre-commit hook (which runs in its own isolated venv). hooks: - id: isort name: Lint (isort) - AutoGPT Platform - Backend alias: isort-platform-backend entry: poetry -P autogpt_platform/backend run isort -p backend files: ^autogpt_platform/backend/ types: [file, python] language: system - id: isort name: Lint (isort) - Classic - AutoGPT alias: isort-classic-autogpt entry: poetry -P classic/original_autogpt run isort -p autogpt files: ^classic/original_autogpt/ types: [file, python] language: system - id: isort name: Lint (isort) - Classic - Forge alias: isort-classic-forge entry: poetry -P classic/forge run isort -p forge files: ^classic/forge/ types: [file, python] language: system - id: isort name: Lint (isort) - Classic - Benchmark alias: isort-classic-benchmark entry: poetry -P classic/benchmark run isort -p agbenchmark files: ^classic/benchmark/ types: [file, python] language: system - repo: https://github.com/psf/black rev: 24.10.0 # Black has sensible defaults, doesn't need package context, and ignores # everything in .gitignore, so it works fine without any config or arguments. hooks: - id: black name: Format (Black) - repo: https://github.com/PyCQA/flake8 rev: 7.0.0 # To have flake8 load the config of the individual subprojects, we have to call # them separately. hooks: - id: flake8 name: Lint (Flake8) - Classic - AutoGPT alias: flake8-classic-autogpt files: ^classic/original_autogpt/(autogpt|scripts|tests)/ args: [--config=classic/original_autogpt/.flake8] - id: flake8 name: Lint (Flake8) - Classic - Forge alias: flake8-classic-forge files: ^classic/forge/(forge|tests)/ args: [--config=classic/forge/.flake8] - id: flake8 name: Lint (Flake8) - Classic - Benchmark alias: flake8-classic-benchmark files: ^classic/benchmark/(agbenchmark|tests)/((?!reports).)*[/.] args: [--config=classic/benchmark/.flake8] - repo: local hooks: - id: prettier name: Format (Prettier) - AutoGPT Platform - Frontend alias: format-platform-frontend entry: bash -c 'cd autogpt_platform/frontend && npx prettier --write $(echo "$@" | sed "s|autogpt_platform/frontend/||g")' -- files: ^autogpt_platform/frontend/ types: [file] language: system - repo: local # To have watertight type checking, we check *all* the files in an affected # project. To trigger on poetry.lock we also reset the file `types` filter. hooks: - id: pyright name: Typecheck - AutoGPT Platform - Backend alias: pyright-platform-backend entry: poetry -C autogpt_platform/backend run pyright # include forge source (since it's a path dependency) but exclude *_test.py files: files: ^autogpt_platform/(backend/((backend|test)/|(\w+\.py|poetry\.lock)$)|autogpt_libs/(autogpt_libs/.*(?