98 lines
2.5 KiB
Makefile
98 lines
2.5 KiB
Makefile
# Variables
|
|
APP_NAME := dttmr-api
|
|
MAIN_DIR := ./cmd/api
|
|
BIN_DIR := ./bin
|
|
|
|
# Dynamically pull version and commit hash from Git
|
|
VERSION ?= $(shell git describe --tags --always --dirty="-dev" 2>/dev/null || echo "dev")
|
|
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "none")
|
|
BUILD_TIME ?= $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
|
|
# Linker flags to strip symbols (-s -w) and inject build data into the binary
|
|
LDFLAGS := -w -s \
|
|
-X 'main.Version=$(VERSION)' \
|
|
-X 'main.Commit=$(COMMIT)' \
|
|
-X 'main.BuildTime=$(BUILD_TIME)'
|
|
|
|
# Targets
|
|
|
|
.PHONY: all help build build-api build-bootstrap run test test-cover lint fmt mod clean docker
|
|
|
|
all: help
|
|
|
|
## help: Show this help message
|
|
help:
|
|
@echo "Usage: make [target]"
|
|
@echo ""
|
|
@echo "Targets:"
|
|
@sed -n 's/^##//p' $(MAKEFILE_LIST) | column -t -s ':' | sed -e 's/^/ /'
|
|
|
|
## build: Compile all binaries
|
|
build: build-api build-bootstrap
|
|
|
|
## build-api: Compile the api binary
|
|
build-api:
|
|
@echo "Building api..."
|
|
go build -ldflags="$(LDFLAGS)" -o $(BIN_DIR)/api $(MAIN_DIR)
|
|
|
|
## build-bootstrap: Compile the bootstrap binary
|
|
build-bootstrap:
|
|
@echo "Building bootstrap cli..."
|
|
go build -ldflags="$(LDFLAGS)" -o $(BIN_DIR)/bootstrap ./cmd/bootstrap
|
|
|
|
## run: Run the application directly
|
|
run: build-api
|
|
@echo "Starting $(APP_NAME)..."
|
|
@$(BIN_DIR)/api
|
|
|
|
## test: Run tests with race detector
|
|
test:
|
|
@echo "Running tests..."
|
|
@if [ "$$(go env GOARCH)" = "amd64" ]; then \
|
|
go test -race -timeout 30s ./...; \
|
|
else \
|
|
go test -timeout 60s ./...; \
|
|
fi
|
|
|
|
## test-cover: Run tests and generate coverage report
|
|
test-cover:
|
|
@echo "Running tests with coverage..."
|
|
@go test -coverprofile=coverage.out ./...
|
|
@go tool cover -html=coverage.out -o coverage.html
|
|
@echo "Coverage report generated at coverage.html"
|
|
|
|
## lint: Run golangci-lint
|
|
lint:
|
|
@echo "Running linter..."
|
|
@#golangci-lint run ./...
|
|
@go vet ./...
|
|
|
|
## fmt: Format code and organize imports
|
|
fmt:
|
|
@echo "Formatting code..."
|
|
@go fmt ./...
|
|
@go run golang.org/x/tools/cmd/goimports@latest -w .
|
|
|
|
## mod: Tidy and verify dependencies
|
|
mod:
|
|
@echo "Tidying and verifying module dependencies..."
|
|
@go mod tidy
|
|
@go mod verify
|
|
|
|
## clean: Remove build artifacts
|
|
clean:
|
|
@echo "Cleaning up..."
|
|
@rm -rf $(BIN_DIR)
|
|
@rm -f coverage.out coverage.html
|
|
@go clean
|
|
|
|
## docker: Build a Docker image
|
|
docker:
|
|
@echo "Building Docker image for $(APP_NAME):$(VERSION)..."
|
|
@docker build -t $(APP_NAME):$(VERSION) -t $(APP_NAME):latest .
|
|
|
|
## swag: Create swagger documentation
|
|
swag:
|
|
@echo "Creating swagger documentation for $(APP_NAME)"
|
|
@swag init --outputTypes json,yaml -g $(MAIN_DIR)/main.go
|