Collection of git hooks for Terraform to be used with pre-commit framework
On MacOSX install the pre-commit package
brew install pre-commit
For other operating systems check the official documentation
Step into the repository you want to have the pre-commit hooks installed and run:
cat <<EOF > .pre-commit-config.yaml
- repo: git://github.com/antonbabenko/pre-commit-terraform
rev: v1.7.4
hooks:
- id: terraform_fmt
- id: terraform_docs
EOF
Install the pre-commit hook
pre-commit install
After pre-commit hook has been installed you can run it manually on all files in the repository
pre-commit run -a
There are several pre-commit hooks to keep Terraform configurations (both *.tf
and *.tfvars
) in a good shape:
terraform_fmt
- Rewrites all Terraform configuration files to a canonical format.terraform_validate_no_variables
- Validates all Terraform configuration files without checking whether all required variables were set.terraform_validate_with_variables
- Validates all Terraform configuration files and checks whether all required variables were specified.terraform_docs
- Inserts input and output documentation intoREADME.md
. Recommended.terraform_docs_without_aggregate_type_defaults
- Inserts input and output documentation intoREADME.md
without aggregate type defaults.terraform_docs_replace
- Runsterraform-docs
and pipes the output directly to README.md
Check the source file to know arguments used for each hook.
-
terraform_validate_no_variables
andterraform_validate_with_variables
will not work if variables are being set dynamically (eg, when using Terragrunt). Useterragrunt validate
command instead. -
terraform_docs
andterraform_docs_without_aggregate_type_defaults
will insert/update documentation generated by terraform-docs between markers -<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
and<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
if they are present inREADME.md
. Make sure thatterraform-docs
is installed. -
terraform_docs_replace
replaces the entire README.md rather than doing string replacement between markers. Put your additional documentation at the top of yourmain.tf
for it to be pulled in. The optional--dest
argument 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_docs
andterraform_docs_without_aggregate_type_defaults
. Send pull-request with the new hook if there is something missing.
- Python hooks are supported now too. All you have to do is:
- add a line to the
console_sripts
array inentry_points
insetup.py
- Put your python script in the
pre_commit_hooks
folder
- 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.