Collection of git hooks for Terraform to be used with pre-commit framework
pre-committerraform-docs(required forterraform_docshooks)- GNU
awk(required forterraform_docshooks in Terraform 0.12) TFLint(required forterraform_tflinthook)
brew install pre-commit awk terraform-docs tflintsudo apt install python-pip3 gawk &&\
pip3 install pre-commit
curl -L "$(curl -s https://api.github.com/repos/segmentio/terraform-docs/releases/latest | grep -o -E "https://.+?-linux-amd64")" > terraform-docs && chmod +x terraform-docs && sudo mv terraform-docs /usr/bin/
curl -L "$(curl -s https://api.github.com/repos/wata727/tflint/releases/latest | grep -o -E "https://.+?_linux_amd64.zip")" > tflint.zip && unzip tflint.zip && rm tflint.zip && sudo mv tflint /usr/bin/DIR=~/.git-template
git config --global init.templateDir ${DIR}
pre-commit init-templatedir -t pre-commit ${DIR}Step into the repository you want to have the pre-commit hooks installed and run:
git init
cat <<EOF > .pre-commit-config.yaml
- repo: git://github.com/antonbabenko/pre-commit-terraform
rev: v1.19.0
hooks:
- id: terraform_fmt
- id: terraform_docs
EOFAfter pre-commit hook has been installed you can run it manually on all files in the repository
pre-commit run -aThere are several pre-commit hooks to keep Terraform configurations (both *.tf and *.tfvars) and Terragrunt configurations (*.hcl) in a good shape:
| Hook name | Description |
|---|---|
terraform_fmt |
Rewrites all Terraform configuration files to a canonical format. |
terraform_validate |
Validates all Terraform configuration files. |
terraform_docs |
Inserts input and output documentation into README.md. Recommended. |
terraform_docs_without_aggregate_type_defaults |
Inserts input and output documentation into README.md without aggregate type defaults. |
terraform_docs_replace |
Runs terraform-docs and pipes the output directly to README.md |
terraform_tflint |
Validates all Terraform configuration files with TFLint. |
terragrunt_fmt |
Rewrites all Terragrunt configuration files (*.hcl) to a canonical format. |
Check the source file to know arguments used for each hook.
terraform_docsandterraform_docs_without_aggregate_type_defaultswill insert/update documentation generated by terraform-docs framed by markers:
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->if they are present in README.md.
-
terraform_docs_replacereplaces the entire README.md rather than doing string replacement between markers. Put your additional documentation at the top of yourmain.tffor it to be pulled in. The optional--destargument lets you change the name of the file that gets created/modified.- Example:
hooks: - id: terraform_docs_replace args: ['--with-aggregate-type-defaults', '--sort-inputs-by-required', '--dest=TEST.md']
-
It is possible to pass additional arguments to shell scripts when using
terraform_docsandterraform_docs_without_aggregate_type_defaults. Send pull-request with the new hook if there is something missing. -
terraform-docsworks with Terraform 0.12 but support is hackish (it requiresawkto be installed) and may contain bugs. You can follow the native support of Terraform 0.12 interraform-docsin issue #62.
-
terraform_tflintsupports custom arguments so you can enable module inspection, deep check mode etc.- Example:
hooks: - id: terraform_tflint args: ['--deep']
- Python hooks are supported now too. All you have to do is:
- add a line to the
console_scriptsarray inentry_pointsinsetup.py - Put your python script in the
pre_commit_hooksfolder
- add a line to the
Enjoy the clean and documented code!
This repository is managed by Anton Babenko with help from these awesome contributors.
MIT licensed. See LICENSE for full details.