xref: /aosp_15_r20/development/tools/repo_diff/service/repodiff/Makefile (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard WorkerSQL_SCRIPT_DIR="tools/migrations"
2*90c8c64dSAndroid Build Coastguard Worker
3*90c8c64dSAndroid Build Coastguard WorkerDOCKER_SERVICE_NAME="repodiff-service"
4*90c8c64dSAndroid Build Coastguard WorkerDOCKER_CONTAINER_REGISTRY="gcr.io"
5*90c8c64dSAndroid Build Coastguard WorkerDOCKER_IMAGE_NAME="repodiff-image"
6*90c8c64dSAndroid Build Coastguard WorkerDOCKER_TAG_NAME="latest"
7*90c8c64dSAndroid Build Coastguard WorkerDOCKER_DOCKERFILE_DIR="."
8*90c8c64dSAndroid Build Coastguard WorkerDOCKER_TARGET_PORT=$(shell cat config.json | jq ".port")
9*90c8c64dSAndroid Build Coastguard WorkerDOCKER_CLUSTER_NAME="repodiff-default-cluster"
10*90c8c64dSAndroid Build Coastguard WorkerDOCKER_DEPLOYMENT_NAME="repodiff-deployment"
11*90c8c64dSAndroid Build Coastguard WorkerDOCKER_REPLICA_COUNT="1"
12*90c8c64dSAndroid Build Coastguard Worker
13*90c8c64dSAndroid Build Coastguard WorkerDOCKER_CANONICAL_ID=$(DOCKER_CONTAINER_REGISTRY)/$(GOOGLE_PROJECT_ID)/$(DOCKER_IMAGE_NAME):$(DOCKER_TAG_NAME)
14*90c8c64dSAndroid Build Coastguard Worker
15*90c8c64dSAndroid Build Coastguard WorkerPORT_HTTP="80"
16*90c8c64dSAndroid Build Coastguard WorkerGCE_ZONE="us-west1-b"
17*90c8c64dSAndroid Build Coastguard WorkerGCE_IMAGE_PROJECT="ubuntu-os-cloud"
18*90c8c64dSAndroid Build Coastguard WorkerGCE_IMAGE_FAMILY="ubuntu-1604-lts"
19*90c8c64dSAndroid Build Coastguard Worker
20*90c8c64dSAndroid Build Coastguard WorkerTMP_CREDENTIAL_FNAME=service_account_credentials.json
21*90c8c64dSAndroid Build Coastguard Worker
22*90c8c64dSAndroid Build Coastguard Worker# https://cloud.google.com/compute/docs/machine-types
23*90c8c64dSAndroid Build Coastguard WorkerGCE_MACHINE_TYPE="n1-standard-64"
24*90c8c64dSAndroid Build Coastguard Worker
25*90c8c64dSAndroid Build Coastguard WorkerPROJECT_NAME="auto-diff-android-branches"
26*90c8c64dSAndroid Build Coastguard WorkerREMOTE_MACHINE_NAME=mithalop5
27*90c8c64dSAndroid Build Coastguard WorkerFIREWALL_NAME=public-http-access
28*90c8c64dSAndroid Build Coastguard WorkerDISK_SIZE=500GB
29*90c8c64dSAndroid Build Coastguard WorkerRUN_COMMAND_REMOTE=gcloud compute --project $(PROJECT_NAME) ssh --zone $(GCE_ZONE) "$(REMOTE_MACHINE_NAME)" --command
30*90c8c64dSAndroid Build Coastguard WorkerSCP_TO_HOST=gcloud compute --project $(PROJECT_NAME) scp --zone $(GCE_ZONE)
31*90c8c64dSAndroid Build Coastguard WorkerSERVICE_ACCOUNT_ID=repo-reader
32*90c8c64dSAndroid Build Coastguard WorkerSERVICE_ACCOUNT=$(SERVICE_ACCOUNT_ID)@$(PROJECT_NAME).iam.gserviceaccount.com
33*90c8c64dSAndroid Build Coastguard Worker
34*90c8c64dSAndroid Build Coastguard Workerifeq ($(ROLE),prod)
35*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_USER=$(GCP_DB_USER_PROD)
36*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_INSTANCE_CONNECTION_NAME=$(GCP_DB_INSTANCE_CONNECTION_NAME_PROD)
37*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_PASSWORD=$(GCP_DB_PASSWORD_PROD)
38*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_NAME=$(GCP_DB_NAME_PROD)
39*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_PROXY_PORT=$(GCP_DB_PROXY_PORT_PROD)
40*90c8c64dSAndroid Build Coastguard Workerelse
41*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_USER=$(GCP_DB_USER_DEV)
42*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_INSTANCE_CONNECTION_NAME=$(GCP_DB_INSTANCE_CONNECTION_NAME_DEV)
43*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_PASSWORD=$(GCP_DB_PASSWORD_DEV)
44*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_NAME=$(GCP_DB_NAME_DEV)
45*90c8c64dSAndroid Build Coastguard Worker	GCP_DB_PROXY_PORT=$(GCP_DB_PROXY_PORT_DEV)
46*90c8c64dSAndroid Build Coastguard Workerendif
47*90c8c64dSAndroid Build Coastguard Worker
48*90c8c64dSAndroid Build Coastguard Worker
49*90c8c64dSAndroid Build Coastguard Workerbootstrap:
50*90c8c64dSAndroid Build Coastguard Worker	mkdir -p $(GOPATH)/src
51*90c8c64dSAndroid Build Coastguard Worker	./tools/setup_go_path_symlink.sh
52*90c8c64dSAndroid Build Coastguard Worker	# include $GOPATH/bin as part of system path
53*90c8c64dSAndroid Build Coastguard Worker	grep -q -F 'export PATH=$$PATH:$$GOPATH/bin' ~/.bashrc || echo 'export PATH=$$PATH:$$GOPATH/bin' >> ~/.bashrc
54*90c8c64dSAndroid Build Coastguard Worker	source ~/.bashrc
55*90c8c64dSAndroid Build Coastguard Worker	cd $(GOPATH)/src/repodiff; go get github.com/GoogleCloudPlatform/cloudsql-proxy/cmd/cloud_sql_proxy; \
56*90c8c64dSAndroid Build Coastguard Worker		go get github.com/golang/dep/cmd/dep; \
57*90c8c64dSAndroid Build Coastguard Worker		dep ensure; \
58*90c8c64dSAndroid Build Coastguard Worker		go build
59*90c8c64dSAndroid Build Coastguard Worker
60*90c8c64dSAndroid Build Coastguard Workerrun:
61*90c8c64dSAndroid Build Coastguard Worker	go build;
62*90c8c64dSAndroid Build Coastguard Worker	ROLE="dev" ./repodiff
63*90c8c64dSAndroid Build Coastguard Worker
64*90c8c64dSAndroid Build Coastguard Workerrun_prod:
65*90c8c64dSAndroid Build Coastguard Worker	go build;
66*90c8c64dSAndroid Build Coastguard Worker	ROLE="prod" ./repodiff
67*90c8c64dSAndroid Build Coastguard Worker
68*90c8c64dSAndroid Build Coastguard Workerreformat:
69*90c8c64dSAndroid Build Coastguard Worker	go fmt .
70*90c8c64dSAndroid Build Coastguard Worker
71*90c8c64dSAndroid Build Coastguard Workerdb_shell:
72*90c8c64dSAndroid Build Coastguard Worker	mysql -u $(GCP_DB_USER) -h 127.0.0.1 -P $(GCP_DB_PROXY_PORT) -p$(GCP_DB_PASSWORD) $(GCP_DB_NAME) ${EXTRA}
73*90c8c64dSAndroid Build Coastguard Worker
74*90c8c64dSAndroid Build Coastguard Workerdb_proxy:
75*90c8c64dSAndroid Build Coastguard Worker	$(GOPATH)/bin/cloud_sql_proxy -instances=$(GCP_DB_INSTANCE_CONNECTION_NAME_DEV)=tcp:$(GCP_DB_PROXY_PORT_DEV) &
76*90c8c64dSAndroid Build Coastguard Worker	$(GOPATH)/bin/cloud_sql_proxy -instances=$(GCP_DB_INSTANCE_CONNECTION_NAME_PROD)=tcp:$(GCP_DB_PROXY_PORT_PROD) &
77*90c8c64dSAndroid Build Coastguard Worker
78*90c8c64dSAndroid Build Coastguard Workerdb_proxy_ignore_err:
79*90c8c64dSAndroid Build Coastguard Worker	make db_proxy; true
80*90c8c64dSAndroid Build Coastguard Worker
81*90c8c64dSAndroid Build Coastguard Workerstart_sql:
82*90c8c64dSAndroid Build Coastguard Worker	make db_proxy_ignore_err &
83*90c8c64dSAndroid Build Coastguard Worker	make db_shell < $(SQL_SCRIPT_DIR)/required_meta.sql
84*90c8c64dSAndroid Build Coastguard Worker
85*90c8c64dSAndroid Build Coastguard Workerdb_upgrade:
86*90c8c64dSAndroid Build Coastguard Worker	make start_sql
87*90c8c64dSAndroid Build Coastguard Worker	python tools/upgrade_db.py upgrade $(SQL_SCRIPT_DIR)
88*90c8c64dSAndroid Build Coastguard Worker
89*90c8c64dSAndroid Build Coastguard Worker
90*90c8c64dSAndroid Build Coastguard Workerdb_downgrade:
91*90c8c64dSAndroid Build Coastguard Worker	make start_sql
92*90c8c64dSAndroid Build Coastguard Worker	python tools/upgrade_db.py downgrade $(SQL_SCRIPT_DIR)
93*90c8c64dSAndroid Build Coastguard Worker
94*90c8c64dSAndroid Build Coastguard Workerexample:
95*90c8c64dSAndroid Build Coastguard Worker	make db_shell EXTRA="-e 'DESCRIBE project_differential;'"
96*90c8c64dSAndroid Build Coastguard Worker
97*90c8c64dSAndroid Build Coastguard Workertest:
98*90c8c64dSAndroid Build Coastguard Worker	rm -rf build/
99*90c8c64dSAndroid Build Coastguard Worker	ROLE="dev" go test ./... -v | grep -v PASS | grep -v RUN
100*90c8c64dSAndroid Build Coastguard Worker
101*90c8c64dSAndroid Build Coastguard Workersql_script:
102*90c8c64dSAndroid Build Coastguard Worker	python tools/create_sql_script.py
103*90c8c64dSAndroid Build Coastguard Worker
104*90c8c64dSAndroid Build Coastguard Workerssh:
105*90c8c64dSAndroid Build Coastguard Worker	 gcloud compute --project $(PROJECT_NAME) ssh --zone $(GCE_ZONE) $(REMOTE_MACHINE_NAME)
106*90c8c64dSAndroid Build Coastguard Worker
107*90c8c64dSAndroid Build Coastguard Workerdeploy:
108*90c8c64dSAndroid Build Coastguard Worker	gcloud config set project $(PROJECT_NAME)
109*90c8c64dSAndroid Build Coastguard Worker	@echo "Starting docker image build"
110*90c8c64dSAndroid Build Coastguard Worker	make build_container_image
111*90c8c64dSAndroid Build Coastguard Worker	@echo "Creating machine if it doesn't already exist"
112*90c8c64dSAndroid Build Coastguard Worker	gcloud compute instances create $(REMOTE_MACHINE_NAME) \
113*90c8c64dSAndroid Build Coastguard Worker		--machine-type $(GCE_MACHINE_TYPE) \
114*90c8c64dSAndroid Build Coastguard Worker		--boot-disk-size $(DISK_SIZE) \
115*90c8c64dSAndroid Build Coastguard Worker		--scopes https://www.googleapis.com/auth/source.read_only,https://www.googleapis.com/auth/compute \
116*90c8c64dSAndroid Build Coastguard Worker		--zone $(GCE_ZONE) \
117*90c8c64dSAndroid Build Coastguard Worker		--local-ssd interface=nvme \
118*90c8c64dSAndroid Build Coastguard Worker		--metadata-from-file startup-script=remote_scripts/gce_startup.sh \
119*90c8c64dSAndroid Build Coastguard Worker		--metadata AUTHOR=$(USER),SERVICE_ACCOUNT=$(SERVICE_ACCOUNT),GOOGLE_PROJECT_ID=$(GOOGLE_PROJECT_ID) \
120*90c8c64dSAndroid Build Coastguard Worker		--image-project $(GCE_IMAGE_PROJECT) \
121*90c8c64dSAndroid Build Coastguard Worker		--image-family $(GCE_IMAGE_FAMILY) \
122*90c8c64dSAndroid Build Coastguard Worker		--min-cpu-platform skylake \
123*90c8c64dSAndroid Build Coastguard Worker		--service-account $(SERVICE_ACCOUNT) \
124*90c8c64dSAndroid Build Coastguard Worker		2>/dev/null || true
125*90c8c64dSAndroid Build Coastguard Worker	@echo "Hackily waiting a bit for instance to start up"
126*90c8c64dSAndroid Build Coastguard Worker	# TODO(slobdell) need to add a mechanism to block until startup script has completed
127*90c8c64dSAndroid Build Coastguard Worker	@sleep 60
128*90c8c64dSAndroid Build Coastguard Worker	./tools/clear_service_account_keys.py $(SERVICE_ACCOUNT) 2>/dev/null || true
129*90c8c64dSAndroid Build Coastguard Worker	gcloud iam service-accounts keys create $(TMP_CREDENTIAL_FNAME) --iam-account $(SERVICE_ACCOUNT)
130*90c8c64dSAndroid Build Coastguard Worker	$(RUN_COMMAND_REMOTE) 'mkdir -p /tmp/scripts'
131*90c8c64dSAndroid Build Coastguard Worker	$(SCP_TO_HOST) remote_scripts/* "$(REMOTE_MACHINE_NAME)":/tmp/scripts/
132*90c8c64dSAndroid Build Coastguard Worker	$(SCP_TO_HOST) $(TMP_CREDENTIAL_FNAME) "$(REMOTE_MACHINE_NAME)":/tmp/
133*90c8c64dSAndroid Build Coastguard Worker	rm $(TMP_CREDENTIAL_FNAME)
134*90c8c64dSAndroid Build Coastguard Worker	@echo "Stopping all existing docker images"
135*90c8c64dSAndroid Build Coastguard Worker	$(RUN_COMMAND_REMOTE) 'docker stop $$(docker ps -a -q)' 2>/dev/null || true
136*90c8c64dSAndroid Build Coastguard Worker	docker image save $(DOCKER_CANONICAL_ID) -o transferrable_docker_image.tar \
137*90c8c64dSAndroid Build Coastguard Worker	  && $(SCP_TO_HOST) transferrable_docker_image.tar "$(REMOTE_MACHINE_NAME)":~/transferred_docker_image.tar \
138*90c8c64dSAndroid Build Coastguard Worker    && $(RUN_COMMAND_REMOTE) 'docker load -i transferred_docker_image.tar' \
139*90c8c64dSAndroid Build Coastguard Worker    && $(RUN_COMMAND_REMOTE) 'docker run -d --rm -p $(DOCKER_TARGET_PORT):$(DOCKER_TARGET_PORT) $(DOCKER_CANONICAL_ID)' \
140*90c8c64dSAndroid Build Coastguard Worker		&& gcloud compute firewall-rules create $(FIREWALL_NAME) --allow tcp:$(DOCKER_TARGET_PORT) 2>/dev/null || true \
141*90c8c64dSAndroid Build Coastguard Worker		&& gcloud compute firewall-rules update $(FIREWALL_NAME) --allow tcp:$(DOCKER_TARGET_PORT) --source-tags="$(REMOTE_MACHINE_NAME)" --source-ranges=0.0.0.0/0 --description="Allow requests over HTTP"
142*90c8c64dSAndroid Build Coastguard Worker	@make output_instance_url --no-print-directory
143*90c8c64dSAndroid Build Coastguard Worker	@rm transferrable_docker_image.tar
144*90c8c64dSAndroid Build Coastguard Worker
145*90c8c64dSAndroid Build Coastguard Workeroutput_instance_url:
146*90c8c64dSAndroid Build Coastguard Worker	@echo "Monitor progress at http://"$(shell (gcloud compute instances list | grep $(REMOTE_MACHINE_NAME) | awk -F ' ' '{print $$5}')):$(DOCKER_TARGET_PORT)/health
147*90c8c64dSAndroid Build Coastguard Worker
148*90c8c64dSAndroid Build Coastguard Workerdestroy:
149*90c8c64dSAndroid Build Coastguard Worker	gcloud compute instances delete $(REMOTE_MACHINE_NAME) --zone $(GCE_ZONE) --quiet
150*90c8c64dSAndroid Build Coastguard Worker
151*90c8c64dSAndroid Build Coastguard Worker############## DOCKER DEPLOYMENT
152*90c8c64dSAndroid Build Coastguard Workerbuild_container_image:
153*90c8c64dSAndroid Build Coastguard Worker	mkdir -p ./build
154*90c8c64dSAndroid Build Coastguard Worker	# move contents of entire directory into build
155*90c8c64dSAndroid Build Coastguard Worker	find . -type f -not -path 'build' -exec cp --parents '{}' 'build/' \;
156*90c8c64dSAndroid Build Coastguard Worker	# copy python scripts repo uses, TODO re-structure codebase so the dependencies align with file structure
157*90c8c64dSAndroid Build Coastguard Worker	cp ../../*.{txt,py} build/
158*90c8c64dSAndroid Build Coastguard Worker	# Application credentials must be downloaded from https://pantheon.corp.google.com; set this environment variable to the path of the downloaded file
159*90c8c64dSAndroid Build Coastguard Worker	cp $(GOOGLE_APPLICATION_CREDENTIALS) build/
160*90c8c64dSAndroid Build Coastguard Worker	# copy local environment variables into Dockerfile
161*90c8c64dSAndroid Build Coastguard Worker	cat Dockerfile | envsubst > build/Dockerfile
162*90c8c64dSAndroid Build Coastguard Worker	# copy permissions from local gitcookies into Dockerfile (container will sync repo as you)
163*90c8c64dSAndroid Build Coastguard Worker	cp static/docker_git_config ./build/.gitconfig
164*90c8c64dSAndroid Build Coastguard Worker	cp ~/.gitcookies ./build/.gitcookies
165*90c8c64dSAndroid Build Coastguard Worker	docker build -t $(DOCKER_CANONICAL_ID) ./build
166*90c8c64dSAndroid Build Coastguard Worker	rm -rf ./build
167*90c8c64dSAndroid Build Coastguard Worker
168*90c8c64dSAndroid Build Coastguard Workerdocker_shell:
169*90c8c64dSAndroid Build Coastguard Worker	docker run -it --rm $(DOCKER_CANONICAL_ID) bash
170*90c8c64dSAndroid Build Coastguard Worker
171*90c8c64dSAndroid Build Coastguard Workerupload_container_image:
172*90c8c64dSAndroid Build Coastguard Worker	gcloud config set project $(GOOGLE_PROJECT_ID)
173*90c8c64dSAndroid Build Coastguard Worker	gcloud docker -- push $(DOCKER_CANONICAL_ID)
174*90c8c64dSAndroid Build Coastguard Worker
175*90c8c64dSAndroid Build Coastguard Workerrun_container_local:
176*90c8c64dSAndroid Build Coastguard Worker	docker run --rm -p $(DOCKER_TARGET_PORT):$(DOCKER_TARGET_PORT) $(DOCKER_CANONICAL_ID)
177*90c8c64dSAndroid Build Coastguard Worker
178*90c8c64dSAndroid Build Coastguard Workercreate_container_cluster:
179*90c8c64dSAndroid Build Coastguard Worker	gcloud container clusters create $(DOCKER_CLUSTER_NAME) \
180*90c8c64dSAndroid Build Coastguard Worker		--num-nodes=3 \
181*90c8c64dSAndroid Build Coastguard Worker		--machine-type $(GCE_MACHINE_TYPE) \
182*90c8c64dSAndroid Build Coastguard Worker	  --zone $(GCE_ZONE)
183*90c8c64dSAndroid Build Coastguard Worker
184*90c8c64dSAndroid Build Coastguard Workercreate_container_cluster_verify:
185*90c8c64dSAndroid Build Coastguard Worker	gcloud compute instances list
186*90c8c64dSAndroid Build Coastguard Worker
187*90c8c64dSAndroid Build Coastguard Workerexpose_to_internets:
188*90c8c64dSAndroid Build Coastguard Worker	kubectl expose deployment $(DOCKER_DEPLOYMENT_NAME) --type=LoadBalancer --port $(PORT_HTTP) --target-port $(DOCKER_TARGET_PORT)
189*90c8c64dSAndroid Build Coastguard Worker
190*90c8c64dSAndroid Build Coastguard Workerexpose_to_internets_verify:
191*90c8c64dSAndroid Build Coastguard Worker	kubectl get service
192*90c8c64dSAndroid Build Coastguard Worker
193*90c8c64dSAndroid Build Coastguard Workerscale:
194*90c8c64dSAndroid Build Coastguard Worker	kubectl scale deployment $(DOCKER_DEPLOYMENT_NAME) --replicas=$(DOCKER_REPLICA_COUNT)
195*90c8c64dSAndroid Build Coastguard Worker
196*90c8c64dSAndroid Build Coastguard Workercleanup:
197*90c8c64dSAndroid Build Coastguard Worker	kubectl delete service
198*90c8c64dSAndroid Build Coastguard Worker############## END DOCKER DEPLOYMENT
199