github.com/soulteary/pocket-bookcase@v0.0.0-20240428065142-0b5a9a0fc98a/Makefile (about) 1 GO ?= $(shell command -v go 2> /dev/null) 2 BASH ?= $(shell command -v bash 2> /dev/null) 3 4 # Development 5 SHIORI_DIR ?= dev-data 6 7 # Testing 8 override GO_TEST_FLAGS += -v -race -count=1 -covermode=atomic -coverprofile=coverage.out 9 GOTESTFMT_FLAGS ?= 10 11 # Build 12 CGO_ENABLED ?= 0 13 BUILD_TIME := $(shell date -u +%Y%m%d.%H%M%S) 14 BUILD_HASH := $(shell git describe --tags) 15 BUILD_TAGS ?= osusergo,netgo 16 LDFLAGS += -s -w -X main.version=$(BUILD_HASH) -X main.date=$(BUILD_TIME) 17 18 # Development 19 GIN_MODE ?= debug 20 SHIORI_DEVELOPMENT ?= true 21 22 # Swagger 23 SWAG_VERSION := $(shell grep "swaggo/swag" go.mod | cut -d " " -f 2) 24 SWAGGER_DOCS_PATH ?= ./docs/swagger 25 26 # Frontend 27 CLEANCSS_OPTS ?= --with-rebase 28 29 # Help documentatin à la https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html 30 .PHONY: help 31 help: 32 @cat Makefile | grep -v '\.PHONY' | grep -v '\help:' | grep -B1 -E '^[a-zA-Z0-9_.-]+:.*' | sed -e "s/:.*//" | sed -e "s/^## //" | grep -v '\-\-' | sed '1!G;h;$$!d' | awk 'NR%2{printf "\033[36m%-30s\033[0m",$$0;next;}1' | sort 33 34 ## Cleans up build artifacts 35 .PHONY: clean 36 clean: 37 rm -rf dist 38 39 ## Runs the legacy http API for local development 40 .PHONY: serve 41 serve: 42 SHIORI_DEVELOPMENT=$(SHIORI_DEVELOPMENT) SHIORI_DIR=$(SHIORI_DIR) go run main.go serve 43 44 ## Runs server for local development 45 .PHONY: run-server 46 run-server: 47 GIN_MODE=$(GIN_MODE) SHIORI_DEVELOPMENT=$(SHIORI_DEVELOPMENT) SHIORI_DIR=$(SHIORI_DIR) SHIORI_HTTP_SECRET_KEY=shiori go run main.go server --log-level debug 48 49 ## Generate swagger docs 50 .PHONY: swagger 51 swagger: 52 SWAGGER_DOCS_PATH=$(SWAGGER_DOCS_PATH) $(BASH) ./scripts/swagger.sh 53 54 .PHONY: swag-check 55 swag-check: 56 REQUIRED_SWAG_VERSION=$(SWAG_VERSION) SWAGGER_DOCS_PATH=$(SWAGGER_DOCS_PATH) $(BASH) ./scripts/swagger_check.sh 57 58 .PHONY: swag-fmt 59 swag-fmt: 60 swag fmt --dir internal/http 61 go fmt ./internal/http/... 62 63 ## Run linters 64 .PHONY: lint 65 lint: golangci-lint swag-check 66 67 ## Run golangci-lint 68 .PHONY: golangci-lint 69 golangci-lint: 70 golangci-lint run 71 72 ## Run unit tests 73 .PHONY: unittest 74 unittest: 75 GIN_MODE=$(GIN_MODE) GO_TEST_FLAGS="$(GO_TEST_FLAGS)" GOTESTFMT_FLAGS="$(GOTESTFMT_FLAGS)" $(BASH) -xe ./scripts/test.sh 76 77 ## Build styles 78 .PHONY: styles 79 styles: 80 CLEANCSS_OPTS=$(CLEANCSS_OPTS) $(BASH) ./scripts/styles.sh 81 82 ## Build styles 83 .PHONY: styles-check 84 styles-check: 85 CLEANCSS_OPTS=$(CLEANCSS_OPTS) $(BASH) ./scripts/styles_check.sh 86 87 ## Build binary 88 .PHONY: build 89 build: clean 90 GIN_MODE=$(GIN_MODE) goreleaser build --rm-dist --snapshot 91 92 ## Creates a coverage report 93 .PHONY: coverage 94 coverage: 95 $(GO) test $(GO_TEST_FLAGS) -coverprofile=coverage.txt ./... 96 $(GO) tool cover -html=coverage.txt 97 98 ## Run generate accross the project 99 .PHONY: generated 100 generate: 101 $(GO) generate ./...