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 ./...