---
# https://pre-commit.com/
default_stages: [pre-commit, pre-push]
default_language_version:
  # force all unspecified Python hooks to run python3
  python: python3
  node: 22.2.0
minimum_pre_commit_version: "3.2.0"
repos:
  - repo: meta
    hooks:
      - id: identity
        name: run identity check
      - id: check-hooks-apply
        name: check hooks apply to the repository
  - repo: local
    hooks:
      - id: prettier
        name: run prettier
        description: format files with prettier
        entry: prettier --write .
        files: \.(json|md|ya?ml)$
        language: node
        additional_dependencies: ["prettier@3.3.3"]
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.24.0
    hooks:
      - id: gitleaks
        name: detect hardcoded secrets
  - repo: https://github.com/shssoichiro/oxipng
    rev: v9.1.4
    hooks:
      - id: oxipng
        name: run oxipng
        args: ["-o", "4", "--strip", "safe", "--alpha"]
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: check-added-large-files
      - id: check-case-conflict
      - id: check-executables-have-shebangs
        exclude: ^test/t/lang\.rb$
      - id: check-illegal-windows-names
      - id: pretty-format-json
        args: [--autofix, --no-sort-keys]
      - id: check-json
      - id: check-merge-conflict
      - id: check-shebang-scripts-are-executable
      - id: check-vcs-permalinks
      - id: check-yaml
      - id: destroyed-symlinks
      - id: detect-aws-credentials
        args: [--allow-missing-credentials]
      - id: detect-private-key
      - id: end-of-file-fixer
      - id: file-contents-sorter
        args: [--unique]
        files: ^\.github/linters/codespell\.txt$
      - id: fix-byte-order-marker
      - id: forbid-submodules
      - id: mixed-line-ending
      - id: trailing-whitespace
  - repo: https://github.com/Lucas-C/pre-commit-hooks
    rev: v1.5.5
    hooks:
      - id: forbid-tabs
        name: no-tabs checker
        exclude: Makefile$
      - id: remove-tabs
        name: tabs remover
        args: [--whitespaces-count, "2"]
        exclude: Makefile$
  - repo: https://github.com/rhysd/actionlint
    rev: v1.7.7
    hooks:
      - id: actionlint
        name: run actionlint
        description: lint GitHub Actions workflow files
  - repo: https://github.com/codespell-project/codespell
    rev: v2.4.1
    hooks:
      - id: codespell
        name: run codespell
        description: Check spelling with codespell
        args: [--ignore-words=.github/linters/codespell.txt]
  - repo: https://github.com/jumanjihouse/pre-commit-hooks
    rev: 3.0.0
    hooks:
      - id: script-must-not-have-extension
        name: run script-must-not-have-extension
        description: local policy is to exclude extension from all shell files
        types: [shell]
  - repo: https://github.com/igorshubovych/markdownlint-cli
    rev: v0.44.0
    hooks:
      - id: markdownlint
        name: run markdownlint
        description: Checks the style of Markdown files
        args: [--config=.github/linters/.markdown-lint.yml]
        types: [markdown]
        files: \.md$
  - repo: https://github.com/tcort/markdown-link-check
    rev: v3.13.7
    hooks:
      - id: markdown-link-check
        name: run markdown-link-check
        description: Checks hyperlinks in Markdown files
        args: [--config=.github/linters/mlc_config.json, -q]
        types: [markdown]
        files: \.md$
  - repo: https://github.com/shellcheck-py/shellcheck-py
    rev: v0.10.0.1
    hooks:
      - id: shellcheck
        name: run shellcheck
  - repo: https://github.com/adrienverge/yamllint
    rev: v1.36.0
    hooks:
      - id: yamllint
        name: run yamllint
        description: Check YAML files with yamllint
        args: [--strict, -c=.github/linters/.yaml-lint.yml]
        types: [yaml]
        files: \.ya?ml$
