antonbabenko / pre-commit-terraform

pre-commit git hooks to take care of Terraform configurations 🇺🇦
MIT License
3.16k stars 535 forks source link

[terraform_docs] Can't define specific path #613

Closed mcinquin closed 8 months ago

mcinquin commented 8 months ago

Describe the bug

I have a tree structure where my tf files are not in the root but in a subfolder.

/ # Project Root
|_ blueprint
      |_ main.tf
      |_ variables.tf
      |_ *.tf
|_ .terraform-docs.yml
|_ .pre-commit-config.yaml
|_ README.md

I want to be able to do as the following cli command

$ terraform-docs -c .terraform-docs.yml --output-file ../README.md blueprint/

How can we reproduce it?

with terraform-doc cli

$ git status           
On branch pre-commit
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   blueprint/terraform.tf

no changes added to commit (use "git add" and/or "git commit -a")

$ terraform-docs -c .terraform-docs.yml --output-file ../README.md blueprint/
README.md updated successfully

$ git status
On branch pre-commit
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   README.md
    modified:   blueprint/terraform.tf

no changes added to commit (use "git add" and/or "git commit -a")

with pre-commit

$ git status           
On branch pre-commit
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   blueprint/terraform.tf

no changes added to commit (use "git add" and/or "git commit -a")

$ pre-commit run -a
trim trailing whitespace.................................................Passed
fix end of files.........................................................Passed
Terraform fmt............................................................Passed
Terraform validate with tflint...........................................Passed
Terraform validate with trivy............................................Passed
Terraform docs...........................................................Passed

$ git status           
On branch pre-commit
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   blueprint/terraform.tf

Environment information

GNU bash, version 5.2.15(1)-release (x86_64-pc-linux-gnu)
pre-commit 3.6.0
Terraform v1.6.6
python SKIPPED
Python 3.11.4
checkov checkov SKIPPED
terraform-docs version v0.16.0 1f686b1 linux/amd64
terragrunt SKIPPED
terrascan terrascan SKIPPED
TFLint version 0.49.0
+ ruleset.terraform (0.5.0-bundled)
tfsec v1.28.4
tfupdate tfupdate SKIPPED
hcledit hcledit SKIPPE
file content ```yaml default_stages: [commit] repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - repo: https://github.com/antonbabenko/pre-commit-terraform rev: v1.86.0 hooks: - id: terraform_fmt - id: terraform_tflint - id: terraform_trivy - id: terraform_docs args: - --args=--config=.terraform-docs.yml - --args=blueprint/ ```
file content ```yaml formatter: markdown table sections: hide-all: true content: |- {{ .Requirements }} {{ .Providers }} {{ .Modules }} {{ .Inputs }} {{ .Outputs }} output: file: README.md mode: inject template: |- {{ .Content }} output-values: enabled: false from: "outputs.tf" sort: enabled: true by: "required" settings: anchor: true color: true default: true description: true escape: true hide-empty: false html: true indent: 3 lockfile: true read-comments: true required: true sensitive: true type: true ```
yermulnik commented 8 months ago

Would the item 3 from https://github.com/antonbabenko/pre-commit-terraform#terraform_docs be sufficient in your use case (adding the --hook-config=--path-to-file=../README.md to args)? image You also most probably do not need --args=blueprint/ arg.

mcinquin commented 8 months ago

Hello,

Thank you for your quick response. I made the changes, but terraform_docs doesn't modify the README file in the right place

file content ```yaml default_stages: [commit] repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - repo: https://github.com/antonbabenko/pre-commit-terraform rev: v1.86.0 hooks: - id: terraform_fmt - id: terraform_tflint - id: terraform_trivy - id: terraform_docs args: - --hook-config=--path-to-file=../README.md - --args=--config=.terraform-docs.yml ```
$ git status
On branch pre-commit
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   blueprint/terraform.tf

no changes added to commit (use "git add" and/or "git commit -a")

$ pre-commit run -a -v
trim trailing whitespace.................................................Passed
- hook id: trailing-whitespace
- duration: 0.07s
fix end of files.........................................................Passed
- hook id: end-of-file-fixer
- duration: 0.06s
Terraform fmt............................................................Passed
- hook id: terraform_fmt
- duration: 0.21s
Terraform validate with tflint...........................................Passed
- hook id: terraform_tflint
- duration: 0.21s

Command 'tflint --init' successfully done:

Terraform validate with trivy............................................Passed
- hook id: terraform_trivy
- duration: 2.76s

2024-01-18T10:28:37.901+0100    INFO    Misconfiguration scanning is enabled
2024-01-18T10:28:38.728+0100    INFO    Detected config files: 1
2024-01-18T10:28:39.622+0100    INFO    Misconfiguration scanning is enabled
2024-01-18T10:28:39.672+0100    INFO    Detected config files: 0

Terraform docs...........................................................Passed
- hook id: terraform_docs
- duration: 0.37s

$ git status 
On branch pre-commit
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   blueprint/terraform.tf

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        blueprint/README.md

no changes added to commit (use "git add" and/or "git commit -a")
yermulnik commented 8 months ago

That's odd 😿 Unfortunately I'm not user of tfdocs hooks. Maybe @MaxymVlasov can give a hint 🤔

ps: taking a wild guess — what if you remove file: README.md from tfdocs config (so that we're sure there's no race condition)?

mcinquin commented 8 months ago

Thanks for pointing me in the right direction!

If I delete file: README.md in the tfdocs configuration file, it doesn't work. However, if I put file: ../README.md it works!

Thanks a lot for your reactivity!

file content ```yaml default_stages: [commit] repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - id: trailing-whitespace - id: end-of-file-fixer - repo: https://github.com/antonbabenko/pre-commit-terraform rev: v1.86.0 hooks: - id: terraform_fmt - id: terraform_tflint - id: terraform_trivy - id: terraform_docs args: - --hook-config=--path-to-file=../README.md - --args=--config=.terraform-docs.yml ```
file content ```yaml formatter: markdown table sections: hide-all: true content: |- {{ .Requirements }} {{ .Providers }} {{ .Modules }} {{ .Inputs }} {{ .Outputs }} output: file: ../README.md mode: inject template: |- {{ .Content }} output-values: enabled: false from: "outputs.tf" sort: enabled: true by: "required" settings: anchor: true color: true default: true description: true escape: true hide-empty: false html: true indent: 3 lockfile: true read-comments: true required: true sensitive: true type: true ```