git_sha := $(shell [ -d ".git" ] && git rev-parse --short HEAD || echo "unknown")
docker_repo := devhub/mdaas-ingest
docker_build_image := $(docker_repo):build-$(git_sha)
docker_dist_image := $(docker_repo):$(git_sha)

go-bindata := github.com/go-bindata/go-bindata/go-bindata
goimports := golang.org/x/tools/cmd/goimports
golangci-lint := github.com/golangci/golangci-lint/cmd/golangci-lint
nicer := code.justin.tv/tshadwell/nice/cmd/nicer

export GOBIN := $(CURDIR)/bin

# Building
.PHONY: build
build:
	GO111MODULE=on GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -mod=vendor -o build/mdaas-ingest cmd/mdaas-ingest/*.go

.PHONY: setup
setup:
	which go || (echo "install go" && exit 1)
	go install -mod=vendor $(go-bindata) $(goimports) $(golangci-lint) $(nicer)

.PHONY: dist
dist:
	docker build -t $(docker_dist_image) .

.PHONY: generate
generate:
	GO111MODULE=on go generate -mod=vendor ./...

.PHONY: test
test:
	GO111MODULE=on go test -mod=vendor ./...

.PHONY: e2e-test
e2e-test:
	sh cmd/e2e_test/run.sh

.PHONY: lint
lint:
	$(GOBIN)/golangci-lint run ./...
	$(GOBIN)/nicer ./...

.PHONY: fmt
fmt:
	go fmt ./...
	$(GOBIN)/goimports -w internal models processor server cmd ratelimiter

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

.PHONY: config-docker
config-docker: build-docker
	docker run --rm $(docker_build_image) make config

.PHONY: lint-docker
lint-docker: build-docker
	docker run --rm $(docker_build_image) make lint

.PHONY: test-docker
test-docker: build-docker
	docker run --rm $(docker_build_image) make test

.PHONY: docker-run
docker-run: build-docker
	docker run  --rm -it $(docker_build_image)

.PHONY: deploy
deploy: dist
	./scripts/deploy $(docker_dist_image) $(git_sha)

.PHONY: deploy-canary
deploy-canary: dist
	./scripts/deploy $(docker_dist_image) $(git_sha) canary

.PHONY: config
config:
	$(GOBIN)/go-bindata -o config/data.go -pkg=config config/data/

.PHONY: clean-vendor
clean-vendor:
	GOFLAGS=-mod=vendor GO111MODULE=on go mod tidy
	GOFLAGS=-mod=vendor GO111MODULE=on go mod verify
	GOFLAGS=-mod=vendor GO111MODULE=on go mod vendor
	GOFLAGS=-mod=vendor GO111MODULE=on find vendor -type f -not \( -name "modules.txt" -or -name "*.go" -or -name "*.c" -or -name "*.h" -or -name "*.s" \) -exec rm {} \+
