GIT_COMMIT ?= local

lambdas-out := build/lambdas

mock-note := "Code generated - this lets golint know to skip this file - DO NOT EDIT."
mock := retool do mockery -all -note $(mock-note)
aws-mock := $(mock) -outpkg awsmocks -output ./internal/awsmocks -dir ./vendor/github.com/aws/aws-sdk-go/service

codecov := curl -s https://codecov.internal.justin.tv/bash | bash -s -
coverage-out := coverage.txt

repo := beefcake/server
pkg := code.justin.tv/$(repo)
pkg-abs := ${GOPATH}/src/$(pkg)
docker-repo := docker.internal.justin.tv/$(repo)
docker-image := $(docker-repo):$(GIT_COMMIT)

define pkgmock
	$(mock) -outpkg $(1)mocks -output ./internal/$(1)/$(1)mocks -dir ./internal/$(1)/$(1)iface
endef

twirp-gen:
	retool do protoc --twirp_out=. --go_out=. ./rpc/beefcake/service.proto


setup-jenkins-go:
	mkdir -p $(shell dirname $(pkg-abs))
	cp -r $(CURDIR)/. $(pkg-abs)
	go get github.com/twitchtv/retool

build-go:
	cd $(pkg-abs) && retool do gometalinter ./...
	go test -coverprofile=$(coverage-out) -covermode=atomic -short $(pkg)/...
	GOOS="linux" go build -o ./bin/beefcake $(pkg)/cmd/beefcake
	go build -o ./bin/admin $(pkg)/cmd/admin
	./bin/admin build-lambdas -out $(lambdas-out)

test-e2e-go:
	go test -tags e2e $(pkg)/e2e -e2e.environment testing


build-docker:
	mkdir -p ./dockerfiles/app/bin
	cp ./bin/beefcake ./dockerfiles/app/bin/
	docker build -t $(docker-image) ./dockerfiles/app
	docker push $(docker-image)


upload-coverage:
	$(codecov) -r $(repo) -t ${CODECOV_TOKEN} -f $(coverage-out)


deploy: deploy-lambdas deploy-service

deploy-lambdas:
	./bin/admin upload-lambdas -env $(environment) -in-dir $(lambdas-out) -build-id $(GIT_COMMIT)

deploy-service:
	./bin/admin update-service \
		-build-id $(GIT_COMMIT) \
		-env $(environment) \
		-task-def-arn $(shell ./bin/admin create-task -env $(environment) -build-id $(GIT_COMMIT))



mocks:
	$(aws-mock)/dynamodb/dynamodbiface
	$(call pkgmock,role)
	$(call pkgmock,user)
	$(call pkgmock,legacyperm)
