antonbabenko/pre-commit-terraform

[terraform_docs] Can't define specific path

mcinquin opened this issue · 4 comments

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

  • OS: Ubuntu 20.04

  • uname -a and/or systeminfo | Select-String "^OS" output:

Linux tllab036 6.2.0-39-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 14 14:18:00 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  • Tools availability and versions:
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
  • .pre-commit-config.yaml:
file content
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/
  • .terraform-docs.yml:
file content
formatter: markdown table

sections:
  hide-all: true

content: |-
  {{ .Requirements }}

  {{ .Providers }}

  {{ .Modules }}

  {{ .Inputs }}

  {{ .Outputs }}

output:
  file: README.md
  mode: inject
  template: |-
    <!-- BEGIN_AUTOMATED_TF_DOCS_BLOCK -->

    {{ .Content }}

    <!-- END_AUTOMATED_TF_DOCS_BLOCK -->

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

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.

Hello,

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

  • .pre-commit-config.yaml:
file content
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")

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)?

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!

  • .pre-commit-config.yaml
file content
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
  • .terraform-docs.yml
file content
formatter: markdown table

sections:
  hide-all: true

content: |-
  {{ .Requirements }}

  {{ .Providers }}

  {{ .Modules }}

  {{ .Inputs }}

  {{ .Outputs }}

output:
  file: ../README.md
  mode: inject
  template: |-
    <!-- BEGIN_AUTOMATED_TF_DOCS_BLOCK -->

    {{ .Content }}

    <!-- END_AUTOMATED_TF_DOCS_BLOCK -->

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