File size: 10,540 Bytes
3382f47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
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/
        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
        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]

      - 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/.*(?<!_test)\.py|poetry\.lock)$)
        types: [file]
        language: system
        pass_filenames: false

      - id: pyright
        name: Typecheck - AutoGPT Platform - Libs
        alias: pyright-platform-libs
        entry: poetry -C autogpt_platform/autogpt_libs run pyright
        files: ^autogpt_platform/autogpt_libs/(autogpt_libs/|poetry\.lock$)
        types: [file]
        language: system
        pass_filenames: false

      - id: pyright
        name: Typecheck - Classic - AutoGPT
        alias: pyright-classic-autogpt
        entry: poetry -C classic/original_autogpt run pyright
        # 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/(forge/.*(?<!_test)\.py|poetry\.lock)$)
        types: [file]
        language: system
        pass_filenames: false

      - id: pyright
        name: Typecheck - Classic - Forge
        alias: pyright-classic-forge
        entry: poetry -C classic/forge run pyright
        files: ^classic/forge/(forge/|poetry\.lock$)
        types: [file]
        language: system
        pass_filenames: false

      - id: pyright
        name: Typecheck - Classic - Benchmark
        alias: pyright-classic-benchmark
        entry: poetry -C classic/benchmark run pyright
        files: ^classic/benchmark/(agbenchmark/|tests/|poetry\.lock$)
        types: [file]
        language: system
        pass_filenames: false

  - repo: local
    hooks:
      - id: tsc
        name: Typecheck - AutoGPT Platform - Frontend
        entry: bash -c 'cd autogpt_platform/frontend && pnpm type-check'
        files: ^autogpt_platform/frontend/
        types: [file]
        language: system
        pass_filenames: false

  # - repo: local
  #   hooks:
  #     - id: pytest
  #       name: Run tests - AutoGPT Platform - Backend
  #       alias: pytest-platform-backend
  #       entry: bash -c 'cd autogpt_platform/backend && poetry run pytest'
  #       # include autogpt_libs source (since it's a path dependency) but exclude *_test.py files:
  #       files: ^autogpt_platform/(backend/((backend|test)/|poetry\.lock$)|autogpt_libs/(autogpt_libs/.*(?<!_test)\.py|poetry\.lock)$)
  #       language: system
  #       pass_filenames: false

  #     - id: pytest
  #       name: Run tests - Classic - AutoGPT (excl. slow tests)
  #       alias: pytest-classic-autogpt
  #       entry: bash -c 'cd classic/original_autogpt && poetry run pytest --cov=autogpt -m "not slow" tests/unit tests/integration'
  #       # include forge source (since it's a path dependency) but exclude *_test.py files:
  #       files: ^(classic/original_autogpt/((autogpt|tests)/|poetry\.lock$)|classic/forge/(forge/.*(?<!_test)\.py|poetry\.lock)$)
  #       language: system
  #       pass_filenames: false

  #     - id: pytest
  #       name: Run tests - Classic - Forge (excl. slow tests)
  #       alias: pytest-classic-forge
  #       entry: bash -c 'cd classic/forge && poetry run pytest --cov=forge -m "not slow"'
  #       files: ^classic/forge/(forge/|tests/|poetry\.lock$)
  #       language: system
  #       pass_filenames: false

  #     - id: pytest
  #       name: Run tests - Classic - Benchmark
  #       alias: pytest-classic-benchmark
  #       entry: bash -c 'cd classic/benchmark && poetry run pytest --cov=benchmark'
  #       files: ^classic/benchmark/(agbenchmark/|tests/|poetry\.lock$)
  #       language: system
  #       pass_filenames: false