forked from e2b-dev/infra
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
176 lines (152 loc) · 6.62 KB
/
Makefile
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
170
171
172
173
174
175
ENV := $(shell cat .last_used_env || echo "not-set")
ENV_FILE := $(PWD)/.env.${ENV}
-include ${ENV_FILE}
TERRAFORM_STATE_BUCKET ?= $(GCP_PROJECT_ID)-terraform-state
OTEL_TRACING_PRINT ?= false
TEMPLATE_BUCKET_LOCATION ?= $(GCP_REGION)
CLIENT_CLUSTER_AUTO_SCALING_MAX ?= 0
tf_vars := TF_VAR_client_machine_type=$(CLIENT_MACHINE_TYPE) \
TF_VAR_client_cluster_size=$(CLIENT_CLUSTER_SIZE) \
TF_VAR_client_cluster_auto_scaling_max=$(CLIENT_CLUSTER_AUTO_SCALING_MAX) \
TF_VAR_api_machine_type=$(API_MACHINE_TYPE) \
TF_VAR_api_cluster_size=$(API_CLUSTER_SIZE) \
TF_VAR_build_machine_type=$(BUILD_MACHINE_TYPE) \
TF_VAR_build_cluster_size=$(BUILD_CLUSTER_SIZE) \
TF_VAR_server_machine_type=$(SERVER_MACHINE_TYPE) \
TF_VAR_server_cluster_size=$(SERVER_CLUSTER_SIZE) \
TF_VAR_gcp_project_id=$(GCP_PROJECT_ID) \
TF_VAR_gcp_region=$(GCP_REGION) \
TF_VAR_gcp_zone=$(GCP_ZONE) \
TF_VAR_domain_name=$(DOMAIN_NAME) \
TF_VAR_additional_domains=$(ADDITIONAL_DOMAINS) \
TF_VAR_prefix=$(PREFIX) \
TF_VAR_terraform_state_bucket=$(TERRAFORM_STATE_BUCKET) \
TF_VAR_otel_tracing_print=$(OTEL_TRACING_PRINT) \
TF_VAR_environment=$(TERRAFORM_ENVIRONMENT) \
TF_VAR_template_bucket_name=$(TEMPLATE_BUCKET_NAME) \
TF_VAR_template_bucket_location=$(TEMPLATE_BUCKET_LOCATION)
# Login for Packer and Docker (uses gcloud user creds)
# Login for Terraform (uses application default creds)
.PHONY: login-gcloud
login-gcloud:
gcloud --quiet auth login
gcloud config set project "$(GCP_PROJECT_ID)"
gcloud --quiet auth configure-docker "$(GCP_REGION)-docker.pkg.dev"
gcloud --quiet auth application-default login
gcloud auth configure-docker "us-west-1-docker.pkg.dev"
.PHONY: init
init:
@ printf "Initializing Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
./scripts/confirm.sh $(ENV)
gcloud storage buckets create gs://$(TERRAFORM_STATE_BUCKET) --location $(GCP_REGION) --project $(GCP_PROJECT_ID) --default-storage-class STANDARD --uniform-bucket-level-access > /dev/null 2>&1 || true
terraform init -input=false -reconfigure -backend-config="bucket=${TERRAFORM_STATE_BUCKET}"
$(tf_vars) terraform apply -target=module.init -target=module.buckets -auto-approve -input=false -compact-warnings
$(MAKE) -C packages/cluster-disk-image init build
gcloud auth configure-docker "${GCP_REGION}-docker.pkg.dev" --quiet
.PHONY: plan
plan:
@ printf "Planning Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
terraform fmt -recursive
$(tf_vars) terraform plan -out=.tfplan.$(ENV) -compact-warnings -detailed-exitcode
.PHONY: plan-only-jobs
plan-only-jobs:
@ printf "Planning Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
terraform fmt -recursive
$(tf_vars) terraform plan -out=.tfplan.$(ENV) -compact-warnings -detailed-exitcode -target=module.nomad
.PHONY: apply
apply:
@ printf "Applying Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
./scripts/confirm.sh $(ENV)
$(tf_vars) \
terraform apply \
-auto-approve \
-input=false \
-compact-warnings \
-parallelism=20 \
.tfplan.$(ENV)
@ rm .tfplan.$(ENV)
.PHONY: plan-without-jobs
plan-without-jobs:
@ printf "Planning Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
$(eval TARGET := $(shell cat main.tf | grep "^module" | awk '{print $$2}' | tr ' ' '\n' | grep -v -e "nomad" | awk '{print "-target=module." $$0 ""}' | xargs))
$(tf_vars) \
terraform plan \
-out=.tfplan.$(ENV) \
-input=false \
-compact-warnings \
-parallelism=20 \
$(TARGET)
.PHONY: destroy
destroy:
@ printf "Destroying Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
./scripts/confirm.sh $(ENV)
$(tf_vars) \
terraform destroy \
-compact-warnings \
-parallelism=20 \
$$(terraform state list | grep module | cut -d'.' -f1,2 | grep -v -e "buckets" | uniq | awk '{print "-target=" $$0 ""}' | xargs)
.PHONY: version
version:
./scripts/increment-version.sh
.PHONY: build-and-upload
build-and-upload:build-and-upload/api
build-and-upload:build-and-upload/client-proxy
build-and-upload:build-and-upload/docker-reverse-proxy
build-and-upload:build-and-upload/orchestrator
build-and-upload:build-and-upload/template-manager
build-and-upload:build-and-upload/envd
build/%:
$(MAKE) -C packages/$(notdir $@) build
build-and-upload/%:
GCP_PROJECT_ID=$(GCP_PROJECT_ID) $(MAKE) -C packages/$(notdir $@) build-and-upload
.PHONY: copy-public-builds
copy-public-builds:
gsutil cp -r gs://e2b-prod-public-builds/envd-v0.0.1 gs://$(GCP_PROJECT_ID)-fc-env-pipeline/envd-v0.0.1
gsutil cp -r gs://e2b-prod-public-builds/kernels/* gs://$(GCP_PROJECT_ID)-fc-kernels/
gsutil cp -r gs://e2b-prod-public-builds/firecrackers/* gs://$(GCP_PROJECT_ID)-fc-versions/
@.PHONY: migrate
migrate:
$(MAKE) -C packages/shared migrate
.PHONY: switch-env
switch-env:
@ touch .last_used_env
@ printf "Switching from `tput setaf 1``tput bold`$(shell cat .last_used_env)`tput sgr0` to `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
@ echo $(ENV) > .last_used_env
@ . ${ENV_FILE}
terraform init -input=false -upgrade -reconfigure -backend-config="bucket=${TERRAFORM_STATE_BUCKET}"
# Shortcut to importing resources into Terraform state (e.g. after creating resources manually or switching between different branches for the same environment)
.PHONY: import
import:
@ printf "Importing resources for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
./scripts/confirm.sh $(ENV)
$(tf_vars) terraform import $(TARGET) $(ID)
.PHONY: setup-ssh
setup-ssh:
@ printf "Setting up SSH for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n"
@ gcloud compute config-ssh --remove
@ gcloud compute config-ssh --project $(GCP_PROJECT_ID) --quiet
@ printf "SSH setup complete\n"
.PHONY: test
test:
$(MAKE) -C packages/api test
$(MAKE) -C packages/client-proxy test
$(MAKE) -C packages/docker-reverse-proxy test
$(MAKE) -C packages/envd test
$(MAKE) -C packages/orchestrator test
$(MAKE) -C packages/shared test
$(MAKE) -C packages/template-manager test
# $(MAKE) -C terraform/grafana init does not work b/c of the -include ${ENV_FILE} in the Makefile
# so we need to call the Makefile directly
# && cd - || cd - is used to handle the case where the command fails, we still want to cd -
.PHONY: grafana-init
grafana-init:
@ printf "Initializing Grafana Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
cd terraform/grafana && make init && cd - || cd -
.PHONY: grafana-plan
grafana-plan:
@ printf "Planning Grafana Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
cd terraform/grafana && make plan && cd - || cd -
.PHONY: grafana-apply
grafana-apply:
@ printf "Applying Grafana Terraform for env: `tput setaf 2``tput bold`$(ENV)`tput sgr0`\n\n"
cd terraform/grafana && make apply && cd - || cd -