Collection of git hooks for Terraform to be used with pre-commit framework
On MacOSX install the pre-commit package
brew install pre-commitFor 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
EOFInstall the pre-commit hook
pre-commit installAfter 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) 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.mdwithout aggregate type defaults.terraform_docs_replace- Runsterraform-docsand pipes the output directly to README.md
Check the source file to know arguments used for each hook.
-
terraform_validate_no_variablesandterraform_validate_with_variableswill not work if variables are being set dynamically (eg, when using Terragrunt). Useterragrunt validatecommand instead. -
terraform_docsandterraform_docs_without_aggregate_type_defaultswill 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-docsis installed. -
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.
- Python hooks are supported now too. All you have to do is:
- add a line to the
console_sriptsarray 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.