All #awesome-ci Docker images
ansible • ansible-lint • awesome-ci • black • checkmake • eslint • file-lint • gofmt • goimports • golint • jsonlint • phpcbf • phpcs • phplint • php-cs-fixer • pycodestyle • pylint • terraform-docs • terragrunt • terragrunt-fmt • yamlfmt • yamllint
All #awesome-ci Makefiles
Visit cytopia/makefiles for seamless project integration, minimum required best-practice code linting and CI.
View Dockerfile on GitHub.
Tiny Alpine-based multistage-build dockerized version of Terraform[1] with the ability to do terraform fmt
on Terragrunt files (.hcl
).
This is achieved by creating a temporary file within the container with an .tf
extension and then running terraform fmt
on it.
Additionally the wrapper has been extended with a -ignore
argument to be able to ignore files and directory or wildcards.
The image is built nightly against multiple stable versions and pushed to Dockerhub.
[1] Official project: https://github.com/hashicorp/terraform
The following Docker image tags are rolling releases and built and updated nightly. This means they always contain the latest stable version as shown below.
Docker tag | Terraform version |
---|---|
latest |
latest stable |
0.12 |
latest stable 0.12.x |
The working directory inside the Docker container is /data/
and should be mounted to your local filesystem where your Terragrant project resides.
(See Examples for mount location usage.)
$ docker run --rm cytopia/terragrunt-fmt --help
Usage: cytopia/terragrunt-fmt [options] [DIR]
cytopia/terragrunt-fmt --help
cytopia/terragrunt-fmt --version
Rewrites all Terragrunt configuration files to a canonical format. All
hcl configuration files (.hcl) are updated.
If DIR is not specified then the current working directory will be used.
Options:
-list=true List files whose formatting differs
-write=false Don't write to source files
(always disabled if using -check)
-diff Display diffs of formatting changes
-check Check if the input is formatted. Exit status will be 0 if all
input is properly formatted and non-zero otherwise.
-recursive Also process files in subdirectories. By default, only the
given directory (or current directory) is processed.
-ignore=a,b Comma separated list of paths to ignore.
The wildcard character '*' is supported.
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -list
[INFO] Finding files: for file in *.hcl; do
terraform fmt -list=true -write=true validate.hcl
../tmp/validate.hcl.tf
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -diff
[INFO] Finding files: for file in *.hcl; do
terraform fmt -list=true -write=false -diff validate.hcl
../tmp/validate.hcl.tf
--- old/../tmp/validate.hcl.tf
+++ new/../tmp/validate.hcl.tf
@@ -35,9 +35,9 @@
# which is not being used (disable_init)
remote_state {
backend = "s3"
- config = {
- bucket = "none"
- key = "none"
+ config = {
+ bucket = "none"
+ key = "none"
region = "eu-central-1"
}
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -write
[INFO] Finding files: for file in *.hcl; do
terraform fmt -list=true -write=true validate.hcl
../tmp/validate.hcl.tf
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -write -diff
[INFO] Finding files: for file in *.hcl; do
terraform fmt -list=true -write=false -diff validate.hcl
../tmp/validate.hcl.tf
--- old/../tmp/validate.hcl.tf
+++ new/../tmp/validate.hcl.tf
@@ -35,9 +35,9 @@
# which is not being used (disable_init)
remote_state {
backend = "s3"
- config = {
- bucket = "none"
- key = "none"
+ config = {
+ bucket = "none"
+ key = "none"
region = "eu-central-1"
}
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -list -recursive
[INFO] Finding files: find . -name '*.hcl' -type f
terraform fmt -list=true -write=false ./prod/eu-central-1/microservice/terragrunt.hcl
../tmp/terragrunt.hcl.tf
terraform fmt -list=true -write=false ./prod/eu-central-1/infra/terragrunt.hcl
../tmp/terragrunt.hcl.tf
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -diff -recursive
[INFO] Finding files: find . -name '*.hcl' -type f
terraform fmt -list=true -write=false -diff ./prod/eu-central-1/microservice/terragrunt.hcl
../tmp/terragrunt.hcl.tf
--- old/../tmp/terragrunt.hcl.tf
+++ new/../tmp/terragrunt.hcl.tf
@@ -1,5 +1,5 @@
terraform {
- source = "github.com/cytopia/terraform-aws-iam-cross-account?ref=v0.1.3"
+ source = "github.com/cytopia/terraform-aws-iam-cross-account?ref=v0.1.3"
}
terraform fmt -list=true -write=false -diff ./prod/eu-central-1/infra/terragrunt.hcl
../tmp/terragrunt.hcl.tf
--- old/../tmp/terragrunt.hcl.tf
+++ new/../tmp/terragrunt.hcl.tf
@@ -1,5 +1,5 @@
terraform {
- source = "github.com/cytopia/terraform-aws-iam-cross-account?ref=v0.1.3"
+ source = "github.com/cytopia/terraform-aws-iam-cross-account?ref=v0.1.3"
}
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -write -recursive
[INFO] Finding files: find . -name '*.hcl' -type f
terraform fmt -list=true -write=true ./prod/eu-central-1/microservice/terragrunt.hcl
../tmp/terragrunt.hcl.tf
terraform fmt -list=true -write=true ./prod/eu-central-1/infra/terragrunt.hcl
../tmp/terragrunt.hcl.tf
Ignore all files named terragrunt.hcl
.
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -recursive -ignore=*terragrunt.hcl
[INFO] Finding files: find . -not \( -path "./*terragrunt.hcl*" \) -name '*.hcl' -type f
terraform fmt -list=true -write=false ./aws/validate.hcl
../tmp/validate.hcl.tf
Ignore all directories named dev/
and everything inside.
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -recursive -ignore=*/dev/
[INFO] Finding files: find . -not \( -path "./*/dev/*" \) -name '*.hcl' -type f
terraform fmt -list=true -write=false ./prod/eu-central-1/microservice/terragrunt.hcl
../tmp/terragrunt.hcl.tf
terraform fmt -list=true -write=false ./prod/eu-central-1/infra/terragrunt.hcl
../tmp/terragrunt.hcl.tf
Ignore all directories named dev/
and testing/
and everything inside.
$ docker run --rm -v $(pwd):/data cytopia/terragrunt-fmt -recursive -ignore=*/dev/,*/testing/
[INFO] Finding files: find . -not \( -path "./*/dev/*" -o -path "./*/testing/*" \) -name '*.hcl' -type f
terraform fmt -list=true -write=false ./prod/eu-central-1/microservice/terragrunt.hcl
../tmp/terragrunt.hcl.tf
terraform fmt -list=true -write=false ./prod/eu-central-1/infra/terragrunt.hcl
../tmp/terragrunt.hcl.tf
You can add the following Makefile to your project for easy linting anf fixing of Terragrunt .hcl
files.
ifneq (,)
.error This Makefile requires GNU Make.
endif
.PHONY: help lint fix _pull
CURRENT_DIR = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
# Adjust according to your needs
IGNORE = */.terragrunt-cache/,*/.terraform/
FMT_VERSION = latest
help:
@echo "help Show this help"
@echo "lint Exit > 0 if any files have wrong formatting"
@echo "fix Fix all .hcl files"
lint: _pull
docker run --rm -v $(CURRENT_DIR):/data cytopia/terragrunt-fmt:$(FMT_VERSION) \
-check -diff -recursive -ignore='$(IGNORE)'
fix: _pull
docker run --rm -v $(CURRENT_DIR):/data cytopia/terragrunt-fmt:$(FMT_VERSION) \
-write -diff -recursive -ignore='$(IGNORE)'
_pull:
docker pull cytopia/terragrunt-fmt:$(FMT_VERSION)
With the above Makefile in place, you can easily add a Travis CI rule to ensure the Terragrunt code uses correct coding style.
---
sudo: required
language: minimal
services:
- docker
script:
- make lint
Related #awesome-ci projects
Save yourself from installing lot's of dependencies and pick a dockerized version of your favourite linter below for reproducible local or remote CI tests:
GitHub | DockerHub | Type | Description |
---|---|---|---|
awesome-ci | Basic | Tools for git, file and static source code analysis | |
file-lint | Basic | Baisc source code analysis | |
ansible | Ansible | Multiple versions and flavours of Ansible | |
ansible-lint | Ansible | Lint Ansible | |
gofmt | Go | Format Go source code [1] | |
goimports | Go | Format Go source code [1] | |
golint | Go | Lint Go code | |
eslint | Javascript | Lint Javascript code | |
jsonlint | JSON | Lint JSON files [1] | |
checkmake | Make | Lint Makefiles | |
phpcbf | PHP | PHP Code Beautifier and Fixer | |
phpcs | PHP | PHP Code Sniffer | |
phplint | PHP | PHP Code Linter [1] | |
php-cs-fixer | PHP | PHP Coding Standards Fixer | |
black | Python | The uncompromising Python code formatter | |
pycodestyle | Python | Python style guide checker | |
pylint | Python | Python source code, bug and quality checker | |
terraform-docs | Terraform | Terraform doc generator (TF 0.12 ready) [1] | |
terragrunt | Terraform | Terragrunt and Terraform | |
terragrunt-fmt | Terraform | terraform fmt for Terragrunt files [1] |
|
yamlfmt | Yaml | Format Yaml files [1] | |
yamllint | Yaml | Lint Yaml files |
[1] Uses a shell wrapper to add enhanced functionality not available by original project.
Visit cytopia/makefiles for dependency-less, seamless project integration and minimum required best-practice code linting for CI. The provided Makefiles will only require GNU Make and Docker itself removing the need to install anything else.
Copyright (c) 2019 cytopia