File size: 4,319 Bytes
b225a21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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: 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
        entry: poetry -C autogpt run isort
        files: ^autogpt/
        types: [file, python]
        language: system

      - id: isort-forge
        name: Lint (isort) - Forge
        entry: poetry -C forge run isort
        files: ^forge/
        types: [file, python]
        language: system

      - id: isort-benchmark
        name: Lint (isort) - Benchmark
        entry: poetry -C benchmark run isort
        files: ^benchmark/
        types: [file, python]
        language: system

  - repo: https://github.com/psf/black
    rev: 23.12.1
    # 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: Lint (Black)
        language_version: python3.10

  - 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) - AutoGPT
        alias: flake8-autogpt
        files: ^autogpt/(autogpt|scripts|tests)/
        args: [--config=autogpt/.flake8]

      - id: flake8
        name: Lint (Flake8) - Forge
        alias: flake8-forge
        files: ^forge/(forge|tests)/
        args: [--config=forge/.flake8]

      - id: flake8
        name: Lint (Flake8) - Benchmark
        alias: flake8-benchmark
        files: ^benchmark/(agbenchmark|tests)/((?!reports).)*[/.]
        args: [--config=benchmark/.flake8]

  - 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
        alias: pyright-autogpt
        entry: poetry -C autogpt run pyright
        args: [-p, autogpt, autogpt]
        # include forge source (since it's a path dependency) but exclude *_test.py files:
        files: ^(autogpt/((autogpt|scripts|tests)/|poetry\.lock$)|forge/(forge/.*(?<!_test)\.py|poetry\.lock)$)
        types: [file]
        language: system
        pass_filenames: false

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

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

  - repo: local
    hooks:
      - id: pytest-autogpt
        name: Run tests - AutoGPT (excl. slow tests)
        entry: bash -c 'cd 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: ^(autogpt/((autogpt|tests)/|poetry\.lock$)|forge/(forge/.*(?<!_test)\.py|poetry\.lock)$)
        language: system
        pass_filenames: false

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

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