# ============================================================================== COMMON_SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST))) ROOT_DIR := $(abspath $(shell cd $(COMMON_SELF_DIR)/ && pwd -P)) OUTPUT_DIR := $(ROOT_DIR)/_output # ============================================================================== # Version VERSION_PACKAGE=git.vinchent.xyz/vinchent/howmuch/pkg/version ifeq ($(origin VERSION), undefined) VERSION:=$(shell git describe --tags --always --match='v*') endif GIT_TREE_STATE="dirty" ifeq (, $(shell git status --porcelain 2>/dev/null)) GIT_TREE_STATE ="clean" endif GIT_COMMIT:=$(shell git rev-parse HEAD) GO_LDFLAGS += \ -X $(VERSION_PACKAGE).GitVersion=$(VERSION) \ -X $(VERSION_PACKAGE).GitCommit=$(GIT_COMMIT) \ -X $(VERSION_PACKAGE).GitTreeState=$(GIT_TREE_STATE) \ -X $(VERSION_PACKAGE).BuildDate=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ') # ============================================================================== .PHONY: all all: add-copyright format build web: web-all # ============================================================================== .PHONY: build build: tidy sqlc # build. @go build -v -ldflags "$(GO_LDFLAGS)" -o $(OUTPUT_DIR)/howmuch $(ROOT_DIR)/cmd/howmuch/main.go .PHONY: sqlc sqlc: @sqlc generate .PHONY: format format: # format code. @gofmt -s -w ./ .PHONY: add-copyright add-copyright: # add license to file headers. @addlicense -v -f $(ROOT_DIR)/LICENSE $(ROOT_DIR) --skip-files=database.yml --skip-dirs=$(OUTPUT_DIR),deployment,migrations,configs,sqlc,web,mock .PHONY: swagger swagger: # Run swagger. @swagger serve -F=swagger --no-open --port 65534 $(ROOT_DIR)/api/openapi/openapi.yaml .PHONY: tidy tidy: # Handle packkages. @go mod tidy .PHONY: test test: @go test ./... .PHONY: clean clean: # Clean up. @-rm -vrf $(OUTPUT_DIR) .PHONY: web-build web-build: $(MAKE) -C web build .PHONY: web-test web-test: $(MAKE) -C web test .PHONY: web-all web-all: $(MAKE) -C web all