mirror of
https://github.com/tofuutils/pre-commit-opentofu.git
synced 2025-10-15 17:38:54 +02:00
Add new hook for running terraform-docs with replacing README.md from doc in main.tf
This commit is contained in:
parent
7acd99eeb7
commit
9aa971c069
6 changed files with 102 additions and 40 deletions
|
|
@ -23,6 +23,14 @@
|
|||
files: (\.tf)$
|
||||
exclude: \.terraform\/.*$
|
||||
|
||||
- id: terraform_docs_replace
|
||||
name: Generate documentation for Terraform modules
|
||||
language: python
|
||||
entry: terraform_docs_replace
|
||||
files: (\.tf)$
|
||||
exclude: \.terraform\/.*$
|
||||
description: Generates README.md files for Terraform modules
|
||||
|
||||
- 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).
|
||||
|
|
|
|||
10
README.md
10
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,6 +62,15 @@ 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.
|
||||
|
||||
1. Example:
|
||||
```yaml
|
||||
hooks:
|
||||
- id: terraform_docs_replace
|
||||
args: ['--with-aggregate-type-defaults', '--sort-inputs-by-required']
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
Enjoy the clean and documented code!
|
||||
|
|
|
|||
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
50
pre_commit_hooks/terraform_docs_replace.py
Normal file
50
pre_commit_hooks/terraform_docs_replace.py
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
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(
|
||||
'--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:
|
||||
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('{}/README.md'.format(dir))
|
||||
subprocess.check_call(" ".join(procArgs), shell=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(e)
|
||||
retval = 1
|
||||
return retval
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
34
setup.py
Normal file
34
setup.py
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
from setuptools import find_packages
|
||||
from setuptools import setup
|
||||
|
||||
|
||||
setup(
|
||||
name='pre-commit-terraform',
|
||||
description='Pre-commit hooks for Terraform',
|
||||
url='https://github.com/antonbabenko/pre-commit-terraform',
|
||||
version_format='{tag}+{gitsha}',
|
||||
|
||||
author='Andrew Roth',
|
||||
author_email='roth.andy@gmail.com',
|
||||
|
||||
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