diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d67aba9edc..ed86498fd9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,7 +9,7 @@ repos: - id: check-merge-conflict - id: check-symlinks - id: debug-statements - + - repo: https://github.com/Yelp/detect-secrets rev: v1.5.0 hooks: @@ -19,26 +19,116 @@ repos: files: ^autogpt_platform/ stages: [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 + entry: poetry -C autogpt_platform/backend install + # include autogpt_libs source (since it's a path dependency) + files: ^autogpt_platform/(backend|autogpt_libs)/poetry\.lock$ + types: [file] + language: system + pass_filenames: false + + - id: poetry-install + name: Check & Install dependencies - AutoGPT Platform - Libs + alias: poetry-install-platform-libs + entry: poetry -C autogpt_platform/autogpt_libs install + files: ^autogpt_platform/autogpt_libs/poetry\.lock$ + types: [file] + language: system + pass_filenames: false + + - id: poetry-install + name: Check & Install dependencies - Classic - AutoGPT + alias: poetry-install-classic-autogpt + entry: poetry -C classic/original_autogpt install + # include forge source (since it's a path dependency) + files: ^classic/(original_autogpt|forge)/poetry\.lock$ + types: [file] + language: system + pass_filenames: false + + - id: poetry-install + name: Check & Install dependencies - Classic - Forge + alias: poetry-install-classic-forge + entry: poetry -C classic/forge install + files: ^classic/forge/poetry\.lock$ + types: [file] + language: system + pass_filenames: false + + - id: poetry-install + name: Check & Install dependencies - Classic - Benchmark + alias: poetry-install-classic-benchmark + entry: poetry -C classic/benchmark install + files: ^classic/benchmark/poetry\.lock$ + types: [file] + language: system + pass_filenames: false + + - 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 'cd autogpt_platform/backend && poetry run prisma generate' + # include everything that triggers poetry install + the prisma schema + files: ^autogpt_platform/((backend|autogpt_libs)/poetry\.lock|backend/schema.prisma)$ + types: [file] + language: system + pass_filenames: false + + - 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] + - 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-autogpt - name: Lint (isort) - AutoGPT + - id: isort + name: Lint (isort) - AutoGPT Platform - Backend + alias: isort-platform-backend + entry: poetry -C autogpt_platform/backend run isort + files: ^autogpt_platform/backend/ + types: [file, python] + language: system + + - id: isort + name: Lint (isort) - Classic - AutoGPT + alias: isort-classic-autogpt entry: poetry -C classic/original_autogpt run isort files: ^classic/original_autogpt/ types: [file, python] language: system - - id: isort-forge - name: Lint (isort) - Forge + - id: isort + name: Lint (isort) - Classic - Forge + alias: isort-classic-forge entry: poetry -C classic/forge run isort files: ^classic/forge/ types: [file, python] language: system - - id: isort-benchmark - name: Lint (isort) - Benchmark + - id: isort + name: Lint (isort) - Classic - Benchmark + alias: isort-classic-benchmark entry: poetry -C classic/benchmark run isort files: ^classic/benchmark/ types: [file, python] @@ -51,7 +141,6 @@ repos: hooks: - id: black name: Lint (Black) - language_version: python3.12 - repo: https://github.com/PyCQA/flake8 rev: 7.0.0 @@ -59,20 +148,20 @@ repos: # them separately. hooks: - id: flake8 - name: Lint (Flake8) - AutoGPT - alias: flake8-autogpt + 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) - Forge - alias: flake8-forge + name: Lint (Flake8) - Classic - Forge + alias: flake8-classic-forge files: ^classic/forge/(forge|tests)/ args: [--config=classic/forge/.flake8] - id: flake8 - name: Lint (Flake8) - Benchmark - alias: flake8-benchmark + name: Lint (Flake8) - Classic - Benchmark + alias: flake8-classic-benchmark files: ^classic/benchmark/(agbenchmark|tests)/((?!reports).)*[/.] args: [--config=classic/benchmark/.flake8] @@ -81,31 +170,52 @@ repos: # project. To trigger on poetry.lock we also reset the file `types` filter. hooks: - id: pyright - name: Typecheck - AutoGPT - alias: pyright-autogpt - entry: poetry -C classic/original_autogpt run pyright - args: [-p, autogpt, autogpt] + name: Typecheck - AutoGPT Platform - Backend + alias: pyright-platform-backend + entry: poetry -C autogpt_platform/backend run pyright + args: [-p, autogpt_platform/backend, autogpt_platform/backend] # include forge source (since it's a path dependency) but exclude *_test.py files: - files: ^(classic/original_autogpt/((autogpt|scripts|tests)/|poetry\.lock$)|classic/forge/(classic/forge/.*(?=0.1.3" +[[package]] +name = "ruff" +version = "0.7.2" +description = "An extremely fast Python linter and code formatter, written in Rust." +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.7.2-py3-none-linux_armv6l.whl", hash = "sha256:b73f873b5f52092e63ed540adefc3c36f1f803790ecf2590e1df8bf0a9f72cb8"}, + {file = "ruff-0.7.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5b813ef26db1015953daf476202585512afd6a6862a02cde63f3bafb53d0b2d4"}, + {file = "ruff-0.7.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:853277dbd9675810c6826dad7a428d52a11760744508340e66bf46f8be9701d9"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21aae53ab1490a52bf4e3bf520c10ce120987b047c494cacf4edad0ba0888da2"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ccc7e0fc6e0cb3168443eeadb6445285abaae75142ee22b2b72c27d790ab60ba"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd77877a4e43b3a98e5ef4715ba3862105e299af0c48942cc6d51ba3d97dc859"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e00163fb897d35523c70d71a46fbaa43bf7bf9af0f4534c53ea5b96b2e03397b"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3c54b538633482dc342e9b634d91168fe8cc56b30a4b4f99287f4e339103e88"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b792468e9804a204be221b14257566669d1db5c00d6bb335996e5cd7004ba80"}, + {file = "ruff-0.7.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba53ed84ac19ae4bfb4ea4bf0172550a2285fa27fbb13e3746f04c80f7fa088"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b19fafe261bf741bca2764c14cbb4ee1819b67adb63ebc2db6401dcd652e3748"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:28bd8220f4d8f79d590db9e2f6a0674f75ddbc3847277dd44ac1f8d30684b828"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9fd67094e77efbea932e62b5d2483006154794040abb3a5072e659096415ae1e"}, + {file = "ruff-0.7.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:576305393998b7bd6c46018f8104ea3a9cb3fa7908c21d8580e3274a3b04b691"}, + {file = "ruff-0.7.2-py3-none-win32.whl", hash = "sha256:fa993cfc9f0ff11187e82de874dfc3611df80852540331bc85c75809c93253a8"}, + {file = "ruff-0.7.2-py3-none-win_amd64.whl", hash = "sha256:dd8800cbe0254e06b8fec585e97554047fb82c894973f7ff18558eee33d1cb88"}, + {file = "ruff-0.7.2-py3-none-win_arm64.whl", hash = "sha256:bb8368cd45bba3f57bb29cbb8d64b4a33f8415d0149d2655c5c8539452ce7760"}, + {file = "ruff-0.7.2.tar.gz", hash = "sha256:2b14e77293380e475b4e3a7a368e14549288ed2931fce259a6f99978669e844f"}, +] + [[package]] name = "six" version = "1.16.0" @@ -1724,4 +1751,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = ">=3.10,<4.0" -content-hash = "f80654aae542b1f2f3a44a01f197f87ffbaea52f474dd2cc2b72b8d56b155563" +content-hash = "55475acb18a4fd5dc74bc64d89a24fff1f41e8cd61304c15ec3df2503bbeba56" diff --git a/autogpt_platform/autogpt_libs/pyproject.toml b/autogpt_platform/autogpt_libs/pyproject.toml index 5089b7d681..873cd6dae0 100644 --- a/autogpt_platform/autogpt_libs/pyproject.toml +++ b/autogpt_platform/autogpt_libs/pyproject.toml @@ -19,7 +19,14 @@ supabase = "^2.9.1" [tool.poetry.group.dev.dependencies] redis = "^5.2.0" +ruff = "^0.7.2" [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" + +[tool.ruff] +line-length = 88 + +[tool.ruff.lint] +extend-select = ["I"] # sort dependencies