forked from github/pre-commit-opentofu
Merge pull request #27 from RothAndrew/feature/new_hook
Add new hook for running terraform-docs which will replace content of README.md (using Python)
This commit is contained in:
commit
a52b507a18
6 changed files with 112 additions and 40 deletions
|
|
@ -23,6 +23,14 @@
|
|||
files: (\.tf)$
|
||||
exclude: \.terraform\/.*$
|
||||
|
||||
- id: terraform_docs_replace
|
||||
name: Terraform docs (overwrite README.md)
|
||||
language: python
|
||||
entry: terraform_docs_replace
|
||||
files: (\.tf)$
|
||||
exclude: \.terraform\/.*$
|
||||
description: Overwrite content of README.md with terraform-docs
|
||||
|
||||
- id: terraform_validate_no_variables
|
||||
name: Terraform validate without variables
|
||||
description: Validates all Terraform configuration files without checking whether all required variables were set (basic check).
|
||||
|
|
|
|||
16
README.md
16
README.md
|
|
@ -52,6 +52,7 @@ There are several [pre-commit](http://pre-commit.com/) hooks to keep Terraform c
|
|||
* `terraform_validate_with_variables` - Validates all Terraform configuration files and checks whether all required variables were specified.
|
||||
* `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
|
||||
|
||||
Check the [source file](https://github.com/antonbabenko/pre-commit-terraform/blob/master/.pre-commit-hooks.yaml) to know arguments used for each hook.
|
||||
|
||||
|
|
@ -61,8 +62,23 @@ Check the [source file](https://github.com/antonbabenko/pre-commit-terraform/blo
|
|||
|
||||
1. `terraform_docs` and `terraform_docs_without_aggregate_type_defaults` will insert/update documentation generated by [terraform-docs](https://github.com/segmentio/terraform-docs) between markers - `<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->` and `<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->` if they are present in `README.md`. Make sure that `terraform-docs` is installed.
|
||||
|
||||
1. `terraform_docs_replace` replaces the entire README.md rather than doing string replacement between markers. Put your additional documentation at the top of your `main.tf` for it to be pulled in. The optional `--dest` argument lets you change the name of the file that gets created/modified.
|
||||
|
||||
1. Example:
|
||||
```yaml
|
||||
hooks:
|
||||
- id: terraform_docs_replace
|
||||
args: ['--with-aggregate-type-defaults', '--sort-inputs-by-required', '--dest=TEST.md']
|
||||
```
|
||||
|
||||
1. It is possible to pass additional arguments to shell scripts when using `terraform_docs` and `terraform_docs_without_aggregate_type_defaults`. Send pull-request with the new hook if there is something missing.
|
||||
|
||||
## Notes for developers
|
||||
|
||||
1. Python hooks are supported now too. All you have to do is:
|
||||
1. add a line to the `console_sripts` array in `entry_points` in `setup.py`
|
||||
1. Put your python script in the `pre_commit_hooks` folder
|
||||
|
||||
Enjoy the clean and documented code!
|
||||
|
||||
## Authors
|
||||
|
|
|
|||
40
hooks.yaml
40
hooks.yaml
|
|
@ -1,40 +0,0 @@
|
|||
- id: terraform_fmt
|
||||
name: Terraform fmt
|
||||
description: Rewrites all Terraform configuration files to a canonical format.
|
||||
entry: terraform_fmt.sh
|
||||
language: script
|
||||
files: (\.tf|\.tfvars)$
|
||||
exclude: \.terraform\/.*$
|
||||
|
||||
- id: terraform_docs
|
||||
name: Terraform docs
|
||||
description: Inserts input and output documentation into README.md (using terraform-docs).
|
||||
entry: terraform_docs.sh
|
||||
args: [--args=--with-aggregate-type-defaults]
|
||||
language: script
|
||||
files: (\.tf)$
|
||||
exclude: \.terraform\/.*$
|
||||
|
||||
- id: terraform_docs_without_aggregate_type_defaults
|
||||
name: Terraform docs (without aggregate type defaults)
|
||||
description: Inserts input and output documentation into README.md (using terraform-docs).
|
||||
entry: terraform_docs.sh
|
||||
language: script
|
||||
files: (\.tf)$
|
||||
exclude: \.terraform\/.*$
|
||||
|
||||
- id: terraform_validate_no_variables
|
||||
name: Terraform validate without variables
|
||||
description: Validates all Terraform configuration files without checking whether all required variables were set (basic check).
|
||||
entry: terraform_validate_no_variables.sh
|
||||
language: script
|
||||
files: (\.tf|\.tfvars)$
|
||||
exclude: \.terraform\/.*$
|
||||
|
||||
- id: terraform_validate_with_variables
|
||||
name: Terraform validate with variables
|
||||
description: Validates all Terraform configuration files and checks whether all required variables were specified.
|
||||
entry: terraform_validate_with_variables.sh
|
||||
language: script
|
||||
files: (\.tf|\.tfvars)$
|
||||
exclude: \.terraform\/.*$
|
||||
0
pre_commit_hooks/__init__.py
Normal file
0
pre_commit_hooks/__init__.py
Normal file
55
pre_commit_hooks/terraform_docs_replace.py
Normal file
55
pre_commit_hooks/terraform_docs_replace.py
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
import argparse
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
|
||||
def main(argv=None):
|
||||
parser = argparse.ArgumentParser(
|
||||
description="""Run terraform-docs on a set of files. Follows the standard convention of
|
||||
pulling the documentation from main.tf in order to replace the entire
|
||||
README.md file each time."""
|
||||
)
|
||||
parser.add_argument(
|
||||
'--dest', dest='dest', default='README.md',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--sort-inputs-by-required', dest='sort', action='store_true',
|
||||
)
|
||||
parser.add_argument(
|
||||
'--with-aggregate-type-defaults', dest='aggregate', action='store_true',
|
||||
)
|
||||
parser.add_argument('filenames', nargs='*', help='Filenames to check.')
|
||||
args = parser.parse_args(argv)
|
||||
|
||||
dirs = []
|
||||
for filename in args.filenames:
|
||||
if (os.path.realpath(filename) not in dirs and \
|
||||
len(os.path.realpath(filename).strip()) > 0 and \
|
||||
(filename.endswith(".tf") or filename.endswith(".tfvars"))):
|
||||
dirs.append(os.path.dirname(filename))
|
||||
|
||||
retval = 0
|
||||
|
||||
for dir in dirs:
|
||||
try:
|
||||
procArgs = []
|
||||
procArgs.append('terraform-docs')
|
||||
if args.sort:
|
||||
procArgs.append('--sort-inputs-by-required')
|
||||
if args.aggregate:
|
||||
procArgs.append('--with-aggregate-type-defaults')
|
||||
procArgs.append('md')
|
||||
procArgs.append(dir)
|
||||
procArgs.append("| sed -e '$ d' -e 'N;/^\\n$/D;P;D'")
|
||||
procArgs.append('>')
|
||||
procArgs.append("./{dir}/{dest}".format(dir=dir,dest=args.dest))
|
||||
subprocess.check_call(" ".join(procArgs), shell=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e)
|
||||
retval = 1
|
||||
return retval
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
33
setup.py
Normal file
33
setup.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
from setuptools import find_packages
|
||||
from setuptools import setup
|
||||
|
||||
|
||||
setup(
|
||||
name='pre-commit-terraform',
|
||||
description='Pre-commit hooks for terraform_docs_replace',
|
||||
url='https://github.com/antonbabenko/pre-commit-terraform',
|
||||
version_format='{tag}+{gitsha}',
|
||||
|
||||
author='Contributors',
|
||||
|
||||
classifiers=[
|
||||
'License :: OSI Approved :: MIT License',
|
||||
'Programming Language :: Python :: 2',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Programming Language :: Python :: 3',
|
||||
'Programming Language :: Python :: 3.6',
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: Implementation :: CPython',
|
||||
'Programming Language :: Python :: Implementation :: PyPy',
|
||||
],
|
||||
|
||||
packages=find_packages(exclude=('tests*', 'testing*')),
|
||||
install_requires=[
|
||||
'setuptools-git-version',
|
||||
],
|
||||
entry_points={
|
||||
'console_scripts': [
|
||||
'terraform_docs_replace = pre_commit_hooks.terraform_docs_replace:main',
|
||||
],
|
||||
},
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue