# Source Code Parent Dir for All Services
SVC_DIR := ./services

.DELETE_ON_ERROR:

# Docker is used on the CI server (Jenkins) to run tasks from a container.
DOCKER_IMAGE=message-prototype
DOCKER_WORKDIR=/build/go/src/code.justin.tv/devhub/e2ml
define docker_run
	@docker run -v $(PWD):$(DOCKER_WORKDIR) -w $(DOCKER_WORKDIR) --rm $(DOCKER_IMAGE) /bin/bash -c "echo \">> Docker run: $(1)\" && $(1)"
endef

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

# Create docker images and then clean up build artifacts
all: build clean
.PHONY: all

build:
	@echo "[INFO] Building Services"
	@$(MAKE) -C $(SVC_DIR)/echo build
	@$(MAKE) -C $(SVC_DIR)/greeter build
	@$(MAKE) -C $(SVC_DIR)/threshold build
	@$(MAKE) -C $(SVC_DIR)/pathfinder build
	@$(MAKE) -C $(SVC_DIR)/source build
.PHONY: build

clean:
	@echo "[INFO] Cleaning Services"
	@$(MAKE) -C $(SVC_DIR)/echo clean
	@$(MAKE) -C $(SVC_DIR)/greeter clean
	@$(MAKE) -C $(SVC_DIR)/threshold clean
	@$(MAKE) -C $(SVC_DIR)/pathfinder clean
	@$(MAKE) -C $(SVC_DIR)/source clean
.PHONY: clean

docker-purge:
	docker system prune -af
.PHONY: docker-purge

dep:
	# Install new Gopkg.toml dependencies in vendor
	dep ensure

lint:
	# Linter install: brew install golangci/tap/golangci-lint
	# TODO add -E=errcheck
	golangci-lint run --no-config --disable-all \
	  -E=gosimple -E=staticcheck -E=deadcode -E=unused -E=structcheck -E=ineffassign \
	  -E=govet -E=typecheck -E=varcheck

lint-docker: docker-image
	$(call docker_run, make lint)

test:
	go test -race ./...

test-docker: docker-image
	$(call docker_run, make test)

hard-restart-prod:
	# Stop all tasks to restart Pathfinder, Threshold and Source in prod
	go run scripts/restart/main.go prod

hard-restart-dev:
	# Stop all tasks to restart Pathfinder, Threshold and Source in dev
	go run scripts/restart/main.go dev


