318 lines
9.4 KiB
YAML
318 lines
9.4 KiB
YAML
minimum_pre_commit_version: 4.0.1
|
|
repos:
|
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
rev: c4a0b883114b00d8d76b479c820ce7950211c99b # v4.5.0
|
|
hooks:
|
|
- id: trailing-whitespace
|
|
files: \.(mdx|ya?ml|txt)$
|
|
- id: end-of-file-fixer
|
|
files: \.(txt|sh|rst)$
|
|
exclude: ^examples/|^mlflow/protos/opentelemetry/
|
|
- id: check-vcs-permalinks
|
|
files: \.py$
|
|
require_serial: true
|
|
- repo: https://github.com/pre-commit/mirrors-prettier
|
|
rev: "50c5478ed9e10bf360335449280cf2a67f4edb7a" # v2.7.1
|
|
hooks:
|
|
- id: prettier
|
|
files: '^(?!docs/|mlflow/server/js/|libs/typescript/).+\.(js|ts|md|json|ya?ml)$'
|
|
require_serial: true
|
|
|
|
- repo: local
|
|
hooks:
|
|
- id: uv-lock
|
|
name: uv-lock
|
|
entry: uv lock
|
|
language: system
|
|
files: '^pyproject\.toml$'
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: normalize-chars
|
|
name: normalize-chars
|
|
entry: uv run --frozen --only-group lint dev/normalize_chars.py
|
|
language: system
|
|
stages: [pre-commit]
|
|
types: [text]
|
|
exclude: '^mlflow/server/js/|^docs/api_reference/source/R-api\.rst$'
|
|
require_serial: true
|
|
|
|
- id: ruff
|
|
name: ruff
|
|
entry: uv run --frozen --only-group lint dev/ruff.py
|
|
language: system
|
|
files: '\.(py|ipynb)$'
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: format
|
|
name: format
|
|
entry: uv run --frozen --only-group lint dev/format.py
|
|
language: system
|
|
files: '\.(py|ipynb|md|mdx)$'
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: mypy
|
|
name: mypy
|
|
language: system
|
|
files: |
|
|
(?x)^(
|
|
dev/.*\.py|
|
|
\.claude/skills/.*\.py
|
|
)$
|
|
exclude: |
|
|
(?x)^(
|
|
dev/gen_rest_api\.py|
|
|
dev/proto_plugin\.py|
|
|
dev/update_ml_package_versions\.py|
|
|
dev/proto_to_graphql/.*\.py|
|
|
dev/benchmarks/gateway/fake_server\.py|
|
|
dev/benchmarks/gateway/benchmark\.py|
|
|
dev/benchmarks/gateway/run\.py|
|
|
dev/benchmarks/tracing/.*\.py
|
|
)$
|
|
entry: uv run --frozen --only-group lint mypy
|
|
require_serial: true
|
|
|
|
- id: unresolved-import
|
|
name: unresolved-import
|
|
# Run `ty` to detect broken internal `mlflow.*` imports. Third-party
|
|
# unresolved imports (optional deps) are filtered out via grep.
|
|
entry: |
|
|
bash -c '
|
|
out=$(uv run --frozen --only-group lint ty check \
|
|
--ignore all \
|
|
--error unresolved-import \
|
|
--output-format concise \
|
|
mlflow/ 2>&1)
|
|
bad=$(echo "$out" | grep "Module \`mlflow" || true)
|
|
if [ -n "$bad" ]; then
|
|
echo "$bad"
|
|
exit 1
|
|
fi
|
|
'
|
|
language: system
|
|
pass_filenames: false
|
|
files: ^mlflow/.*\.py$
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: clint
|
|
name: clint
|
|
entry: uv run --frozen --only-group lint clint
|
|
language: system
|
|
files: '\.(py|ipynb|rst|mdx?)$'
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: check-github-workflows
|
|
name: check-github-workflows
|
|
entry: uv run --frozen --only-group lint check-jsonschema --builtin-schema vendor.github-workflows
|
|
language: system
|
|
files: ^\.github/workflows/[^/]+\.ya?ml$
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: check-github-actions
|
|
name: check-github-actions
|
|
entry: uv run --frozen --only-group lint check-jsonschema --builtin-schema vendor.github-actions
|
|
language: system
|
|
files: ^\.github/actions/[^/]+/action\.ya?ml$
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: install-bin
|
|
name: install-bin
|
|
entry: uv run --frozen --only-group lint bin/install.py
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: taplo
|
|
name: taplo
|
|
entry: bin/taplo format
|
|
language: system
|
|
files: '\.toml$'
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: must-have-signoff
|
|
name: must-have-signoff
|
|
entry: 'grep "Signed-off-by:"'
|
|
language: system
|
|
stages: [prepare-commit-msg]
|
|
require_serial: true
|
|
|
|
- id: mlflow-typo
|
|
name: mlflow-typo
|
|
entry: dev/mlflow-typo.sh
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: check-mlflow-ui
|
|
name: check-mlflow-ui
|
|
entry: |
|
|
bash -c '
|
|
if bin/rg "mlflow ui" --line-number --with-filename "$@"; then
|
|
echo
|
|
echo "Error - Use \"mlflow server\" instead of \"mlflow ui\""
|
|
exit 1
|
|
fi
|
|
' --
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
types: [text]
|
|
exclude: |
|
|
(?x)^(
|
|
\.pre-commit-config\.yaml|
|
|
CHANGELOG\.md|
|
|
changelogs/.*|
|
|
docs/api_reference/source/R-api\.rst|
|
|
examples/llms/RAG/.*\.(json|csv)|
|
|
mlflow/cli/__init__\.py|
|
|
mlflow/R/mlflow/.*|
|
|
tests/test_cli\.py
|
|
)$
|
|
|
|
- id: pyproject
|
|
name: pyproject
|
|
entry: uv run --frozen --only-group lint dev/pyproject.py
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: mlver
|
|
name: ml-package-versions-consistency
|
|
entry: "uv run --frozen --only-group lint dev/update_ml_package_versions.py --skip-yml"
|
|
files: '^(mlflow/ml-package-versions\.yml|mlflow/ml_package_versions\.py)$'
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: lint-proto
|
|
name: lint-proto
|
|
entry: |
|
|
bash -c '
|
|
if grep -n "com.databricks.mlflow.api.MlflowTrackingMessage" "$@"; then
|
|
echo "Remove com.databricks.mlflow.api.MlflowTrackingMessage"
|
|
exit 1
|
|
fi
|
|
' --
|
|
files: '\.proto$'
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: buf
|
|
name: buf
|
|
entry: bin/buf format -d -w --exit-code --exclude-path mlflow/protos/opentelemetry mlflow/protos
|
|
files: '\.proto$'
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: typos
|
|
name: typos
|
|
entry: bin/typos --format brief --color never
|
|
files: '\.(py$|mdx?$)'
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: conftest
|
|
name: conftest
|
|
entry: bin/conftest test --namespace mlflow --policy .github/policy.rego
|
|
files: '^\.github/(workflows|actions)/.*\.ya?ml$'
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: check-actions
|
|
name: check-actions
|
|
entry: uv run --frozen --only-group lint dev/check_actions.py
|
|
language: system
|
|
files: '^\.github/(workflows|actions)/.*\.ya?ml$'
|
|
pass_filenames: false
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: regal
|
|
name: regal
|
|
entry: bin/regal lint
|
|
files: '\.rego$'
|
|
language: system
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: check-init-py
|
|
name: check-init-py
|
|
entry: uv run --frozen --only-group lint dev/check_init_py.py
|
|
language: system
|
|
files: '^(mlflow|tests)/.*\.py$'
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: forbid-gif
|
|
name: forbid-gif
|
|
language: fail
|
|
entry: "Please use MP4 instead of GIF for docs animations"
|
|
files: ^docs/.*\.gif$
|
|
stages: [pre-commit]
|
|
|
|
- id: no-yaml
|
|
name: no-yaml
|
|
language: fail
|
|
entry: "Use .yml instead of .yaml"
|
|
files: ^\.github/(workflows|actions)/.*\.yaml$
|
|
stages: [pre-commit]
|
|
|
|
- id: check-component-ids
|
|
name: check-component-ids
|
|
entry: |
|
|
bash -c '
|
|
if ! node .github/actions/check-component-ids/index.js; then
|
|
echo
|
|
echo "Auto-regenerating componentId registry..."
|
|
node .github/actions/check-component-ids/regenerate.js
|
|
git add .github/actions/check-component-ids/componentId-registry.js
|
|
exit 1
|
|
fi
|
|
'
|
|
language: system
|
|
files: ^(mlflow/server/js/src/|\.github/actions/check-component-ids/)
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
pass_filenames: false
|
|
|
|
- id: js-fmt
|
|
name: js-fmt
|
|
entry: dev/js.sh fmt
|
|
language: system
|
|
files: ^mlflow/server/js/
|
|
stages: [pre-commit]
|
|
require_serial: true
|
|
|
|
- id: no-spaces
|
|
name: no-spaces
|
|
language: fail
|
|
entry: "Filenames must not contain spaces"
|
|
files: " "
|
|
|
|
- id: skills
|
|
name: skills
|
|
entry: uv run --frozen --only-group lint dev/check_skills.py
|
|
language: system
|
|
files: '(^|/)SKILL\.md$'
|
|
stages: [pre-commit]
|
|
require_serial: true
|