git_sha := $(shell [ -d ".git" ] && git rev-parse --short HEAD || echo "unknown")
docker_build_image=tag_validator_image
date := $(shell date -u +"%FT%H%MZ")

# Determine which S3 bucket, and lambda.
LAMBDA_ARN=$(shell aws resourcegroupstaggingapi get-resources --tag-filters Key=DeployLambda,Values=TagsValidator | jq -r ".ResourceTagMappingList[0].ResourceARN")
BUCKET_ARN=$(shell aws resourcegroupstaggingapi get-resources --tag-filters Key=DeployBucket,Values=TagsValidator | jq -r '.ResourceTagMappingList[0].ResourceARN | split("arn:aws:s3:::")[1]')

define docker
	@docker run -v $(PWD):/build/go/src/code.justin.tv/devhub/mdaas-discovery-tags-validator:delegated -u 61000:61000 -w /build/go/src/code.justin.tv/devhub/mdaas-discovery-tags-validator	--rm $(docker_build_image) /bin/bash -c "echo \"running $(1) in docker\" && $(1)"
endef

# Build
.PHONY: build
build:
	GOOS=linux go build -o build/main main.go
	cd build && zip function.zip ./main
	cd build && cp function.zip function-$(date).zip

.PHONY: setup
setup:
	which go || (echo "install go" && exit 1)
	go get github.com/vektra/mockery/...
	go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
	
.PHONY: generate
generate:
	go generate ./...

.PHONY: test
test:
	go test ./...

.PHONY: fmt
fmt:
	go fmt ./...

.PHONY: lint
lint:
	golangci-lint run
	go run ./vendor/code.justin.tv/tshadwell/nice/cmd/nicer ./...

.PHONY: build-image
build-image:
	docker build -t $(docker_build_image) .

.PHONY: build-docker
build-docker: build-image
	$(call docker, make build)

.PHONY: lint-docker
lint-docker: build-image
	$(call docker, make lint)

.PHONY: test-docker
test-docker: build-image
	$(call docker, make test)

.PHONY: deploy-docker
deploy-docker:  build-docker
	aws lambda update-function-code --function-name $(LAMBDA_ARN) --zip-file fileb://$(PWD)/build/function.zip
	aws s3 cp ./build/function-$(date).zip s3://$(BUCKET_ARN)/
	aws s3 cp ./build/function.zip s3://$(BUCKET_ARN)/
