diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml index 89b985b2..804df87f 100644 --- a/.pre-commit-hooks.yaml +++ b/.pre-commit-hooks.yaml @@ -18,6 +18,14 @@ exclude: \.+.terraform\/.*$ require_serial: true +- id: packer-fmt + name: Packer fmt + description: Rewrites all Packer configuration files to a canonical format + entry: hooks/packer-fmt.sh + language: script + files: (\.pkr\.(hcl|json)|\.pkrvars\.hcl)$ + require_serial: true + - id: packer-validate name: Packer validate description: Validates all Packer configuration files diff --git a/README.md b/README.md index ee07d005..c23ca855 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ supported hooks are: * **terraform-fmt**: Automatically run `terraform fmt` on all Terraform code (`*.tf` files). * **terraform-validate**: Automatically run `terraform validate` on all Terraform code (`*.tf` files). +* **packer-fmt**: Automatically run `packer fmt` on all Packer code (`*.pkr.*` files). * **packer-validate**: Automatically run `packer validate` on all Packer code (`*.pkr.*` files). * **terragrunt-hclfmt**: Automatically run `terragrunt hclfmt` on all Terragrunt configurations. * **tflint**: Automatically run [`tflint`](https://github.com/terraform-linters/tflint) on all Terraform code (`*.tf` files). diff --git a/hooks/packer-fmt.sh b/hooks/packer-fmt.sh new file mode 100755 index 00000000..467a4d65 --- /dev/null +++ b/hooks/packer-fmt.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +set -e + +# OSX GUI apps do not pick up environment variables the same way as Terminal apps and there are no easy solutions, +# especially as Apple changes the GUI app behavior every release (see https://stackoverflow.com/q/135688/483528). As a +# workaround to allow GitHub Desktop to work, add this (hopefully harmless) setting here. +original_path=$PATH +export PATH=$PATH:/usr/local/bin + +# Store and return last failure from fmt so this can validate every directory passed before exiting +FMT_ERROR=0 + +for file in "$@"; do + packer fmt -diff -check "$file" || FMT_ERROR=$? +done + +# reset path to the original value +export PATH=$original_path + +exit ${FMT_ERROR}