repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: trailing-whitespace
      - id: check-json
      - id: check-yaml

  - repo: https://github.com/python/black
    rev: 25.1.0
    hooks:
      - id: black

  - repo: https://github.com/PyCQA/isort
    rev: 6.0.0
    hooks:
      - id: isort

  - repo: https://github.com/pycqa/flake8
    rev: 7.1.1
    hooks:
      - id: flake8
        additional_dependencies: [flake8-bugbear==24.12.12, flake8-pyproject]

  - repo: https://github.com/codespell-project/codespell
    rev: v2.4.1
    hooks:
      - id: codespell
        name: Check source code spelling
        additional_dependencies:
          - tomli
        stages: [pre-commit]
      - id: codespell
        name: Check commit message spelling
        additional_dependencies:
          - tomli
        stages: [commit-msg]

  - repo: local
    hooks:
      - id: mypy
        name: mypy
        entry: mypy
        args: [swh]
        pass_filenames: false
        language: system
        types: [python]
      - id: twine-check
        name: twine check
        description: call twine check when pushing an annotated release tag
        entry: bash -c "ref=$(git describe) &&
          [[ $ref =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] &&
          (python3 -m build --sdist && twine check $(ls -t dist/* | head -1)) || true"
        pass_filenames: false
        stages: [pre-push]
        language: python
        additional_dependencies: [twine, build]