|
| 1 | +ifneq (,) |
| 2 | +.error This Makefile requires GNU Make. |
| 3 | +endif |
| 4 | + |
| 5 | +.PHONY: help gen lint test _gen-main _gen-examples _gen-modules _lint_files _lint_fmt _pull-tf _pull-tf-docs |
| 6 | + |
| 7 | +CURRENT_DIR = $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) |
| 8 | +TF_EXAMPLES = $(sort $(dir $(wildcard $(CURRENT_DIR)examples/*/))) |
| 9 | +TF_MODULES = $(sort $(dir $(wildcard $(CURRENT_DIR)modules/*/))) |
| 10 | + |
| 11 | +TF_VERSION = light |
| 12 | +TF_DOCS_VERSION = 0.9.1 |
| 13 | + |
| 14 | +# Adjust your delimiter here or overwrite via make arguments |
| 15 | +DELIM_START = <!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK --> |
| 16 | +DELIM_CLOSE = <!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK --> |
| 17 | + |
| 18 | +help: |
| 19 | + @echo "gen Generate terraform-docs output and replace in all README.md's" |
| 20 | + @echo "lint Static source code analysis" |
| 21 | + @echo "test Integration tests" |
| 22 | + |
| 23 | +gen: _pull-tf-docs |
| 24 | + @echo "################################################################################" |
| 25 | + @echo "# Terraform-docs generate" |
| 26 | + @echo "################################################################################" |
| 27 | + @$(MAKE) --no-print-directory _gen-main |
| 28 | + @$(MAKE) --no-print-directory _gen-examples |
| 29 | + @$(MAKE) --no-print-directory _gen-modules |
| 30 | + |
| 31 | +lint: _pull-tf |
| 32 | + @$(MAKE) --no-print-directory _lint_files |
| 33 | + @$(MAKE) --no-print-directory _lint_fmt |
| 34 | + |
| 35 | +test: _pull-tf |
| 36 | + @$(foreach example,\ |
| 37 | + $(TF_EXAMPLES),\ |
| 38 | + DOCKER_PATH="/t/examples/$(notdir $(patsubst %/,%,$(example)))"; \ |
| 39 | + echo "################################################################################"; \ |
| 40 | + echo "# examples/$$( basename $${DOCKER_PATH} )"; \ |
| 41 | + echo "################################################################################"; \ |
| 42 | + echo; \ |
| 43 | + echo "------------------------------------------------------------"; \ |
| 44 | + echo "# Terraform init"; \ |
| 45 | + echo "------------------------------------------------------------"; \ |
| 46 | + if docker run -it --rm -v "$(CURRENT_DIR):/t" --workdir "$${DOCKER_PATH}" hashicorp/terraform:$(TF_VERSION) \ |
| 47 | + init \ |
| 48 | + -verify-plugins=true \ |
| 49 | + -lock=false \ |
| 50 | + -upgrade=true \ |
| 51 | + -reconfigure \ |
| 52 | + -input=false \ |
| 53 | + -get-plugins=true \ |
| 54 | + -get=true \ |
| 55 | + .; then \ |
| 56 | + echo "OK"; \ |
| 57 | + else \ |
| 58 | + echo "Failed"; \ |
| 59 | + docker run -it --rm -v "$(CURRENT_DIR):/t" --workdir "$${DOCKER_PATH}" --entrypoint=rm hashicorp/terraform:$(TF_VERSION) -rf .terraform/ || true; \ |
| 60 | + exit 1; \ |
| 61 | + fi; \ |
| 62 | + echo; \ |
| 63 | + echo "------------------------------------------------------------"; \ |
| 64 | + echo "# Terraform validate"; \ |
| 65 | + echo "------------------------------------------------------------"; \ |
| 66 | + if docker run -it --rm -v "$(CURRENT_DIR):/t" --workdir "$${DOCKER_PATH}" hashicorp/terraform:$(TF_VERSION) \ |
| 67 | + validate \ |
| 68 | + $(ARGS) \ |
| 69 | + .; then \ |
| 70 | + echo "OK"; \ |
| 71 | + docker run -it --rm -v "$(CURRENT_DIR):/t" --workdir "$${DOCKER_PATH}" --entrypoint=rm hashicorp/terraform:$(TF_VERSION) -rf .terraform/ || true; \ |
| 72 | + else \ |
| 73 | + echo "Failed"; \ |
| 74 | + docker run -it --rm -v "$(CURRENT_DIR):/t" --workdir "$${DOCKER_PATH}" --entrypoint=rm hashicorp/terraform:$(TF_VERSION) -rf .terraform/ || true; \ |
| 75 | + exit 1; \ |
| 76 | + fi; \ |
| 77 | + echo; \ |
| 78 | + ) |
| 79 | + |
| 80 | +_gen-main: |
| 81 | + @echo "------------------------------------------------------------" |
| 82 | + @echo "# Main module" |
| 83 | + @echo "------------------------------------------------------------" |
| 84 | + @if docker run --rm \ |
| 85 | + -v $(CURRENT_DIR):/data \ |
| 86 | + -e DELIM_START='$(DELIM_START)' \ |
| 87 | + -e DELIM_CLOSE='$(DELIM_CLOSE)' \ |
| 88 | + cytopia/terraform-docs:$(TF_DOCS_VERSION) \ |
| 89 | + terraform-docs-replace-012 --sort-inputs-by-required --with-aggregate-type-defaults md README.md; then \ |
| 90 | + echo "OK"; \ |
| 91 | + else \ |
| 92 | + echo "Failed"; \ |
| 93 | + exit 1; \ |
| 94 | + fi |
| 95 | + |
| 96 | +_gen-examples: |
| 97 | + @$(foreach example,\ |
| 98 | + $(TF_EXAMPLES),\ |
| 99 | + DOCKER_PATH="examples/$(notdir $(patsubst %/,%,$(example)))"; \ |
| 100 | + echo "------------------------------------------------------------"; \ |
| 101 | + echo "# $${DOCKER_PATH}"; \ |
| 102 | + echo "------------------------------------------------------------"; \ |
| 103 | + if docker run --rm \ |
| 104 | + -v $(CURRENT_DIR):/data \ |
| 105 | + --workdir "/data/$${DOCKER_PATH}" \ |
| 106 | + -e DELIM_START='$(DELIM_START)' \ |
| 107 | + -e DELIM_CLOSE='$(DELIM_CLOSE)' \ |
| 108 | + cytopia/terraform-docs:$(TF_DOCS_VERSION) \ |
| 109 | + terraform-docs-replace-012 --sort-inputs-by-required --with-aggregate-type-defaults md README.md; then \ |
| 110 | + echo "OK"; \ |
| 111 | + else \ |
| 112 | + echo "Failed"; \ |
| 113 | + exit 1; \ |
| 114 | + fi; \ |
| 115 | + ) |
| 116 | + |
| 117 | +_gen-modules: |
| 118 | + @$(foreach module,\ |
| 119 | + $(TF_MODULES),\ |
| 120 | + DOCKER_PATH="modules/$(notdir $(patsubst %/,%,$(module)))"; \ |
| 121 | + echo "------------------------------------------------------------"; \ |
| 122 | + echo "# $${DOCKER_PATH}"; \ |
| 123 | + echo "------------------------------------------------------------"; \ |
| 124 | + if docker run --rm \ |
| 125 | + -v $(CURRENT_DIR):/data \ |
| 126 | + -e DELIM_START='$(DELIM_START)' \ |
| 127 | + -e DELIM_CLOSE='$(DELIM_CLOSE)' \ |
| 128 | + cytopia/terraform-docs:$(TF_DOCS_VERSION) \ |
| 129 | + terraform-docs-replace-012 --sort-inputs-by-required --with-aggregate-type-defaults md $${DOCKER_PATH}/README.md; then \ |
| 130 | + echo "OK"; \ |
| 131 | + else \ |
| 132 | + echo "Failed"; \ |
| 133 | + exit 1; \ |
| 134 | + fi; \ |
| 135 | + ) |
| 136 | + |
| 137 | +_lint_files: |
| 138 | + @# Lint all non-binary files for trailing spaces |
| 139 | + @echo "################################################################################" |
| 140 | + @echo "# Lint files" |
| 141 | + @echo "################################################################################" |
| 142 | + @echo |
| 143 | + @echo "------------------------------------------------------------" |
| 144 | + @echo "# Trailing spaces" |
| 145 | + @echo "------------------------------------------------------------" |
| 146 | + find . -type f -not \( -path "*/.git/*" -o -path "*/.github/*" -o -path "*/.terraform/*" -o -path "*/.idea/*"\) -print0 \ |
| 147 | + | xargs -0 -n1 grep -Il '' \ |
| 148 | + | tr '\n' '\0' \ |
| 149 | + | xargs -0 -n1 \ |
| 150 | + sh -c 'if [ -f "$${1}" ]; then if LC_ALL=C grep --color=always -inHE "^.*[[:blank:]]+$$" "$${1}";then false; else true; fi; fi' -- |
| 151 | + @echo |
| 152 | + @echo "------------------------------------------------------------" |
| 153 | + @echo "# Windows line feeds (CRLF)" |
| 154 | + @echo "------------------------------------------------------------" |
| 155 | + find . -type f -not \( -path "*/.git/*" -o -path "*/.github/*" -o -path "*/.terraform/*" -o -path "*/.idea/*"\) -print0 \ |
| 156 | + | xargs -0 -n1 grep -Il '' \ |
| 157 | + | tr '\n' '\0' \ |
| 158 | + | xargs -0 -n1 \ |
| 159 | + sh -c 'if [ -f "$${1}" ]; then if file "$${1}" | grep --color=always -E "[[:space:]]CRLF[[:space:]].*line"; then false; else true; fi; fi' -- |
| 160 | + @echo |
| 161 | + @echo "------------------------------------------------------------" |
| 162 | + @echo "# Single trailing newline" |
| 163 | + @echo "------------------------------------------------------------" |
| 164 | + find . -type f -not \( -path "*/.git/*" -o -path "*/.github/*" -o -path "*/.terraform/*" -o -path "*/.idea/*"\) -print0 \ |
| 165 | + | xargs -0 -n1 grep -Il '' \ |
| 166 | + | tr '\n' '\0' \ |
| 167 | + | xargs -0 -n1 \ |
| 168 | + sh -c 'if [ -f "$${1}" ]; then if ! (tail -c 1 "$${1}" | grep -Eq "^$$" && tail -c 2 "$${1}" | grep -Eqv "^$$"); then echo "$${1}"; false; else true; fi; fi' -- |
| 169 | + @echo |
| 170 | + |
| 171 | +_lint_fmt: |
| 172 | + @# Lint all Terraform files |
| 173 | + @echo "################################################################################" |
| 174 | + @echo "# Terraform fmt" |
| 175 | + @echo "################################################################################" |
| 176 | + @echo |
| 177 | + @echo "------------------------------------------------------------" |
| 178 | + @echo "# *.tf files" |
| 179 | + @echo "------------------------------------------------------------" |
| 180 | + @if docker run --rm -v "$(CURRENT_DIR):/t:ro" --workdir "/t" hashicorp/terraform:$(TF_VERSION) \ |
| 181 | + fmt -check=true -diff=true -write=false -list=true /t; then \ |
| 182 | + echo "OK"; \ |
| 183 | + else \ |
| 184 | + echo "Failed"; \ |
| 185 | + exit 1; \ |
| 186 | + fi; |
| 187 | + @echo "------------------------------------------------------------" |
| 188 | + @echo "# tfsec" |
| 189 | + @echo "------------------------------------------------------------" |
| 190 | + @if docker run --rm -v "$(CURRENT_DIR):/workdir:ro" --workdir "/workdir" tamr-docker.jfrog.io/ops/tfsec:v0.19.0 . ; then \ |
| 191 | + echo "OK"; \ |
| 192 | + else \ |
| 193 | + echo "Failed"; \ |
| 194 | + exit 1; \ |
| 195 | + fi; |
| 196 | + @echo |
| 197 | + @echo "------------------------------------------------------------" |
| 198 | + @echo "# *.tfvars files" |
| 199 | + @echo "------------------------------------------------------------" |
| 200 | + @if docker run --rm --entrypoint=/bin/sh -v "$(CURRENT_DIR)/terraform:/t:ro" hashicorp/terraform:$(TF_VERSION) \ |
| 201 | + -c "find . -name '*.tfvars' -type f -print0 | xargs -0 -n1 terraform fmt -check=true -write=false -diff=true -list=true"; then \ |
| 202 | + echo "OK"; \ |
| 203 | + else \ |
| 204 | + echo "Failed"; \ |
| 205 | + exit 1; \ |
| 206 | + fi; |
| 207 | + @echo |
| 208 | + |
| 209 | +_pull-tf: |
| 210 | + docker pull hashicorp/terraform:$(TF_VERSION) |
| 211 | + |
| 212 | +_pull-tf-docs: |
| 213 | + docker pull cytopia/terraform-docs:$(TF_DOCS_VERSION) |
0 commit comments