WORKDIR = /go/src/code.justin.tv/eventbus/clock
GO_VERSION = 1.11.0
REPO = eventbus/clock

GIT_SHA = $(shell git rev-parse --short HEAD)

STAGING_ACCT_ID = 065305400592
STAGING_DOCKER_ECR = $(STAGING_ACCT_ID).dkr.ecr.us-west-2.amazonaws.com/clock
PROD_ACCT_ID = 384110337398
PROD_DOCKER_ECR = $(PROD_ACCT_ID).dkr.ecr.us-west-2.amazonaws.com/clock

TERRAFORM_ENV_VARS = AWS_PROFILE AWS_DEFAULT_REGION AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
TERRAFORM_VERSION = 0.11.6

default: build

build:
	docker build -t clock .

test:
	docker run --rm -v $(PWD):$(WORKDIR) -w $(WORKDIR) golang:$(GO_VERSION) go test -race ./...

lint:
	docker run --rm -v $(PWD):$(WORKDIR) -w $(WORKDIR) supinf/gometalinter:2.0 --vendor -e rpc ./...

client:
	protoc --proto_path=$(GOPATH)/src:./vendor:. --twirp_out=. --go_out=. ./rpc/clock.proto

build_deploy:
	@ docker build -t $(REPO):$(GIT_SHA) .

ecr:
	@$(shell aws ecr get-login --region us-west-2 --no-include-email)

deploy_staging: build_deploy ecr
	docker tag $(REPO):$(GIT_SHA) $(STAGING_DOCKER_ECR):$(GIT_SHA)
	docker push $(STAGING_DOCKER_ECR)
	./ecs-deploy.sh \
		--verbose \
		--timeout 180 \
		--cluster clock-staging \
		--service-name clock-staging \
		--image $(STAGING_DOCKER_ECR):$(GIT_SHA)

deploy_prod: build_deploy ecr
	docker tag $(REPO):$(GIT_SHA) $(PROD_DOCKER_ECR):$(GIT_SHA)
	docker push $(PROD_DOCKER_ECR)
	./ecs-deploy.sh \
		--verbose \
		--timeout 180 \
		--cluster clock-prod \
		--service-name clock-prod \
		--image $(PROD_DOCKER_ECR):$(GIT_SHA)

terraform-fmt:
	docker run --rm -v $(HOME)/.aws:/root/.aws $(patsubst %,-e %, $(TERRAFORM_ENV_VARS)) \
	-v $(PWD):$(PWD):delegated -w $(PWD)/terraform --entrypoint '' hashicorp/terraform:$(TERRAFORM_VERSION) \
	terraform fmt

# TODO: these can probably be refactored using a template from the above fmt command
terraform-init: 
	cd ${DIR} && terraform init

terraform-plan: terraform-clean
	cd ${DIR} && terraform plan -out=out.tfplan

terraform-apply: terraform-plan
	cd ${DIR} && terraform apply out.tfplan

terraform-clean:
	cd ${DIR} && rm -rf *.tfplan

.PHONY: build test lint
