.PHONY: all build test clean fmt lint build-all # Go parameters GOCMD=go GOBUILD=$(GOCMD) build GOCLEAN=$(GOCMD) clean GOTEST=$(GOCMD) test GOGET=$(GOCMD) get GOMOD=$(GOCMD) mod GOFMT=$(GOCMD) fmt GOLINT=golangci-lint # Binary name BINARY_NAME=gotidb BINARY_UNIX=$(BINARY_NAME)_unix BINARY_WIN=$(BINARY_NAME).exe BINARY_MAC=$(BINARY_NAME)_mac # Build directory BUILD_DIR=build # Main package path MAIN_PACKAGE=./cmd/server # Get the current git commit hash COMMIT=$(shell git rev-parse --short HEAD) BUILD_TIME=$(shell date +%FT%T%z) # Build flags LDFLAGS=-ldflags "-X main.commit=${COMMIT} -X main.buildTime=${BUILD_TIME}" # Default target all: test build # Build the project build: mkdir -p $(BUILD_DIR) $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_NAME) $(MAIN_PACKAGE) # Build for all platforms build-all: build-linux build-windows build-mac build-linux: mkdir -p $(BUILD_DIR) GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_UNIX) $(MAIN_PACKAGE) build-windows: mkdir -p $(BUILD_DIR) GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_WIN) $(MAIN_PACKAGE) build-mac: mkdir -p $(BUILD_DIR) GOOS=darwin GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(BINARY_MAC) $(MAIN_PACKAGE) # Run tests test: $(GOTEST) -v ./... # Run tests with coverage test-coverage: $(GOTEST) -v -coverprofile=coverage.out ./... $(GOCMD) tool cover -html=coverage.out -o coverage.html # Clean build artifacts clean: $(GOCLEAN) rm -rf $(BUILD_DIR) rm -f coverage.out coverage.html # Format code fmt: $(GOFMT) ./... # Run linter lint: $(GOLINT) run # Download dependencies deps: $(GOMOD) download # Verify dependencies verify: $(GOMOD) verify # Update dependencies update-deps: $(GOMOD) tidy # Install development tools install-tools: $(GOGET) -u github.com/golangci/golangci-lint/cmd/golangci-lint # Run the application run: $(GOBUILD) -o $(BUILD_DIR)/$(BINARY_NAME) $(MAIN_PACKAGE) ./$(BUILD_DIR)/$(BINARY_NAME) # Help target help: @echo "Available targets:" @echo " all : Run tests and build" @echo " build : Build for current platform" @echo " build-all : Build for all platforms" @echo " test : Run tests" @echo " test-coverage: Run tests with coverage" @echo " clean : Clean build artifacts" @echo " fmt : Format code" @echo " lint : Run linter" @echo " deps : Download dependencies" @echo " verify : Verify dependencies" @echo " update-deps : Update dependencies" @echo " install-tools: Install development tools" @echo " run : Run the application" # Default to help if no target is specified .DEFAULT_GOAL := help