-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
executable file
·169 lines (124 loc) · 6.46 KB
/
Copy pathMakefile
File metadata and controls
executable file
·169 lines (124 loc) · 6.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# Executables: local only
DOCKER_COMPOSE = docker compose -f docker/docker-compose.yml run --rm
DOCKER = docker
MAKE = make
BUNDLE = bundle
CD = cd
# Terraform and related tools
TERRAFORM = terraform
TERRASPACE = terraspace
TFENV = tfenv
# Common system commands
GIT = git
ECHO = echo
CURL = curl
CHMOD = chmod
EXPORT = export
RM = rm
# Misc
.DEFAULT_GOAL = help
.RECIPEPREFIX +=
.PHONY: $(filter-out vendor node_modules,$(MAKECMDGOALS))
.TERRAFORM_DIR = ./terraform
# Executables
GO_TO_TERRAFORM_DIR = $(CD) $(.TERRAFORM_DIR)
TERRASPACE_ENVIRONMENT = TS_ENV=$(if $(env),$(env),$(TS_ENV))
EXEC_TS = $(GO_TO_TERRAFORM_DIR) && $(TERRASPACE_ENVIRONMENT) $(TERRASPACE)
help:
@printf "\033[33mUsage:\033[0m\n make [target] [arg=\"val\"...]\n\n\033[33mTargets:\033[0m\n"
@grep -E '^[-a-zA-Z0-9_\.\/]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-15s\033[0m %s\n", $$1, $$2}'
terraform: ## Terraform enables you to safely and predictably create, change, and improve infrastructure.
${DOCKER_COMPOSE} terraform "$1"
tf-fmt: ## Format terraform code recursively.
$(TERRAFORM) fmt --recursive
terraform-compliance: ## Terraform compliance is a security and compliance focused test framework.
${DOCKER_COMPOSE} terraform-compliance
terraspace: ## Terraspace is a terraform framework.
${DOCKER_COMPOSE} --build terraspace
codebuild-local-set-up: ## Setting up CodeBuild Agent for testing buildspecs locally
$(DOCKER) pull public.ecr.aws/codebuild/amazonlinux2-x86_64-standard:5.0
$(DOCKER) pull public.ecr.aws/codebuild/local-builds:latest
@$(CURL) -f -O https://raw.githubusercontent.com/aws/aws-codebuild-docker-images/master/local_builds/codebuild_build.sh || \
{ echo "Failed to download codebuild_build.sh" >&2; exit 1; }
@$(CHMOD) +x codebuild_build.sh || \
{ echo "Failed to set executable permissions" >&2; $(RM) -f codebuild_build.sh; exit 1; }
codebuild-run: ## Running CodeBuild for specific buildspec. Example: make codebuild-run buildspec='aws/buildspecs/website/buildspec_deploy.yml'
./codebuild_build.sh -i $(image) -d -a codebuild_artifacts -b $(buildspec) -e .env -m
TERRAFORM_VERSION ?= 1.14.3
CI_CD_INFRA_STACKS = ci-cd-infrastructure ci-cd-iam website-iam iam-groups
install-terraspace: ## Install terraspace locally.
@$(ECHO) "## Install Terraform"
$(GIT) clone https://github.com/tfutils/tfenv.git ~/.tfenv
$(ECHO) 'export PATH="$$HOME/.tfenv/bin:$$PATH"' >>~/.bash_profile
$(EXPORT) PATH="$HOME/.tfenv/bin:$PATH"
$(TFENV) install $(TERRAFORM_VERSION) || { $(ECHO) "Failed to install Terraform" && exit 1; }
$(TFENV) use $(TERRAFORM_VERSION)
# Terraspace All
terraspace-all-init: ## Init all the stacks.
$(EXEC_TS) all init
terraspace-all-validate: ## Validate all the stacks.
$(EXEC_TS) all validate
terraspace-init-stacks: ## Init a list of stacks. Variables: env, stacks.
@for stack in $(stacks); do \
$(ECHO) "## TERRASPACE INIT : $$stack"; \
($(GO_TO_TERRAFORM_DIR) && $(TERRASPACE_ENVIRONMENT) $(TERRASPACE) init $$stack) || exit 1; \
done
terraspace-validate-stacks: ## Validate a list of stacks. Variables: env, stacks.
@for stack in $(stacks); do \
$(ECHO) "## TERRASPACE VALIDATE : $$stack"; \
($(GO_TO_TERRAFORM_DIR) && $(TERRASPACE_ENVIRONMENT) $(TERRASPACE) validate $$stack) || exit 1; \
done
terraspace-ci-cd-infra-init: ## Init the stacks used by the CI/CD infrastructure pipeline. Variables: env.
$(MAKE) terraspace-init-stacks stacks="$(CI_CD_INFRA_STACKS)" env=$(if $(env),$(env),$(TS_ENV))
terraspace-ci-cd-infra-validate: ## Validate the stacks used by the CI/CD infrastructure pipeline. Variables: env.
$(MAKE) terraspace-validate-stacks stacks="$(CI_CD_INFRA_STACKS)" env=$(if $(env),$(env),$(TS_ENV))
terraspace-all-plan: ## Plan all the stacks. Variables: env.
$(EXEC_TS) all plan -y
terraspace-all-plan-file: ## Plan all the stacks into file. Variables: env, out.
$(EXEC_TS) all plan --out $(out) -y
terraspace-all-up: ## Up all the stacks. Variables: env.
$(EXEC_TS) all up -y
terraspace-all-up-plan: ## Up all the stacks from the plan. Variables: env, plan.
$(EXEC_TS) all up --plan $(plan) -y
terraspace-all-output: ## Output all the stacks variables. Variables: env.
$(EXEC_TS) all output -y
terraspace-all-output-file: ## Output all the stacks variables into file. Variables: env, out.
$(EXEC_TS) all output > $(out) -y
terraspace-all-down: ## Down all the stacks.
$(EXEC_TS) all down -y
# Terraspace Init
terraspace-init: ## Init the stack. Variables: env, stack.
$(EXEC_TS) init $(stack)
# Terraspace Validate
terraspace-validate: ## Validate the stack. Variables: env, stack.
$(EXEC_TS) validate $(stack)
# Terraspace Plan
terraspace-plan: ## Plan the stack. Variables: env, stack.
$(EXEC_TS) plan $(stack)
terraspace-plan-file: ## Plan the stack into file. Variables: env, stack, out.
$(EXEC_TS) plan $(stack) --out $(out)
# Terraspace Up
terraspace-up: ## Up the stack. Variables: env, stack.
$(EXEC_TS) up $(stack) -y
terraspace-up-plan: ## Up the stack from plan. Variables: env, stack, plan.
$(EXEC_TS) up $(stack) --plan $(plan) -y
terraspace-docker-plan: ## Plan the stack via docker compose (uses host env vars from shell, incl. ~/.bashrc). Variables: env, stack.
bash -lc "source ~/.bashrc >/dev/null 2>&1; TS_ENV=$(if $(env),$(env),$(TS_ENV)) docker compose -f docker/docker-compose.yml run --rm --entrypoint /bin/bash terraspace -lc 'terraspace plan $(stack)'"
terraspace-docker-up: ## Up the stack via docker compose (uses host env vars from shell, incl. ~/.bashrc). Variables: env, stack.
bash -lc "source ~/.bashrc >/dev/null 2>&1; TS_ENV=$(if $(env),$(env),$(TS_ENV)) docker compose -f docker/docker-compose.yml run --rm --entrypoint /bin/bash terraspace -lc 'terraspace up $(stack) -y'"
# Terraspace Output
terraspace-output: ## Output the stack variables. Variables: env, stack.
$(EXEC_TS) output $(stack)
terraspace-output-file: ## Output the stack variables into file. Variables: env, stack, out.
$(EXEC_TS) output $(stack) > $(out) -y
# Terraspace Down
terraspace-down: ## Down the stack. Variables: env, stack.
$(EXEC_TS) down $(stack) -y
pr-comments: ## Retrieve unresolved PR review comments (auto-detects current PR). Variables: PR, FORMAT.
ifdef PR
@GITHUB_HOST="$(GITHUB_HOST)" INCLUDE_OUTDATED="true" \
./scripts/get-pr-comments.sh "$(PR)" "$${FORMAT:-text}"
else
@GITHUB_HOST="$(GITHUB_HOST)" INCLUDE_OUTDATED="true" \
./scripts/get-pr-comments.sh "$${FORMAT:-text}"
endif