# yamllint disable-line rule:line-length
# SPDX-FileCopyrightText: 2023 - 2025 Benjamin Grande M. S. <ben.grande.b@gmail.com>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

---

default_install_hook_types:
  - pre-commit

repos:

  - repo: local
    hooks:

      - id: unicode-lint
        name: unicode-lint
        entry: scripts/unicode-lint.sh
        language: script
        pass_filenames: true
        description: Prohibit Unicode
        stages: [commit]

      - id: spell-lint
        name: spell-lint
        entry: scripts/spell-lint.sh
        language: script
        pass_filenames: true
        description: Spellcheck files
        stages: [commit]

      - id: shell-lint
        name: shell-lint
        entry: scripts/shell-lint.sh
        language: script
        pass_filenames: true
        # yamllint disable rule:line-length
        files: >-
          (\.sh|/rc\.local\.d/.*\.rc|/bin/.*|/rpc/.*|/network-hooks\.d/.*|
          /qubes-firewall\.d/.*|/(lib-)?qubes-bind-dirs\.d/.*|
          /\.config/(sh|bash|zsh|less|x11|git/shell|git/template/hooks)/.*|
          /autostart-scripts/.*|/qvm-copy-dotfiles|/git-core/.*)
        # yamllint disable rule:line-length
        exclude: >-
          \.(policy|asc|txt|top|sls|jinja|toml|vim|py|muttrc|nft|md|spec|
          list|sources|repo|socket|timer|service|y(a)?ml)$
        description: Lint Shellscripts
        stages: [commit]

      - id: markdown-lint
        name: markdown-lint
        entry: scripts/markdown-lint.sh
        language: script
        pass_filenames: true
        files: \.md$
        description: Lint Markdown files
        stages: [commit]

      - id: python-lint
        name: python-lint
        entry: scripts/python-lint.sh
        language: script
        pass_filenames: true
        files: \.py$
        description: Lint Python files
        stages: [commit]

      - id: salt-lint
        name: salt-lint
        entry: scripts/salt-lint.sh
        language: script
        pass_filenames: true
        files: (^minion.d/.*.conf|\.(sls|top|jinja|j2|tmpl|tst))$
        description: Lint Salt files
        stages: [commit]

      - id: yaml-lint
        name: yaml-lint
        entry: scripts/yaml-lint.sh
        language: script
        pass_filenames: true
        files: \.(yaml|yml)$
        description: Lint YAML files
        stages: [commit]

      - id: qubesbuilder-gen
        name: qubesbuilder-gen
        entry: scripts/qubesbuilder-gen.sh
        args: [test]
        language: script
        pass_filenames: false
        files: salt/\S+/README.md
        description: Check if .qubesbuilder is up to date
        stages: [commit]

      # - id: spec-gen
      #   name: spec-gen
      #   language: script
      #   entry: scripts/spec-gen.sh
      #   args: [test]
      #   pass_filenames: true
      #   # yamllint disable rule:line-length
      #   files: >-
      #     ^(rpm_spec/template/template.spec|salt/.*|
      #     scripts/spec-(get|gen)\.sh)$
      #   description: Check if RPM SPEC files are up to date
      #   stages: [commit]

      - id: license-lint
        name: license-lint
        entry: reuse
        args: [lint]
        language: python
        pass_filenames: false
        description: Lint files to comply with the REUSE Specification
        stages: [commit]

      - id: copyright-lint
        name: copyright-lint
        entry: scripts/copyright-lint.sh
        language: script
        pass_filenames: true
        description: Check if copyright information is correct
        stages: [commit]

      - id: commit-verify
        name: commit-verify
        entry: scripts/commit-verify.sh
        language: script
        pass_filenames: false
        description: Verify if there is a valid signature associated with the revisions
        stages: [push]