PACKAGES = `go list ./... | grep -v /lambda/`

.PHONY: setup update lint test gen run jenkins mocks

ENVIRONMENT ?= "development"
PORT ?= "8080"
MAIN_DIR ?= ./cmd/apertureserver
GIT_COMMIT ?= $(shell git rev-parse --verify HEAD)
GOBIN := $(CURDIR)/_bin
PATH := $(GOBIN):$(PATH)

setup:
	brew install protobuf
	brew tap alecthomas/homebrew-tap
	brew install golangci/tap/golangci-lint
	brew install clang-format
	go get -u github.com/vektra/mockery/...
	go get -u github.com/smartystreets/goconvey/...
	go get -u github.com/golang/protobuf/protoc-gen-go/...
	git -C $(GOPATH)/src/github.com/golang/protobuf checkout v1.2.0 # Change version as needed. This will check out the desired version and install it.
	go install github.com/golang/protobuf/protoc-gen-go
	git -C $(GOPATH)/src/github.com/golang/protobuf checkout master
	go get -u github.com/twitchtv/twirp/protoc-gen-twirp/...

jenkins_setup:
	@wget -O - -q https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(GOBIN) v1.21.0

update:
	cd -P . && dep ensure

lint:
	golangci-lint run

test:
	go test -cover -race -v $(PACKAGES)

ratio_lambda_test:
	go test -cover -race -v ./lambda/output_mw_ratio_to_elasticache

proto_lint:
	clang-format -style="{BasedOnStyle: Google, IndentWidth: 4}" -verbose -i rpc/aperture/*.proto

gen:
	protoc --twirp_out=. --go_out=. ./rpc/aperture/service.proto

run:
	ENVIRONMENT=$(ENVIRONMENT) \
	PORT=$(PORT) \
	go run ./cmd/apertureserver/main.go

jenkins: jenkins_setup lint test
	go build -ldflags "-X main.CodeVersion=$(GIT_COMMIT)" $(MAIN_DIR)
	go env
	go version
	env
	mkdir /build/service
	cp $(MAIN_DIR)/Dockerfile /build/service
	cp apertureserver /build/service
	cp -R ./config /build/service

ratio_lambda_build:
	GOOS=linux GOARCH=amd64 go build -o build/lambda/output_mw_ratio_to_elasticache/main lambda/output_mw_ratio_to_elasticache/*.go

jenkins_ratio_lambda_build: jenkins_setup lint ratio_lambda_test
	go env
	go version
	env
	GOOS=linux GOARCH=amd64 go build -o /build/lambda/output_mw_ratio_to_elasticache/main lambda/output_mw_ratio_to_elasticache/*.go
	cp -R ./config /build/lambda/output_mw_ratio_to_elasticache

spade_logger_lambda_build:
	GOOS=linux GOARCH=amd64 go build -o build/lambda/spade_logger/main lambda/spade_logger/*.go

jenkins_spade_logger_lambda_build: jenkins_setup lint
	go env
	go version
	env
	GOOS=linux GOARCH=amd64 go build -o /build/lambda/spade_logger/main lambda/spade_logger/*.go
	cp -R ./config /build/lambda/spade_logger

pubsub_sender_lambda_build:
	GOOS=linux GOARCH=amd64 go build -o build/lambda/pubsub_sender/main lambda/pubsub_sender/*.go

jenkins_pubsub_sender_lambda_build: jenkins_setup lint
	go env
	go version
	env
	GOOS=linux GOARCH=amd64 go build -o /build/lambda/pubsub_sender/main lambda/pubsub_sender/*.go
	cp -R ./config /build/lambda/pubsub_sender

error_stream_logger_lambda_build:
	GOOS=linux GOARCH=amd64 go build -o build/lambda/error_stream_logger/main lambda/error_stream_logger/*.go

jenkins_error_stream_logger_lambda_build: jenkins_setup lint
	go env
	go version
	env
	GOOS=linux GOARCH=amd64 go build -o /build/lambda/error_stream_logger/main lambda/error_stream_logger/*.go
	cp -R ./config /build/lambda/error_stream_logger

mocks:
	mockery -all -dir=internal/clients -case=underscore -output=internal/mocks
	mockery -all -dir=internal/fetcher -case=underscore -output=internal/mocks
	mockery -name RatioBuffer -dir=internal/util -case=underscore -output=internal/mocks
	mockery -name FreezeBuffer -dir=internal/util -case=underscore -output=internal/mocks
