# Copyright 2025 Google LLC
#
# Licensed 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/antonbabenko/pre-commit-terraform
  rev: v1.86.0
  hooks:
  - id: terraform_fmt
  - id: terraform_tflint
    args:
    - --args=--config=__GIT_WORKING_DIR__/.tflint.hcl
    files: ^modules/
    exclude: (tests/fixtures/|tools/lockfile/|^fast)
- repo: local
  hooks:
  - id: cff-readme
    name: Regenerate README.md with tfdoc.py
    entry: tools/pre-commit-tfdoc.sh
    language: python
    additional_dependencies:
    - click
    - ghapi
    - iso8601
    - marko
    - requests
    - yamale
    - jsonschema
    - BeautifulSoup4
    # types: [terraform]
    files: ^(modules|fast).*(tf|README.md)$
    pass_filenames: true
    require_serial: true
  - id: licenese
    name: Check license presence and other boilerplate checks
    language: python
    entry: tools/check_boilerplate.py
    additional_dependencies:
    - click
    - ghapi
    - iso8601
    - marko
    - requests
    - yamale
    - jsonschema
    - BeautifulSoup4
    pass_filenames: true
    args:
    - --scan-files
  - id: tflint-fast
    name: Checking FAST code with tflint
    entry: tools/tflint-fast.py
    language: python
    additional_dependencies:
    - click
    - ghapi
    - iso8601
    - marko
    - requests
    - yamale
    - jsonschema
    - BeautifulSoup4
    pass_filenames: true
    require_serial: true
  - id: versions
    name: Align Terraform/OpenTofu provider versions
    language: python
    additional_dependencies:
    - click
    files: (versions.tf|^default-versions.tf|versions.tofu|default-versions.tofu)$
    pass_filenames: false
    entry: tools/versions.py --quiet
  - id: check-names
    name: Check name lengths for FAST
    language: python
    additional_dependencies:
    - click
    - ghapi
    - iso8601
    - marko
    - requests
    - yamale
    - jsonschema
    - BeautifulSoup4
    pass_filenames: false
    files: ^fast
    entry: tools/check_names.py --prefix-length=10 --failed-only fast/stages
  - id: check-yaml-schema
    name: Check schema for YAML files
    language: python
    additional_dependencies:
    - click
    - ghapi
    - iso8601
    - marko
    - requests
    - yamale
    - jsonschema
    - BeautifulSoup4
    pass_filenames: false
    files: ^(fast|modules)
    entry: tools/check_yaml_schema.py modules fast
  - id: check-schema-docs
    name: Check Markdown generated from JSON schemas
    language: python
    additional_dependencies:
    - click
    pass_filenames: false
    files: ^(fast|modules).*schema\.json$
    entry: tools/check_schema_docs.py --no-show-summary modules fast
  - id: check-links
    name: Check links in markdown files
    language: python
    additional_dependencies:
    - click
    - ghapi
    - iso8601
    - marko
    - requests
    - yamale
    - jsonschema
    - BeautifulSoup4
    entry: tools/check_links.py --no-show-summary --scan-files
  - id: duplicate-diff
    name: duplicate-diff
    entry: python3 tools/duplicate-diff.py
    language: python
    language_version: python3
    files: '.*(\.sh|\.tf|\.tftpl|\.tpl|\.yaml)$'
    pass_filenames: true
    require_serial: true

- repo: https://github.com/adrienverge/yamllint
  rev: 79a6b2b1392eaf49cdd32ac4f14be1a809bbd8f7  # v1.37.0
  hooks:
  - id: yamllint
    args: ["-c=.yamllint", "--no-warnings"]
    exclude: |
      (?x)^(
        /templates/.*|
        modules/cloud-config-container/.*|
        .*/0-org-setup/assets/workflow-.*\.yaml
      )$

- repo: https://github.com/jumanjihouse/pre-commit-hooks
  rev: "3.0.0"
  hooks:
  - id: script-must-have-extension
  - id: shellcheck
  - id: shfmt
    exclude: ".*tpl"

- repo: https://github.com/pre-commit/pre-commit-hooks
  rev: v6.0.0
  hooks:
  - id: end-of-file-fixer
  - id: trailing-whitespace
  - id: check-yaml
    args:
    - --allow-multiple-documents
    exclude: |
      (?x)^(
        /templates/.*|
        modules/cloud-config-container/.*|
        .*/0-org-setup/assets/workflow-.*\.yaml
      )$

- repo: https://github.com/google/yapf/
  rev: v0.40.2
  hooks:
  - id: yapf
    require_serial: true

- repo: https://github.com/codespell-project/codespell
  rev: v2.4.1
  hooks:
  - id: codespell
    exclude: (requirements.txt$|excalidraw$|package-lock\.json$|go\.sum$|^CHANGELOG.md$)
