UNAME := $(shell uname)
ifeq ($(UNAME), Darwin)
	DHOST := $(shell echo $$(docker-machine ip))
else
	DHOST := 127.0.0.1
endif

all: get-deps build

.PHONY: build
build:
	go build ./...

.PHONY: get-deps
get-deps:
	go get -v ./...

.PHONY: test
test: get-deps metalint docs-check check

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

.PHONY: metalint
metalint:
	which gometalinter > /dev/null || (go get github.com/alecthomas/gometalinter && gometalinter --install --update)
	gometalinter --cyclo-over=20 -e "struct field Id should be ID" --disable=gas --enable=misspell --fast ./...

.PHONY: fmt
fmt:
	@go fmt ./... | awk '{ print "Please run go fmt"; exit 1 }'

.PHONY: docker-test
docker-test:
	docker run -d -p 5432:5432 --name=pgstore_test_1 postgres:9.4
	@echo "Ugly hack: Sleeping for 75 secs to give the Postgres container time to come up..."
	sleep 75
	@echo "Waking up - let's do this!"
	docker run --rm --link pgstore_test_1:postgres postgres:9.4 psql -c 'create database test;' -U postgres -h postgres
	PGSTORE_TEST_CONN="postgres://postgres@$(DHOST):5432/test?sslmode=disable" make test
	docker kill pgstore_test_1
	docker rm pgstore_test_1

.PHONY: docker-clean
docker-clean:
	-docker kill pgstore_test_1
	-docker rm pgstore_test_1

.PHONY: docs-dep
	which embedmd > /dev/null || go get github.com/campoy/embedmd

.PHONY: docs-check
docs-check: docs-dep
	@echo "Checking if docs are generated, if this fails, run 'make docs'."
	embedmd README.md | diff README.md -

.PHONY: docs
docs: docs-dep
	embedmd -w README.md