TEST_STAGE = ${USER}
TEST_REGION = us-west-2

.PHONY: build clean deploy

install:
	go mod tidy

build: install
	export GO111MODULE=on
	env GOOS=linux go build -ldflags="-s -w" -o bin/marionette cmd/main.go
	env GOOS=linux go build -ldflags="-s -w" -o bin/crawl functions/crawl.go
	env GOOS=linux go build -ldflags="-s -w" -o bin/crawlfacebook functions/crawlfacebook.go
	env GOOS=linux go build -ldflags="-s -w" -o bin/proxyserver functions/proxyserver.go

clean:
	rm -rf ./bin

test: install
	go test -count=1 -race -cover -coverprofile=coverage.txt -covermode=atomic ./pkg/...

deploy_test_stack: clean build
	sls deploy --verbose --stage ${TEST_STAGE} --region ${TEST_REGION}

deploy_dev: clean build
	sls deploy --verbose --stage dev

deploy_prod: clean build
	sls deploy --verbose --stage prod

DOCKER_IMAGE = $(DOCKER_REGISTRY)/marionette:jenkins
SSH_KEY_FILE ?= $(HOME)/.ssh/id_rsa
DOCKER_RUN = docker run --rm  \
	-v $(SSH_KEY_FILE):/root/.ssh/id_rsa:ro \
	-v $(AWS_SHARED_CREDENTIALS_FILE):/root/.aws/credentials:ro \
	-v $(PWD):/app \
	-e GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" \
	-e AWS_PROFILE=$(AWS_PROFILE) \
	-w /app \
	$(DOCKER_IMAGE)

jenkins_docker:
	docker pull $(DOCKER_IMAGE) || true
	docker build --cache-from $(DOCKER_IMAGE) \
		-t $(DOCKER_IMAGE) \
		- < scripts/Dockerfile.jenkins
	docker push $(DOCKER_IMAGE)

jenkins_test: jenkins_docker
	$(DOCKER_RUN) make test
	$(DOCKER_RUN) chown -R 61000:61000 .

jenkins_deploy_dev: jenkins_docker
	$(DOCKER_RUN) make deploy_dev
	$(DOCKER_RUN) chown -R 61000:61000 .

jenkins_deploy_prod: jenkins_docker
	$(DOCKER_RUN) make deploy_prod
	$(DOCKER_RUN) chown -R 61000:61000 .
