GIT_COMMIT ?= $(shell git rev-parse --verify HEAD)
ENVIRONMENT ?= development
MAIN_DIR ?= ./cmd/gea
GOMETALINTER_ARGS ?= --vendor --dupl-threshold=150 --min-confidence=.3 --tests --deadline=90s --disable-all \
	-Egolint -Etest -Eineffassign -Etestify -Eunconvert -Estaticcheck -Egoconst -Eerrcheck \
	-Egofmt -Evet -Edupl -Einterfacer -Estructcheck -Evetshadow -Egosimple -Egoimports -Evarcheck -Emisspell \
	-Emaligned -Etest --exclude=/usr/local/go/src --exclude='/mocks/[^/]+\.go.*\((dupl)|(golint)\)' \
	--exclude='' ./...
TEST_PACKAGES ?= $(shell go list ./... | grep -v /vendor/)

precommit: fix fast_lint integration_test

test:
	go test $(TEST_PACKAGES)

integration_test:
	env ENVIRONMENT=$(ENVIRONMENT) go test -race -tags=integration $(TEST_PACKAGES)

build_image:
	GOOS=linux go build -ldflags "-linkmode external -extldflags -static -X main.CodeVersion=$(GIT_COMMIT)" $(MAIN_DIR)
	docker build -t "gea" --file $(MAIN_DIR)/Dockerfile .

build:
	go build -ldflags "-linkmode external -extldflags -static -X main.CodeVersion=$(GIT_COMMIT)" $(MAIN_DIR)

run:
	env ENVIRONMENT=$(ENVIRONMENT) go run -race -ldflags "-X main.CodeVersion=$(GIT_COMMIT)" $(MAIN_DIR)/main.go

db:
	docker pull docker.internal.justin.tv/twitch-events/oracle_db:latest
	docker run -d -p 5432:5432 docker.internal.justin.tv/twitch-events/oracle_db:latest

revendor:
	rm -rf ./vendor
	dep ensure
	dep prune

lint:
	gometalinter $(GOMETALINTER_ARGS)

fast_lint:
	gometalinter --fast $(GOMETALINTER_ARGS)

fix:
	find . -iname '*.go' -not -path '*/vendor/*' -print0 | xargs -0 gofmt -s -w
	find . -iname '*.go' -not -path '*/vendor/*' -print0 | xargs -0 goimports -w

zip_lambda:
	zip -rv terraform/index.zip ./lambda

jenkins: lint test build
	go env
	go version
	env
	mkdir /build/gea
	cp $(MAIN_DIR)/Dockerfile /build/gea
	cp gea /build/gea
	cp -R ./config /build/gea

mocks:
	mockery -dir ./cmd/gea/internal/api/ -name SpadeClient -output ./cmd/gea/internal/api/mocks

build_poller_image:
	script/build-tag-push.sh events poll-endpoint $(GIT_COMMIT) poller_Dockerfile
