main
 1NAME ?= $(shell basename "$(CURDIR)")
 2GIT_COMMIT ?= $(shell git rev-parse --short HEAD)
 3SOURCE_FILES = $(shell find $(CURDIR) -type f -name '*.go')
 4PACKAGES = $(shell go list ./...)
 5
 6EFFECTIVE_LD_FLAGS ?= "-X main.GitCommit=$(GIT_COMMIT) $(LD_FLAGS)"
 7
 8default: help
 9
10bin: bin/$(NAME) ## Build binary
11
12bin/$(NAME): $(SOURCE_FILES)
13	go build -o "bin/$(NAME)" -ldflags $(EFFECTIVE_LD_FLAGS) cmd/server/main.go
14
15.PHONY: clean
16clean:
17	rm -fr $(CURDIR)/bin $(CURDIR)/db/*.db
18
19.PHONY: server
20server: bin/$(NAME) ## Start server
21	bin/$(NAME)
22
23.PHONY: test
24test: ## Run tests
25	go test -v -race $(PACKAGES)
26
27.PHONY: migrate
28migrate: ## Run db migrate:up
29	go run ./cmd/migrate/main.go
30
31.PHONY: migrate/down
32migrate_down: ## Run db migrate:down
33	go run ./cmd/migrate/main.go down
34
35.PHONY: help
36help:
37	@echo "Valid targets:"
38	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'