github.com/pachyderm/pachyderm@v1.13.4/Makefile (about)

     1  #### VARIABLES
     2  # TESTFLAGS: flags for test
     3  # KUBECTLFLAGS: flags for kubectl
     4  # DOCKER_BUILD_FLAGS: flags for 'docker build'
     5  ####
     6  
     7  include etc/govars.mk
     8  
     9  RUN= # used by go tests to decide which tests to run (i.e. passed to -run)
    10  # Don't set the version to the git hash in CI, as it breaks the go build cache.
    11  ifdef CIRCLE_BRANCH
    12  	export GC_FLAGS = ""
    13  else
    14  	export VERSION_ADDITIONAL = -$(shell git log --pretty=format:%H | head -n 1)
    15  	export GC_FLAGS = "all=-trimpath=${PWD}"
    16  endif
    17  
    18  export CLIENT_ADDITIONAL_VERSION=github.com/pachyderm/pachyderm/src/client/version.AdditionalVersion=$(VERSION_ADDITIONAL)
    19  export LD_FLAGS=-X $(CLIENT_ADDITIONAL_VERSION)
    20  export DOCKER_BUILD_FLAGS
    21  
    22  CLUSTER_NAME ?= pachyderm
    23  CLUSTER_MACHINE_TYPE ?= n1-standard-4
    24  CLUSTER_SIZE ?= 4
    25  
    26  MINIKUBE_MEM = 8192 # MB of memory allocated to minikube
    27  MINIKUBE_CPU = 4 # Number of CPUs allocated to minikube
    28  
    29  CHLOGFILE = ${PWD}/../changelog.diff
    30  export GOVERSION = $(shell cat etc/compile/GO_VERSION)
    31  GORELSNAP = #--snapshot # uncomment --snapshot if you want to do a dry run.
    32  SKIP = #\# # To skip push to docker and github remove # in front of #
    33  GORELDEBUG = #--debug # uncomment --debug for verbose goreleaser output
    34  
    35  # Default upper bound for test timeouts
    36  # You can specify your own, but this is what CI uses
    37  TIMEOUT ?= 3600s
    38  
    39  install:
    40  	# GOBIN (default: GOPATH/bin) must be on your PATH to access these binaries:
    41  	go install -ldflags "$(LD_FLAGS)" -gcflags "$(GC_FLAGS)" ./src/server/cmd/pachctl
    42  
    43  install-clean:
    44  	@# Need to blow away pachctl binary if its already there
    45  	@rm -f $(PACHCTL)
    46  	@make install
    47  
    48  install-doc:
    49  	go install -gcflags "$(GC_FLAGS)" ./src/server/cmd/pachctl-doc
    50  
    51  doc-custom: install-doc install-clean
    52  	./etc/build/doc.sh
    53  
    54  doc-reference-refresh: install-doc install-clean
    55  	./etc/build/reference_refresh.sh
    56  
    57  doc:
    58  	@make VERSION_ADDITIONAL= doc-custom
    59  
    60  point-release:
    61  	@./etc/build/make_changelog.sh $(CHLOGFILE)
    62  	@VERSION_ADDITIONAL= ./etc/build/make_release.sh
    63  	@echo "Release completed"
    64  
    65  # Run via 'make VERSION_ADDITIONAL=-rc2 release-candidate' to specify a version string
    66  release-candidate:
    67  	@make custom-release
    68  
    69  custom-release:
    70  	echo "" > $(CHLOGFILE)
    71  	@VERSION_ADDITIONAL=$(VERSION_ADDITIONAL) ./etc/build/make_release.sh "Custom"
    72  	# Need to check for homebrew updates from release-pachctl-custom
    73  
    74  # This is getting called from etc/build/make_release.sh
    75  # Git tag is force pushed. We are assuming if the same build is done again, it is done with intent
    76  release:
    77  	@git tag -f -am "Release tag v$(VERSION)" v$(VERSION)
    78  	$(SKIP) @git push -f origin v$(VERSION)
    79  	@make release-helper
    80  	@make release-pachctl
    81  	@echo "Release $(VERSION) completed"
    82  
    83  release-helper: release-docker-images docker-push docker-push-pipeline-build
    84  
    85  release-docker-images:
    86  	DOCKER_BUILDKIT=1 goreleaser release -p 1 $(GORELSNAP) $(GORELDEBUG) --skip-publish --rm-dist -f goreleaser/docker.yml
    87  	DOCKER_BUILDKIT=1 goreleaser release -p 1 $(GORELSNAP) $(GORELDEBUG) --skip-publish --rm-dist -f goreleaser/docker-build-pipelines.yml
    88  
    89  release-pachctl:
    90  	@goreleaser release -p 1 $(GORELSNAP) $(GORELDEBUG) --release-notes=$(CHLOGFILE) --rm-dist -f goreleaser/pachctl.yml
    91  
    92  docker-build:
    93  	DOCKER_BUILDKIT=1 goreleaser release -p 1 --snapshot $(GORELDEBUG) --skip-publish --rm-dist -f goreleaser/docker.yml
    94  
    95  docker-build-pipeline-build: install
    96  	VERSION=$$($(PACHCTL) version --client-only) DOCKER_BUILDKIT=1 \
    97  	  goreleaser release -p 1 --snapshot $(GORELDEBUG) --skip-publish --rm-dist -f goreleaser/docker-build-pipelines.yml
    98  
    99  docker-build-proto:
   100  	docker build $(DOCKER_BUILD_FLAGS) -t pachyderm_proto etc/proto
   101  
   102  docker-build-netcat:
   103  	docker build $(DOCKER_BUILD_FLAGS) -t pachyderm_netcat etc/netcat
   104  
   105  docker-build-gpu:
   106  	docker build $(DOCKER_BUILD_FLAGS) -t pachyderm_nvidia_driver_install etc/deploy/gpu
   107  	docker tag pachyderm_nvidia_driver_install pachyderm/nvidia_driver_install
   108  
   109  docker-build-kafka:
   110  	docker build -t kafka-demo etc/testing/kafka
   111  
   112  docker-build-spout-test:
   113  	docker build -t spout-test etc/testing/spout
   114  
   115  docker-push-gpu:
   116  	$(SKIP) docker push pachyderm/nvidia_driver_install
   117  
   118  docker-push-gpu-dev:
   119  	docker tag pachyderm/nvidia_driver_install pachyderm/nvidia_driver_install:`git rev-list HEAD --max-count=1`
   120  	$(SKIP) docker push pachyderm/nvidia_driver_install:`git rev-list HEAD --max-count=1`
   121  	echo pushed pachyderm/nvidia_driver_install:`git rev-list HEAD --max-count=1`
   122  
   123  docker-gpu: docker-build-gpu docker-push-gpu
   124  
   125  docker-gpu-dev: docker-build-gpu docker-push-gpu-dev
   126  
   127  docker-build-test-entrypoint:
   128  	docker build $(DOCKER_BUILD_FLAGS) -t pachyderm_entrypoint etc/testing/entrypoint
   129  
   130  docker-tag:
   131  	docker tag pachyderm/pachd pachyderm/pachd:$(VERSION)
   132  	docker tag pachyderm/worker pachyderm/worker:$(VERSION)
   133  	docker tag pachyderm/pachctl pachyderm/pachctl:$(VERSION)
   134  
   135  docker-push: docker-tag
   136  	$(SKIP) docker push pachyderm/etcd:v3.3.5
   137  	$(SKIP) docker push pachyderm/pachd:$(VERSION)
   138  	$(SKIP) docker push pachyderm/worker:$(VERSION)
   139  	$(SKIP) docker push pachyderm/pachctl:$(VERSION)
   140  
   141  docker-push-pipeline-build: install
   142  	$(SKIP) ls etc/pipeline-build | xargs -I {} docker push pachyderm/{}-build:$$($(PACHCTL) version --client-only)
   143  
   144  docker-push-pipeline-build-to-minikube: install
   145  	$(SKIP) ls etc/pipeline-build | xargs -I {} etc/kube/push-to-minikube.sh pachyderm/{}-build:$$($(PACHCTL) version --client-only)
   146  
   147  check-kubectl:
   148  	@# check that kubectl is installed
   149  	@which kubectl >/dev/null || { \
   150  		echo "error: kubectl not found"; \
   151  		exit 1; \
   152  	}
   153  	@if expr match $(shell kubectl config current-context) gke_pachub > /dev/null; then \
   154  		echo "ERROR: The active kubectl context is pointing to a pachub GKE cluster"; \
   155  		exit 1; \
   156  	fi
   157  
   158  check-kubectl-connection:
   159  	kubectl $(KUBECTLFLAGS) get all > /dev/null
   160  
   161  launch-kube: check-kubectl
   162  	etc/kube/start-minikube.sh
   163  
   164  launch-dev-vm: check-kubectl
   165  	# Making sure minikube isn't still up from a previous run...
   166  	@if minikube ip 2>/dev/null || sudo minikube ip 2>/dev/null; \
   167  	then \
   168  	  echo "minikube is still up. Run 'make clean-launch-kube'"; \
   169  	  exit 1; \
   170  	fi
   171  	etc/kube/start-minikube-vm.sh --cpus=$(MINIKUBE_CPU) --memory=$(MINIKUBE_MEM)
   172  
   173  # launch-release-vm is like launch-dev-vm but it doesn't build pachctl locally, and uses the same
   174  # version of pachd associated with the current pachctl (useful if you want to start a VM with a
   175  # point-release version of pachd, instead of whatever's in the current branch)
   176  launch-release-vm:
   177  	# Making sure minikube isn't still up from a previous run...
   178  	@if minikube ip 2>/dev/null || sudo minikube ip 2>/dev/null; \
   179  	then \
   180  	  echo "minikube is still up. Run 'make clean-launch-kube'"; \
   181  	  exit 1; \
   182  	fi
   183  	etc/kube/start-minikube-vm.sh --cpus=$(MINIKUBE_CPU) --memory=$(MINIKUBE_MEM) --tag=v$$($(PACHCTL) version --client-only)
   184  
   185  clean-launch-kube:
   186  	@# clean up both of the following cases:
   187  	@# make launch-dev-vm - minikube config is owned by $USER
   188  	@# make launch-kube - minikube config is owned by root
   189  	minikube ip 2>/dev/null && minikube delete || true
   190  	sudo minikube ip 2>/dev/null && sudo minikube delete || true
   191  	killall kubectl || true
   192  
   193  launch: install check-kubectl
   194  	$(eval STARTTIME := $(shell date +%s))
   195  	$(PACHCTL) deploy local --dry-run | kubectl $(KUBECTLFLAGS) apply -f -
   196  	# wait for the pachyderm to come up
   197  	until timeout 1s ./etc/kube/check_ready.sh app=pachd; do sleep 1; done
   198  	@echo "pachd launch took $$(($$(date +%s) - $(STARTTIME))) seconds"
   199  
   200  launch-dev: check-kubectl check-kubectl-connection install
   201  	$(eval STARTTIME := $(shell date +%s))
   202  	$(PACHCTL) deploy local --no-guaranteed -d --dry-run $(LAUNCH_DEV_ARGS) | kubectl $(KUBECTLFLAGS) apply -f -
   203  	# wait for the pachyderm to come up
   204  	until timeout 1s ./etc/kube/check_ready.sh app=pachd; do sleep 1; done
   205  	@echo "pachd launch took $$(($$(date +%s) - $(STARTTIME))) seconds"
   206  
   207  clean-launch: check-kubectl install
   208  	yes | $(PACHCTL) undeploy
   209  
   210  clean-launch-dev: check-kubectl install
   211  	yes | $(PACHCTL) undeploy
   212  
   213  full-clean-launch: check-kubectl
   214  	kubectl $(KUBECTLFLAGS) delete --ignore-not-found job -l suite=pachyderm
   215  	kubectl $(KUBECTLFLAGS) delete --ignore-not-found all -l suite=pachyderm
   216  	kubectl $(KUBECTLFLAGS) delete --ignore-not-found serviceaccount -l suite=pachyderm
   217  	kubectl $(KUBECTLFLAGS) delete --ignore-not-found secret -l suite=pachyderm
   218  
   219  test-proto-static:
   220  	./etc/proto/test_no_changes.sh || echo "Protos need to be recompiled; run 'DOCKER_BUILD_FLAGS=--no-cache make proto'."
   221  
   222  test-deploy-manifests: install
   223  	./etc/testing/deploy-manifests/validate.sh
   224  
   225  regenerate-test-deploy-manifests: install
   226  	./etc/testing/deploy-manifests/validate.sh --regenerate
   227  
   228  proto: docker-build-proto
   229  	./etc/proto/build.sh
   230  
   231  # Run all the tests. Note! This is no longer the test entrypoint for travis
   232  test: clean-launch-dev launch-dev lint enterprise-code-checkin-test docker-build test-pfs-server test-cmds test-libs test-vault test-auth test-enterprise test-worker test-admin test-pps
   233  
   234  enterprise-code-checkin-test:
   235  	@which ag || { printf "'ag' not found. Run:\n  sudo apt-get install -y silversearcher-ag\n  brew install the_silver_searcher\nto install it\n\n"; exit 1; }
   236  	# Check if our test activation code is anywhere in the repo
   237  	@echo "Files containing test Pachyderm Enterprise activation token:"; \
   238  	if ag --ignore=Makefile -p .gitignore 'RM2o1Qit6YlZhS1RGdXVac'; \
   239  	then \
   240  	  $$( which echo ) -e "\n*** It looks like Pachyderm Engineering's test activation code may be in this repo. Please remove it before committing! ***\n"; \
   241  	  false; \
   242  	fi
   243  
   244  test-pfs-server:
   245  	./etc/testing/start_postgres.sh
   246  	./etc/testing/pfs_server.sh $(TIMEOUT)
   247  
   248  test-pfs-storage:
   249  	./etc/testing/start_postgres.sh
   250  	go test  -count=1 ./src/server/pkg/storage/... -timeout $(TIMEOUT)
   251  
   252  test-pps: launch-stats docker-build-spout-test docker-build-test-entrypoint
   253  	@# Use the count flag to disable test caching for this test suite.
   254  	PROM_PORT=$$(kubectl --namespace=monitoring get svc/prometheus -o json | jq -r .spec.ports[0].nodePort) \
   255  	  go test -v -count=1 ./src/server -parallel 1 -timeout $(TIMEOUT) $(RUN)
   256  
   257  test-cmds:
   258  	go install -v ./src/testing/match
   259  	CGOENABLED=0 go test -v -count=1 ./src/server/cmd/pachctl/cmd
   260  	go test -v -count=1 ./src/server/pkg/deploy/cmds -timeout $(TIMEOUT)
   261  	go test -v -count=1 ./src/server/pfs/cmds -timeout $(TIMEOUT)
   262  	go test -v -count=1 ./src/server/pps/cmds -timeout $(TIMEOUT)
   263  	go test -v -count=1 ./src/server/config -timeout $(TIMEOUT)
   264  	@# TODO(msteffen) does this test leave auth active? If so it must run last
   265  	go test -v -count=1 ./src/server/auth/cmds -timeout $(TIMEOUT)
   266  
   267  test-transaction:
   268  	go test -count=1 ./src/server/transaction/server/testing -timeout $(TIMEOUT)
   269  
   270  test-client:
   271  	go test -count=1 -cover $$(go list ./src/client/...)
   272  
   273  test-object-clients:
   274  	# The parallelism is lowered here because these tests run several pachd
   275  	# deployments in kubernetes which may contest resources.
   276  	go test -count=1 ./src/server/pkg/obj/testing -timeout $(TIMEOUT) -parallel=2
   277  
   278  test-libs:
   279  	go test -v -count=1 ./src/client/pkg/grpcutil -timeout $(TIMEOUT)
   280  	go test -v -count=1 ./src/server/pkg/collection -timeout $(TIMEOUT) -vet=off
   281  	go test -v -count=1 ./src/server/pkg/hashtree -timeout $(TIMEOUT)
   282  	go test -v -count=1 ./src/server/pkg/cert -timeout $(TIMEOUT)
   283  	go test -v -count=1 ./src/server/pkg/localcache -timeout $(TIMEOUT)
   284  	go test -v -count=1 ./src/server/pkg/work -timeout $(TIMEOUT)
   285  
   286  test-vault:
   287  	kill $$(cat /tmp/vault.pid) || true
   288  	./src/plugin/vault/etc/start-vault.sh
   289  	./src/plugin/vault/etc/pach-auth.sh --activate
   290  	./src/plugin/vault/etc/setup-vault.sh
   291  	go test -v -count=1 ./src/plugin/vault -timeout $(TIMEOUT)
   292  	./src/plugin/vault/etc/pach-auth.sh --delete-all
   293  
   294  test-s3gateway-conformance:
   295  	@if [ -z $$CONFORMANCE_SCRIPT_PATH ]; then \
   296  	  echo "Missing environment variable 'CONFORMANCE_SCRIPT_PATH'"; \
   297  	  exit 1; \
   298  	fi
   299  	$(CONFORMANCE_SCRIPT_PATH) --s3tests-config=etc/testing/s3gateway/s3tests.conf --ignore-config=etc/testing/s3gateway/ignore.conf --runs-dir=etc/testing/s3gateway/runs
   300  
   301  test-s3gateway-integration:
   302  	@if [ -z $$INTEGRATION_SCRIPT_PATH ]; then \
   303  	  echo "Missing environment variable 'INTEGRATION_SCRIPT_PATH'"; \
   304  	  exit 1; \
   305  	fi
   306  	$(INTEGRATION_SCRIPT_PATH) http://localhost:30600 --access-key=none --secret-key=none
   307  
   308  test-s3gateway-unit:
   309  	go test -v -count=1 ./src/server/pfs/s3 -timeout $(TIMEOUT)
   310  
   311  test-fuse:
   312  	CGOENABLED=0 go test -count=1 -cover $$(go list ./src/server/... | grep '/src/server/pfs/fuse')
   313  
   314  test-local:
   315  	CGOENABLED=0 go test -count=1 -cover -short $$(go list ./src/server/... | grep -v '/src/server/pfs/fuse') -timeout $(TIMEOUT)
   316  
   317  test-auth:
   318  	yes | $(PACHCTL) delete all
   319  	go test -v -count=1 ./src/server/auth/server/testing -timeout $(TIMEOUT) $(RUN)
   320  
   321  test-admin:
   322  	go test -v -count=1 ./src/server/admin/server -timeout $(TIMEOUT) $(RUN)
   323  
   324  test-enterprise:
   325  	go test -v -count=1 ./src/server/enterprise/server -timeout $(TIMEOUT)
   326  
   327  test-tls:
   328  	./etc/testing/test_tls.sh
   329  
   330  test-worker: launch-stats test-worker-helper
   331  
   332  test-worker-helper:
   333  	PROM_PORT=$$(kubectl --namespace=monitoring get svc/prometheus -o json | jq -r .spec.ports[0].nodePort) \
   334  	  go test -v -count=1 ./src/server/worker/ -timeout $(TIMEOUT)
   335  
   336  clean: clean-launch clean-launch-kube
   337  
   338  compatibility:
   339  	./etc/build/compatibility.sh
   340  
   341  clean-launch-kafka:
   342  	kubectl delete -f etc/kubernetes-kafka -R
   343  
   344  launch-kafka:
   345  	kubectl apply -f etc/kubernetes-kafka -R
   346  	until timeout 10s ./etc/kube/check_ready.sh app=kafka kafka; do sleep 10; done
   347  
   348  clean-launch-stats:
   349  	kubectl delete --filename etc/kubernetes-prometheus -R
   350  
   351  launch-stats:
   352  	kubectl apply --filename etc/kubernetes-prometheus -R
   353  
   354  clean-launch-monitoring:
   355  	kubectl delete --ignore-not-found -f ./etc/plugin/monitoring
   356  
   357  launch-monitoring:
   358  	kubectl create -f ./etc/plugin/monitoring
   359  	@echo "Waiting for services to spin up ..."
   360  	until timeout 5s ./etc/kube/check_ready.sh k8s-app=heapster kube-system; do sleep 5; done
   361  	until timeout 5s ./etc/kube/check_ready.sh k8s-app=influxdb kube-system; do sleep 5; done
   362  	until timeout 5s ./etc/kube/check_ready.sh k8s-app=grafana kube-system; do sleep 5; done
   363  	@echo "All services up. Now port forwarding grafana to localhost:3000"
   364  	kubectl --namespace=kube-system port-forward `kubectl --namespace=kube-system get pods -l k8s-app=grafana -o json | jq '.items[0].metadata.name' -r` 3000:3000 &
   365  
   366  clean-launch-logging: check-kubectl check-kubectl-connection
   367  	git submodule update --init
   368  	cd etc/plugin/logging && ./undeploy.sh
   369  
   370  launch-logging: check-kubectl check-kubectl-connection
   371  	@# Creates Fluentd / Elasticsearch / Kibana services for logging under --namespace=monitoring
   372  	git submodule update --init
   373  	cd etc/plugin/logging && ./deploy.sh
   374  	kubectl --namespace=monitoring port-forward `kubectl --namespace=monitoring get pods -l k8s-app=kibana-logging -o json | jq '.items[0].metadata.name' -r` 35601:5601 &
   375  
   376  launch-loki:
   377  	helm repo remove loki || true
   378  	helm repo add loki https://grafana.github.io/loki/charts
   379  	helm repo update
   380  	helm upgrade --install loki loki/loki-stack
   381  	until timeout 1s ./etc/kube/check_ready.sh release=loki; do sleep 1; done
   382  
   383  clean-launch-loki:
   384  	helm uninstall loki
   385  
   386  launch-dex:
   387  	helm repo add stable https://charts.helm.sh/stable
   388  	helm repo update
   389  	helm upgrade --install dex stable/dex -f etc/testing/auth/dex.yaml
   390  	until timeout 1s bash -x ./etc/kube/check_ready.sh 'app.kubernetes.io/name=dex'; do sleep 1; done
   391  
   392  clean-launch-dex:
   393  	helm uninstall dex
   394  
   395  logs: check-kubectl
   396  	kubectl $(KUBECTLFLAGS) get pod -l app=pachd | sed '1d' | cut -f1 -d ' ' | xargs -n 1 -I pod sh -c 'echo pod && kubectl $(KUBECTLFLAGS) logs pod'
   397  
   398  follow-logs: check-kubectl
   399  	kubectl $(KUBECTLFLAGS) get pod -l app=pachd | sed '1d' | cut -f1 -d ' ' | xargs -n 1 -I pod sh -c 'echo pod && kubectl $(KUBECTLFLAGS) logs -f pod'
   400  
   401  google-cluster-manifest:
   402  	@$(PACHCTL) deploy --dry-run google $(BUCKET_NAME) $(STORAGE_NAME) $(STORAGE_SIZE)
   403  
   404  google-cluster:
   405  	gcloud container clusters create $(CLUSTER_NAME) --scopes storage-rw --machine-type $(CLUSTER_MACHINE_TYPE) --num-nodes $(CLUSTER_SIZE)
   406  	gcloud config set container/cluster $(CLUSTER_NAME)
   407  	gcloud container clusters get-credentials $(CLUSTER_NAME)
   408  	gcloud components install kubectl
   409  	-gcloud compute firewall-rules create pachd --allow=tcp:30650
   410  	gsutil mb gs://$(BUCKET_NAME) # for PFS
   411  	gcloud compute disks create --size=$(STORAGE_SIZE)GB $(STORAGE_NAME) # for PPS
   412  
   413  clean-google-cluster:
   414  	gcloud container clusters delete $(CLUSTER_NAME)
   415  	gcloud compute firewall-rules delete pachd
   416  	gsutil -m rm -r gs://$(BUCKET_NAME)
   417  	gcloud compute disks delete $(STORAGE_NAME)
   418  
   419  amazon-cluster-manifest: install
   420  	@$(PACHCTL) deploy --dry-run amazon $(BUCKET_NAME) $(AWS_ID) $(AWS_KEY) $(AWS_TOKEN) $(AWS_REGION) $(STORAGE_NAME) $(STORAGE_SIZE)
   421  
   422  amazon-cluster:
   423  	aws s3api create-bucket --bucket $(BUCKET_NAME) --region $(AWS_REGION)
   424  	aws ec2 create-volume --size $(STORAGE_SIZE) --region $(AWS_REGION) --availability-zone $(AWS_AVAILABILITY_ZONE) --volume-type gp2
   425  
   426  amazon-clean-cluster:
   427  	aws s3api delete-bucket --bucket $(BUCKET_NAME) --region $(AWS_REGION)
   428  	aws ec2 detach-volume --force --volume-id $(STORAGE_NAME)
   429  	sleep 20
   430  	aws ec2 delete-volume --volume-id $(STORAGE_NAME)
   431  
   432  amazon-clean-launch: clean-launch
   433  	kubectl $(KUBECTLFLAGS) delete --ignore-not-found secrets amazon-secret
   434  
   435  amazon-clean:
   436  	@while :; \
   437          do if echo "The following script will delete your AWS bucket and volume. The action cannot be undone. Do you want to proceed? (Y/n)";read REPLY; then \
   438          case $$REPLY in Y|y) make amazon-clean-launch;make amazon-clean-cluster;break;; \
   439  	N|n) echo "The amazon clean process has been cancelled by user!";break;; \
   440  	*) echo "input parameter error, please input again ";continue;;esac; \
   441          fi;done;
   442  
   443  microsoft-cluster-manifest:
   444  	@$(PACHCTL) deploy --dry-run microsoft $(CONTAINER_NAME) $(AZURE_STORAGE_NAME) $(AZURE_STORAGE_KEY) $(VHD_URI) $(STORAGE_SIZE)
   445  
   446  microsoft-cluster:
   447  	azure group create --name $(AZURE_RESOURCE_GROUP) --location $(AZURE_LOCATION)
   448  	azure storage account create $(AZURE_STORAGE_NAME) --location $(AZURE_LOCATION) --resource-group $(AZURE_RESOURCE_GROUP) --sku-name LRS --kind Storage
   449  
   450  clean-microsoft-cluster:
   451  	azure group delete $(AZURE_RESOURCE_GROUP) -q
   452  
   453  lint:
   454  	etc/testing/lint.sh
   455  
   456  spellcheck:
   457  	@mdspell doc/*.md doc/**/*.md *.md --en-us --ignore-numbers --ignore-acronyms --report --no-suggestions
   458  
   459  .PHONY: \
   460  	install \
   461  	install-clean \
   462  	install-doc \
   463  	doc-custom \
   464  	doc \
   465  	point-release \
   466  	release-candidate \
   467  	custom-release \
   468  	release \
   469  	release-helper \
   470  	release-docker-images \
   471  	release-pachctl \
   472  	docker-build \
   473  	docker-build-pipeline-build \
   474  	docker-build-proto \
   475  	docker-build-netcat \
   476  	docker-build-gpu \
   477  	docker-build-kafka \
   478  	docker-build-spout-test \
   479  	docker-push-gpu \
   480  	docker-push-gpu-dev \
   481  	docker-gpu \
   482  	docker-gpu-dev \
   483  	docker-build-test-entrypoint \
   484  	docker-tag \
   485  	docker-push \
   486  	docker-push-pipeline-build \
   487  	check-kubectl \
   488  	check-kubectl-connection \
   489  	launch-kube \
   490  	launch-dev-vm \
   491  	launch-release-vm \
   492  	clean-launch-kube \
   493  	launch \
   494  	launch-dev \
   495  	clean-launch \
   496  	clean-launch-dev \
   497  	full-clean-launch \
   498  	test-proto-static \
   499  	test-deploy-manifests \
   500  	regenerate-test-deploy-manifests \
   501  	proto \
   502  	test \
   503  	enterprise-code-checkin-test \
   504  	test-pfs-server \
   505  	test-pfs-storage \
   506  	test-pps \
   507  	test-cmds \
   508  	test-transaction \
   509  	test-client \
   510  	test-libs \
   511  	test-vault \
   512  	test-s3gateway-conformance \
   513  	test-s3gateway-integration \
   514  	test-s3gateway-unit \
   515  	test-fuse \
   516  	test-local \
   517  	test-auth \
   518  	test-admin \
   519  	test-enterprise \
   520  	test-tls \
   521  	test-worker \
   522  	test-worker-helper \
   523  	clean \
   524  	compatibility \
   525  	clean-launch-kafka \
   526  	launch-kafka \
   527  	clean-launch-stats \
   528  	launch-stats \
   529  	clean-launch-monitoring \
   530  	launch-monitoring \
   531  	clean-launch-logging \
   532  	launch-logging \
   533  	launch-loki \
   534  	clean-launch-loki \
   535  	launch-dex \
   536  	clean-launch-dex \
   537  	logs \
   538  	follow-logs \
   539  	google-cluster-manifest \
   540  	google-cluster \
   541  	clean-google-cluster \
   542  	amazon-cluster-manifest \
   543  	amazon-cluster \
   544  	amazon-clean-cluster \
   545  	amazon-clean-launch \
   546  	amazon-clean \
   547  	microsoft-cluster-manifest \
   548  	microsoft-cluster \
   549  	clean-microsoft-cluster \
   550  	lint \
   551  	spellcheck