.pre-commit-config.yaml 9.52 KB
Newer Older
1
2
3
default_install_hook_types:
  - pre-commit
  - commit-msg
4
5
6
default_stages:
  - pre-commit # Run locally
  - manual # Run in CI
7
exclude: 'vllm/third_party/.*'
8
9
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
10
  rev: v0.14.0
11
  hooks:
12
  - id: ruff-check
13
    args: [--output-format, github, --fix]
14
  - id: ruff-format
15
- repo: https://github.com/crate-ci/typos
Jiayi Yan's avatar
Jiayi Yan committed
16
  rev: v1.43.5
17
  hooks:
18
  - id: typos
19
    args: [--force-exclude]
20
- repo: https://github.com/pre-commit/mirrors-clang-format
21
  rev: v21.1.2
22
23
  hooks:
  - id: clang-format
24
    exclude: 'csrc/(moe/topk_softmax_kernels.cu|quantization/gguf/(ggml-common.h|dequantize.cuh|vecdotq.cuh|mmq.cuh|mmvq.cuh))|vllm/third_party/.*'
25
26
    types_or: [c++, cuda]
    args: [--style=file, --verbose]
27
28
- repo: https://github.com/DavidAnson/markdownlint-cli2
  rev: v0.21.0
29
  hooks:
30
31
32
  - id: markdownlint-cli2
    language_version: lts
    args: [--fix]
Harry Mellor's avatar
Harry Mellor committed
33
    exclude: ^CLAUDE\.md$
34
- repo: https://github.com/rhysd/actionlint
35
  rev: v1.7.7
36
37
  hooks:
  - id: actionlint
38
- repo: https://github.com/astral-sh/uv-pre-commit
39
  rev: 0.11.1
40
41
  hooks:
    - id: pip-compile
42
43
44
45
46
47
48
49
50
51
      args: [
        requirements/test/cuda.in,
        -c, requirements/cuda.txt,
        -o, requirements/test/cuda.txt,
        --index-strategy, unsafe-best-match,
        --torch-backend, cu130,
        --python-platform, x86_64-manylinux_2_28,
        --python-version, "3.12",
      ]
      files: ^requirements/(common|cuda|test/cuda)\.(in|txt)$
52
53
54
55
    - id: pip-compile
      alias: pip-compile-rocm
      name: pip-compile-rocm
      args: [
56
        requirements/test/rocm.in,
57
        -c, requirements/rocm.txt,
58
59
        -o, requirements/test/rocm.txt,
        --index-strategy, unsafe-best-match,
60
61
62
63
64
65
66
67
68
69
70
        --python-platform, x86_64-manylinux_2_28,
        --python-version, "3.12",
        # Exclude torch and CUDA/NVIDIA packages
        --no-emit-package, torch,
        --no-emit-package, torchvision,
        --no-emit-package, torchaudio,
        --no-emit-package, triton,
        --no-emit-package, cuda-bindings,
        --no-emit-package, cuda-pathfinder,
        --no-emit-package, cuda-toolkit,
        --no-emit-package, cupy-cuda12x,
71
        # nvidia packages (unsuffixed / unified naming)
72
73
74
75
        --no-emit-package, nvidia-cublas,
        --no-emit-package, nvidia-cuda-cupti,
        --no-emit-package, nvidia-cuda-nvrtc,
        --no-emit-package, nvidia-cuda-runtime,
76
        --no-emit-package, nvidia-cudnn,
77
78
79
80
81
        --no-emit-package, nvidia-cufft,
        --no-emit-package, nvidia-cufile,
        --no-emit-package, nvidia-curand,
        --no-emit-package, nvidia-cusolver,
        --no-emit-package, nvidia-cusparse,
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
        --no-emit-package, nvidia-cusparselt,
        --no-emit-package, nvidia-nccl,
        --no-emit-package, nvidia-nvjitlink,
        --no-emit-package, nvidia-nvshmem,
        --no-emit-package, nvidia-nvtx,
        # nvidia cu12 packages
        --no-emit-package, nvidia-cublas-cu12,
        --no-emit-package, nvidia-cuda-cupti-cu12,
        --no-emit-package, nvidia-cuda-nvrtc-cu12,
        --no-emit-package, nvidia-cuda-runtime-cu12,
        --no-emit-package, nvidia-cudnn-cu12,
        --no-emit-package, nvidia-cufft-cu12,
        --no-emit-package, nvidia-cufile-cu12,
        --no-emit-package, nvidia-curand-cu12,
        --no-emit-package, nvidia-cusolver-cu12,
        --no-emit-package, nvidia-cusparse-cu12,
        --no-emit-package, nvidia-cusparselt-cu12,
        --no-emit-package, nvidia-nccl-cu12,
        --no-emit-package, nvidia-nvjitlink-cu12,
        --no-emit-package, nvidia-nvshmem-cu12,
        --no-emit-package, nvidia-nvtx-cu12,
        # nvidia cu13 packages
        --no-emit-package, nvidia-cublas-cu13,
        --no-emit-package, nvidia-cuda-cupti-cu13,
        --no-emit-package, nvidia-cuda-nvrtc-cu13,
        --no-emit-package, nvidia-cuda-runtime-cu13,
        --no-emit-package, nvidia-cudnn-cu13,
        --no-emit-package, nvidia-cufft-cu13,
        --no-emit-package, nvidia-cufile-cu13,
        --no-emit-package, nvidia-curand-cu13,
        --no-emit-package, nvidia-cusolver-cu13,
        --no-emit-package, nvidia-cusparse-cu13,
114
115
        --no-emit-package, nvidia-cusparselt-cu13,
        --no-emit-package, nvidia-nccl-cu13,
116
        --no-emit-package, nvidia-nvjitlink-cu13,
117
        --no-emit-package, nvidia-nvshmem-cu13,
118
        --no-emit-package, nvidia-nvtx-cu13,
119
      ]
120
121
122
123
124
125
126
127
128
129
130
131
132
133
      files: ^requirements/(common|rocm|test/rocm)\.(in|txt)$
    - id: pip-compile
      alias: pip-compile-xpu
      name: pip-compile-xpu
      args: [
        requirements/test/xpu.in,
        -c, requirements/xpu.txt,
        -o, requirements/test/xpu.txt,
        --index-strategy, unsafe-best-match,
        --torch-backend, xpu,
        --python-platform, x86_64-manylinux_2_39,
        --python-version, "3.12",
      ]
      files: ^requirements/(common|xpu|test/xpu)\.(in|txt)$
134
135
- repo: local
  hooks:
136
  - id: format-torch-nightly-test
137
    name: reformat test/nightly-torch.txt to be in sync with test/cuda.in
138
    language: python
139
    entry: python tools/pre_commit/generate_nightly_torch_test.py
140
    files: ^requirements/test/cuda\.(in|txt)$
141
  - id: mypy-local
142
143
    name: Run mypy locally for lowest supported Python version
    entry: python tools/pre_commit/mypy.py 0 "3.10"
144
    stages: [pre-commit] # Don't run in CI
145
146
147
148
    <<: &mypy_common
      language: python
      types_or: [python, pyi]
      require_serial: true
149
      additional_dependencies: ["mypy[faster-cache]==1.19.1", regex, types-cachetools, types-setuptools, types-PyYAML, types-requests, types-torch, pydantic]
150
151
  - id: mypy-3.10 # TODO: Use https://github.com/pre-commit/mirrors-mypy when mypy setup is less awkward
    name: Run mypy for Python 3.10
152
153
    entry: python tools/pre_commit/mypy.py 1 "3.10"
    <<: *mypy_common
154
    stages: [manual] # Only run in CI
155
156
  - id: mypy-3.11 # TODO: Use https://github.com/pre-commit/mirrors-mypy when mypy setup is less awkward
    name: Run mypy for Python 3.11
157
158
    entry: python tools/pre_commit/mypy.py 1 "3.11"
    <<: *mypy_common
159
    stages: [manual] # Only run in CI
160
161
  - id: mypy-3.12 # TODO: Use https://github.com/pre-commit/mirrors-mypy when mypy setup is less awkward
    name: Run mypy for Python 3.12
162
163
    entry: python tools/pre_commit/mypy.py 1 "3.12"
    <<: *mypy_common
164
    stages: [manual] # Only run in CI
165
166
167
168
169
  - id: mypy-3.13 # TODO: Use https://github.com/pre-commit/mirrors-mypy when mypy setup is less awkward
    name: Run mypy for Python 3.13
    entry: python tools/pre_commit/mypy.py 1 "3.13"
    <<: *mypy_common
    stages: [manual] # Only run in CI
170
171
  - id: shellcheck
    name: Lint shell scripts
172
    entry: tools/pre_commit/shellcheck.sh
173
174
175
176
    language: script
    types: [shell]
  - id: png-lint
    name: Lint PNG exports from excalidraw
177
    entry: tools/pre_commit/png-lint.sh
178
179
    language: script
    types: [png]
180
181
182
183
184
185
  - id: signoff-commit
    name: Sign-off Commit
    entry: bash
    args:
      - -c
      - |
186
187
        if ! grep -q "^Signed-off-by: $(git config user.name) <$(git config user.email)>" "$(git rev-parse --git-path COMMIT_EDITMSG)"; then
          printf "\nSigned-off-by: $(git config user.name) <$(git config user.email)>\n" >> "$(git rev-parse --git-path COMMIT_EDITMSG)"
188
189
190
191
        fi
    language: system
    verbose: true
    stages: [commit-msg]
192
193
  - id: check-spdx-header
    name: Check SPDX headers
194
    entry: python tools/pre_commit/check_spdx_header.py
195
196
    language: python
    types: [python]
197
198
  - id: check-root-lazy-imports
    name: Check root lazy imports
199
    entry: python tools/pre_commit/check_init_lazy_imports.py
200
201
    language: python
    types: [python]
202
203
  - id: check-filenames
    name: Check for spaces in all filenames
204
205
206
207
    entry: bash
    args:
      - -c
      - 'git ls-files | grep " " && echo "Filenames should not contain spaces!" && exit 1 || exit 0'
208
209
210
    language: system
    always_run: true
    pass_filenames: false
211
212
  - id: update-dockerfile-graph
    name: Update Dockerfile dependency graph
213
    entry: tools/pre_commit/update-dockerfile-graph.sh
214
    language: script
215
216
217
  - id: check-forbidden-imports
    name: Check for forbidden imports
    entry: python tools/pre_commit/check_forbidden_imports.py
218
219
    language: python
    types: [python]
220
    additional_dependencies: [regex]
221
222
223
224
225
226
227
  # prevent use torch.cuda APIs
  - id: check-torch-cuda-call
    name: "Prevent new 'torch.cuda' APIs call"
    entry: python tools/pre_commit/check_torch_cuda.py
    language: python
    types: [python]
    additional_dependencies: [regex]
228
229
  - id: validate-config
    name: Validate configuration has default values and that each field has a docstring
230
    entry: python tools/pre_commit/validate_config.py
231
    language: python
232
    additional_dependencies: [regex]
233
234
235
236
237
238
239
  - id: validate-docker-versions
    name: Validate docker/versions.json matches Dockerfile
    entry: python tools/generate_versions_json.py --check
    language: python
    files: ^docker/(Dockerfile|versions\.json)$
    pass_filenames: false
    additional_dependencies: [dockerfile-parse]
240
241
242
243
  - id: attention-backend-docs
    name: Check attention backend documentation is up to date
    entry: python tools/pre_commit/generate_attention_backend_docs.py --check
    language: python
244
245
246
247
248
  - id: check-boolean-context-manager
    name: Check for boolean ops in with-statements
    entry: python tools/pre_commit/check_boolean_context_manager.py
    language: python
    types: [python]
249
250
251
  # Keep `suggestion` last
  - id: suggestion
    name: Suggestion
252
    entry: bash -c 'echo "To bypass all the pre-commit hooks, add --no-verify to git commit. To skip a specific hook, prefix the commit command with SKIP=<hook-id>."'
253
254
255
256
    language: system
    verbose: true
    pass_filenames: false
  # Insert new entries above the `suggestion` entry