---
minimum_pre_commit_version: 1.15.2
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
    hooks:
      - id: check-merge-conflict  # Check for files that contain merge conflict strings.
      - id: trailing-whitespace   # Trims trailing whitespace.
        args: [--markdown-linebreak-ext=md]
      - id: mixed-line-ending     # Replaces or checks mixed line ending.
        args: [--fix=lf]
      - id: end-of-file-fixer     # Makes sure files end in a newline and only a newline.
      - id: check-merge-conflict  # Check for files that contain merge conflict strings.
      - id: check-ast             # Simply check whether files parse as valid python.

  # ----- Local Hooks ----------------------------------------------------------------------------------------------->
  - repo: local
    hooks:
      - id: sort-pylint-spelling-words
        name: Sort PyLint Spelling Words File
        entry: python .pre-commit-hooks/sort-pylint-spelling-words.py
        language: system
        files: ^\.pylint-spelling-words$

      - id: check-changelog-entries
        name: Check Changelog Entries
        entry: python .pre-commit-hooks/check-changelog-entries.py
        language: system
  # <---- Local Hooks ------------------------------------------------------------------------------------------------

  - repo: https://github.com/s0undt3ch/python-tools-scripts
    rev: "0.17.0"
    hooks:
      - id: tools
        alias: actionlint
        name: Lint GitHub Actions Workflows
        files: "^.github/workflows/"
        types:
          - yaml
        args:
          - pre-commit
          - actionlint

  # ----- Formatting ------------------------------------------------------------------------------------------------>
  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: "v0.0.280"
    hooks:
      - id: ruff
        args:
          - --fix
        exclude: (.pre-commit-hooks/.*|docs/.*)\.py
  - repo: https://github.com/asottile/pyupgrade
    rev: v3.9.0
    hooks:
      - id: pyupgrade
        name: Rewrite Code to be Py3.7+
        args: [--py37-plus]
        exclude: (^src/saltfactories/utils/saltext/.*\.py)

  - repo: https://github.com/psf/black
    rev: 23.7.0
    hooks:
      - id: black
        args: [-l 100]
        exclude: src/saltfactories/version.py

  - repo: https://github.com/asottile/blacken-docs
    rev: 1.15.0
    hooks:
      - id: blacken-docs
        args: [--skip-errors]
        files: ^(.*\.rst|docs/.*\.rst|src/saltfactories/.*\.py)$
        additional_dependencies:
          - black==23.7.0
  # <---- Formatting -------------------------------------------------------------------------------------------------

  # ----- Security -------------------------------------------------------------------------------------------------->
  - repo: https://github.com/PyCQA/bandit
    rev: "1.7.5"
    hooks:
      - id: bandit
        alias: bandit-salt
        name: Run bandit against Salt
        args: [--silent, -lll, --skip, B701]
        exclude: >
            (?x)^(
                tests/.*
            )$
  - repo: https://github.com/PyCQA/bandit
    rev: "1.7.5"
    hooks:
      - id: bandit
        alias: bandit-tests
        name: Run bandit against the test suite
        args: [--silent, -lll, --skip, B701]
        files: ^tests/.*
  # <---- Security ---------------------------------------------------------------------------------------------------

  # ----- Code Analysis --------------------------------------------------------------------------------------------->

#  - repo: https://github.com/pre-commit/mirrors-mypy
#    rev: v0.931
#    hooks:
#      - id: mypy
#        name: Run mypy against source
#        files: ^src/.*\.py$
#        args: [--strict]
#        additional_dependencies:
#          - attrs
#          - types-attrs
#          - types-requests
#          - types-setuptools
#
#  - repo: https://github.com/pre-commit/mirrors-mypy
#    rev: v0.931
#    hooks:
#      - id: mypy
#        name: Run mypy against tests
#        files: ^tests/.*\.py$
#        args: []
#        additional_dependencies:
#          - pytest
#          - attrs
#          - types-attrs
#          - types-requests
#          - types-setuptools
  # <---- Code Analysis ----------------------------------------------------------------------------------------------
