-
Notifications
You must be signed in to change notification settings - Fork 1
/
Makefile.orig
97 lines (74 loc) · 2.72 KB
/
Makefile.orig
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
.DELETE_ON_ERROR:
.PHONY: all build clean default dependency-graph tform-build tform-deploy set-bucket-var test-gcloud-connection test-var-file-exists
# suppress implict rules
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
.SUFFIXES:
default: build
BASH:=$(shell which bash)
SHELL:=$(BASH)
YQ:=$(shell which yq)
TERRAFORM:=$(shell which terraform)
GCLOUD_CONNECTION_TEST:=gcloud projects list --account $(CLOUDCRAFT_GCLOUD_ACCOUNT)
VAR_FILE:=liquid-minecraft.tfvars.json
SRC_DIR:=./src
BUILD_DIR:=./build
STAGING_DIR:=$(BUILD_DIR)/staging
TFORM_SRC:=$(SRC_DIR)/terraform
TFORM_MAIN_SRC:=$(TFORM_SRC)/main.tf.yaml
TFORM_MAIN_STAGED:=$(STAGING_DIR)/main.tf.yaml
TFORM_MAIN_FILE:=$(BUILD_DIR)/main.tf.json
TFORM_INIT_LOCK:=$(BUILD_DIR)/.terraform.lock.hcl
build: tform-build
deploy: tform-deploy
all: build
clean:
rm -rf $(BUILD_DIR)
# Terraform rules
## Terraform build rules
tform-build: test-gcloud-connection $(TFORM_INIT_LOCK)
test-gcloud-connection:
@test -n "$(CLOUDCRAFT_GCLOUD_ACCOUNT)" \
|| { \
echo -e "No gcloud account defined; try:\n\nexport CLOUDCRAFT_GCLOUD_ACCOUNT=you@some-domain.com\n"; \
exit 1; \
}
@$(GCLOUD_CONNECTION_TEST) 2>&1 > /dev/null \
|| { \
echo -e "Test command '$(GCLOUD_CONNECTION_TEST)' failed; try:\n\ngcloud auth login\n"; \
exit 1; \
}
test-var-file-exists:
@test -f $(VAR_FILE) || { \
echo -e "Did not find expected $(VAR_FILE); populate with entries for:\n - bucket\n - credentials_file\n - org_id\n - project\n - project_id"; \
exit 1; \
}
EXTRACT_BUCKET_VALUE_CMD:=$(shell cat $(VAR_FILE) | jq -r '.bucket // empty')
set-bucket-name-var: test-var-file-exists
@test -n "$(EXTRACT_BUCKET_VALUE_CMD)" || { \
echo -e "'bucket' not defined in $(VAR_FILE); define and re-run"; \
exit 1; \
}
$(eval BUCKET_NAME:=$(EXTRACT_BUCKET_VALUE_CMD))
$(TFORM_MAIN_STAGED): $(TFORM_MAIN_SRC) set-bucket-name-var
@test -d "$(dir $@)" || mkdir -p "$(dir $@)"
sed -E 's/~~.+~~/$(BUCKET_NAME)/' "$<" > "$@"
$(TFORM_MAIN_FILE): $(TFORM_MAIN_STAGED) # the base yaml files contain bits to be replaced, so we create a staged file
@test -d "$(dir $@)" || mkdir -p "$(dir $@)"
cat "$<" | $(YQ) > "$@"
$(TFORM_INIT_LOCK): $(TFORM_MAIN_FILE)
cd $(BUILD_DIR) && $(TERRAFORM) init
# Terraform deploy rules
tform-deploy: tform-build
cd $(BUILD_DIR) && $(TERRAFORM) apply -var-file="../liquid-minecraft.tfvars.json" -auto-approve
plan: build
cd $(BUILD_DIR) && $(TERRAFORM) plan -var-file="../liquid-minecraft.tfvars.json"
# Terraform utility rules
dependency-graph: dependencies.png
open dependencies.png
dependencies.png:
make -Bnd | make2graph | dot -Tpng -o "$@"
deploy-graph: deploy.png
open deploy.png
deploy.png:
cd $(BUILD_DIR) && $(TERRAFORM) graph | dot -Tpng -o "../$@"