| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| repos: |
| - repo: https://github.com/MarcoGorelli/auto-walrus |
| rev: 0.3.4 |
| hooks: |
| - id: auto-walrus |
| - repo: https://github.com/pre-commit/mirrors-mypy |
| rev: v1.15.0 |
| hooks: |
| - id: mypy |
| name: mypy (main) |
| args: [--check-untyped-defs] |
| exclude: ^superset-extensions-cli/ |
| additional_dependencies: [ |
| types-simplejson, |
| types-python-dateutil, |
| types-requests, |
| # types-redis 4.6.0.5 is failing mypy |
| # because of https://github.com/python/typeshed/pull/10531 |
| types-redis==4.6.0.4, |
| types-pytz, |
| types-croniter, |
| types-PyYAML, |
| types-setuptools, |
| types-paramiko, |
| types-Markdown, |
| ] |
| - id: mypy |
| name: mypy (superset-extensions-cli) |
| args: [--check-untyped-defs] |
| files: ^superset-extensions-cli/ |
| - repo: https://github.com/pre-commit/pre-commit-hooks |
| rev: v5.0.0 |
| hooks: |
| - id: check-docstring-first |
| - id: check-added-large-files |
| exclude: ^.*\.(geojson)$|^docs/static/img/screenshots/.*|^superset-frontend/CHANGELOG\.md$ |
| - id: check-yaml |
| exclude: ^helm/superset/templates/ |
| - id: debug-statements |
| - id: end-of-file-fixer |
| exclude: .*/lerna\.json$ |
| - id: trailing-whitespace |
| exclude: ^.*\.(snap) |
| args: ["--markdown-linebreak-ext=md"] |
| - repo: local |
| hooks: |
| - id: prettier-frontend |
| name: prettier (frontend) |
| entry: bash -c 'cd superset-frontend && for file in "$@"; do npx prettier --write "${file#superset-frontend/}"; done' |
| language: system |
| pass_filenames: true |
| files: ^superset-frontend/.*\.(js|jsx|ts|tsx|css|scss|sass|json)$ |
| - repo: local |
| hooks: |
| - id: oxlint-frontend |
| name: oxlint (frontend) |
| entry: ./scripts/oxlint.sh |
| language: system |
| pass_filenames: true |
| files: ^superset-frontend/.*\.(js|jsx|ts|tsx)$ |
| - id: custom-rules-frontend |
| name: custom rules (frontend) |
| entry: ./scripts/check-custom-rules.sh |
| language: system |
| pass_filenames: true |
| files: ^superset-frontend/.*\.(js|jsx|ts|tsx)$ |
| - id: eslint-docs |
| name: eslint (docs) |
| entry: bash -c 'cd docs && FILES=$(echo "$@" | sed "s|docs/||g") && yarn eslint --fix --quiet $FILES' |
| language: system |
| pass_filenames: true |
| files: ^docs/.*\.(js|jsx|ts|tsx)$ |
| - id: type-checking-frontend |
| name: Type-Checking (Frontend) |
| entry: ./scripts/check-type.js package=superset-frontend excludeDeclarationDir=cypress-base |
| language: system |
| files: ^superset-frontend\/.*\.(js|jsx|ts|tsx)$ |
| exclude: ^superset-frontend/cypress-base\/ |
| require_serial: true |
| # blacklist unsafe functions like make_url (see #19526) |
| - repo: https://github.com/skorokithakis/blacklist-pre-commit-hook |
| rev: e2f070289d8eddcaec0b580d3bde29437e7c8221 |
| hooks: |
| - id: blacklist |
| args: ["--blacklisted-names=make_url", "--ignore=tests/"] |
| - repo: https://github.com/norwoodj/helm-docs |
| rev: v1.14.2 |
| hooks: |
| - id: helm-docs |
| files: helm |
| verbose: false |
| args: ["--log-level", "error"] |
| - repo: https://github.com/astral-sh/ruff-pre-commit |
| rev: v0.9.7 |
| hooks: |
| - id: ruff-format |
| - id: ruff |
| args: [--fix] |
| - repo: local |
| hooks: |
| - id: pylint |
| name: pylint with custom Superset plugins |
| entry: bash |
| language: system |
| types: [python] |
| exclude: ^(tests/|superset/migrations/|scripts/|RELEASING/|docker/) |
| args: |
| - -c |
| - | |
| TARGET_BRANCH=${GITHUB_BASE_REF:-master} |
| # Only fetch if we're not in CI (CI already has all refs) |
| if [ -z "$CI" ]; then |
| git fetch --no-recurse-submodules origin "$TARGET_BRANCH" 2>/dev/null || true |
| fi |
| BASE=$(git merge-base origin/"$TARGET_BRANCH" HEAD 2>/dev/null) || BASE="HEAD" |
| files=$(git diff --name-only --diff-filter=ACM "$BASE"..HEAD 2>/dev/null | grep '^superset/.*\.py$' || true) |
| if [ -n "$files" ]; then |
| pylint --rcfile=.pylintrc --load-plugins=superset.extensions.pylint --reports=no $files |
| else |
| echo "No Python files to lint." |
| fi |