{"id":15292459,"url":"https://github.com/padok-team/guacamole","last_synced_at":"2026-02-11T22:06:54.937Z","repository":{"id":205322229,"uuid":"660540234","full_name":"padok-team/guacamole","owner":"padok-team","description":"Evaluate your IaC quality","archived":false,"fork":false,"pushed_at":"2025-04-15T01:25:36.000Z","size":17722,"stargazers_count":14,"open_issues_count":11,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-15T06:15:06.912Z","etag":null,"topics":["cli","golang","iac","quality","terraform","terragrunt"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/padok-team.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-30T08:33:15.000Z","updated_at":"2025-04-01T13:32:55.000Z","dependencies_parsed_at":"2023-12-26T02:24:42.861Z","dependency_job_id":"57e9ace5-62a2-4ae4-997b-d493ec096651","html_url":"https://github.com/padok-team/guacamole","commit_stats":{"total_commits":138,"total_committers":7,"mean_commits":"19.714285714285715","dds":0.5072463768115942,"last_synced_commit":"98453b1073a50c97f71ef00b473853dd3348ca00"},"previous_names":["padok-team/guacamole"],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fguacamole","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fguacamole/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fguacamole/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/padok-team%2Fguacamole/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/padok-team","download_url":"https://codeload.github.com/padok-team/guacamole/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249016641,"owners_count":21198833,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","golang","iac","quality","terraform","terragrunt"],"created_at":"2024-09-30T16:17:56.717Z","updated_at":"2026-02-11T22:06:49.894Z","avatar_url":"https://github.com/padok-team.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Guacamole 🥑\n\nA CLI tool that runs opinionated quality checks on your IaC codebase.\n\nCheck the [IaC guild guidelines](https://padok-team.github.io/docs-terraform-guidelines/) for more information on the quality checks.\n\n## Install\n\n### With Homebrew\n\n\u003e :information_source: If you use Linux, you can install [Linuxbrew](https://docs.brew.sh/Homebrew-on-Linux)\n\n```bash\nbrew tap padok-team/tap\nbrew install guacamole\n```\n\n### From GitHub\n\n**Prerequisites :**\n\n- Golang\n- Terraform\n- Terragrunt\n\nOne-liner installer (in `/tmp`) :\n\n```bash\nDIR=$(pwd) cd /tmp \u0026\u0026 git clone git@github.com:padok-team/guacamole.git \u0026\u0026 cd guacamole \u0026\u0026 go build \u0026\u0026 alias guacamole=/tmp/guacamole/guacamole \u0026\u0026 cd $DIR\n```\n\nFor a more permanent installation, just move the `/tmp/guacamole/guacamole` binary into a directory present in your `$PATH`.\n\n## Usage\n\nThree modes currently exist :\n\n- Static mode : runs quality checks on the codebase without running Terraform / Terragrunt commands\n\n  ```bash\n  guacamole static -p /path/to/your/codebase\n  ```\n\n  - By default, it will launch [module](#static-module-check-for-terraform) and [layer](#static-layer-check-for-terragrunt) checks\n  - To launch [layer](#static-layer-check-for-terragrunt) check use `guacamole static layer`\n  - To launch [module](#static-module-check-for-terraform) check use `guacamole static module`\n\n- [EXPERIMENTAL] State mode : runs quality checks based on your layers' state\n\n  We recommend using this command after checking that your codebase has been initialized properly.\n\n  ```bash\n  guacamole state -p /path/to/your/codebase\n  ```\n\n- [EXPERIMENTAL] Profile mode : creates a detailed report of the contents of your codebase\n\n  We recommend using this command after checking that your codebase has been initialized properly.\n\n  ```bash\n  guacamole profile -p /path/to/your/codebase\n  ```\n\nA verbose mode (`-v`) exists to add more information to the output.\n\n### Skipping individual checks\n\nYou can use inline code comments to skip individual checks for a particular resource.\n\n⚠️ Currently only supports static checks on modules for Terraform ⚠️\n\nTo skip a check on a given Terraform definition block resource, apply the following comment pattern inside its scope: `# guacamole-ignore:\u003ccheck_id\u003e \u003csuppression_comment\u003e`\n\n- \u003ccheck_id\u003e is one of the available check scanners.\n- \u003csuppression_comment\u003e is an optional suppression reason.\n\nExample:\n\nThe following comment skips the `TF_NAM_001` check on the resource identified by `network`\n\n```bash\n# guacamole-ignore:TF_NAM_001 We will be creating more rg\nresource \"azurerm_resource_group\" \"network\" {\n  name...\n```\n\nYou can also whitelist entire checks in **modules** by adding them to a `.guacamoleignore` file at the root of your codebase.\nThe format of the file should be: path of the `module - check ID` to ignore.\n\n```bash\npathtomodule/modules/cloud-run-app TF_MOD_002,TF_MOD_001\npathtomodule/modules/network TF_NAM_001\n\n```\n\nThis is the only way to whitelist the check `TF_MOD_002`\n\nYou can specify the path of the `.guacamoleignore` file with the `-w` flag.\n\n## List of checks\n\n### Static module check for Terraform\n\n- `TF_MOD_001` - [Remote module call should be pinned to a specific version](https://padok-team.github.io/docs-terraform-guidelines/terraform/terraform_versioning.html#module-layer-versioning)\n- `TF_MOD_002` - [Provider should be defined by the consumer of the module](https://padok-team.github.io/docs-terraform-guidelines/terraform/donts.html#using-provider-block-in-modules)\n- `TF_MOD_003` - [Required provider versions in modules should be set with ~\u003e operator](https://padok-team.github.io/docs-terraform-guidelines/terraform/terraform_versioning.html#required-providers-version-for-modules)\n- `TF_NAM_001` - [Resources in modules should be named \"this\" or \"these\" if their type is unique](https://padok-team.github.io/docs-terraform-guidelines/terraform/terraform_naming.html#resource-andor-data-source-naming)\n- `TF_NAM_002` - [snake_case should be used for all resource names](https://padok-team.github.io/docs-terraform-guidelines/terraform/terraform_naming.html#resource-andor-data-source-naming)\n- `TF_NAM_003` - [Stuttering in the naming of resources](https://padok-team.github.io/docs-terraform-guidelines/terraform/terraform_naming.html#resource-andor-data-source-naming)\n- `TF_NAM_004` - [Variable name's number should match its type](https://padok-team.github.io/docs-terraform-guidelines/terraform/terraform_naming.html#variables)\n- `TF_NAM_005` - [Resources and data sources should not be named \\\"this\\\" or \\\"these\\\" if there are more than 1 of the same type](https://padok-team.github.io/docs-terraform-guidelines/terraform/terraform_naming.html#resource-andor-data-source-naming)\n- `TF_VAR_001` - [Variable should contain a description](https://padok-team.github.io/docs-terraform-guidelines/terraform/donts.html#variables)\n- `TF_VAR_002` - [Variable should declare a specific type](https://padok-team.github.io/docs-terraform-guidelines/terraform/donts.html#using-type-any-in-variables)\n\n### Static layer check for Terragrunt\n\n- `TG_DRY_001` - [No duplicate inputs within a layer](https://padok-team.github.io/docs-terraform-guidelines/terragrunt/context_pattern.html#%EF%B8%8F-context)\n\n### State\n\n- `TF_MOD_004` - [Use for_each to create multiple resources of the same type](https://padok-team.github.io/docs-terraform-guidelines/terraform/iterate_on_your_resources.html)\n\n## Demo\n\n![Demo](/assets/demo.gif)\n\n## License\n\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadok-team%2Fguacamole","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpadok-team%2Fguacamole","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpadok-team%2Fguacamole/lists"}