ROOT := $(shell pwd)
OUTPUT := $(ROOT)/output
OUTPUT_BIN := $(OUTPUT)/bin

# These environment variables must be set for deployment to work.
AWS_PROFILE := $(AWS_PROFILE)

# Common values used throughout the Makefile, not intended to be configured.
AWS_REGION = us-west-1

GOHOSTOS ?= $(shell go env GOHOSTOS)
DOCKER_HOST := 
ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS), darwin))
	DOCKER_HOST := unix:///Users/$(shell whoami)/.docker/run/docker.sock
endif

.PHONY: install-lint
install-lint:
	GOBIN=$(OUTPUT_BIN) go install -a github.com/golangci/golangci-lint/cmd/golangci-lint@v1.64.6

.PHONY: lint
lint: LINTER ?= $(OUTPUT_BIN)/golangci-lint
lint: install-lint
	go mod tidy && git diff --exit-code
	$(LINTER) run ./...
	sam validate --region=$(AWS_REGION) --lint

.PHONY: test
test:
	go test -v -race -cover ./...

.PHONY: build
build: build-jiralert

.PHONY: build-jiralert
build-jiralert: OUTPUT_DIR ?= ./bin
build-jiralert: BUILD_NAME ?= bootstrap
build-jiralert: BUILD_DIR ?= ./cmd/jiralert
build-jiralert:
	CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o $(OUTPUT_DIR)/$(BUILD_NAME) $(BUILD_DIR)

.PHONY: run
run: build
	cp config/dev/* bin/
	DOCKER_HOST=$(DOCKER_HOST) AWS_PROFILE=$(AWS_PROFILE) sam local start-api --region=$(AWS_REGION)
