# Variables BINARY_NAME := ${REPO_NAME} BUILD_DIR := ./build DIST_DIR := ./dist VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "0.1.0-dev") BUILD_TIME := $(shell date -u '+%Y-%m-%d_%H:%M:%S') GIT_COMMIT := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown") DEB_PACKAGE_NAME := $(BINARY_NAME)_$(VERSION)_amd64.deb PKG_PATH=git.runcible.io/${REPO_OWNER}/${REPO_NAME}/cmd # Strict, Debian-compliant version for packaging. # It tries to find the latest tag (e.g., v1.2.3) and uses that. # If no tags exist, it defaults to "0.1.0-1", which is a valid starting version for a Debian package. DEB_VERSION := $(shell TAG=$$(git describe --tags --abbrev=0 2>/dev/null); if [ -n "$$TAG" ]; then echo $$TAG | sed 's/^v//'; else echo "0.1.0-1"; fi) # Default target .PHONY: all all: build # Build the binary .PHONY: build build: @echo "Building $(BINARY_NAME) version $(VERSION)..." @mkdir -p $(BUILD_DIR) @go build -ldflags "-X $(PKG_PATH).Version=$(VERSION) -X $(PKG_PATH).BuildTime=$(BUILD_TIME) -X $(PKG_PATH).GitCommit=$(GIT_COMMIT)" \ -o $(BUILD_DIR)/$(BINARY_NAME) . # Clean build artifacts .PHONY: clean clean: @echo "Cleaning build artifacts..." @rm -rf $(BUILD_DIR) @rm -rf $(DIST_DIR) # Build Debian package .PHONY: deb deb: build @echo "Building Debian package..." @mkdir -p $(DIST_DIR) @mkdir -p $(DIST_DIR)/$(BINARY_NAME)_$(DEB_VERSION) @mkdir -p $(DIST_DIR)/$(BINARY_NAME)_$(DEB_VERSION)/DEBIAN @mkdir -p $(DIST_DIR)/$(BINARY_NAME)_$(DEB_VERSION)/opt/$(BINARY_NAME) # Copy binary @cp $(BUILD_DIR)/$(BINARY_NAME) $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/opt/$(BINARY_NAME)/ @chmod +x $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/opt/$(BINARY_NAME)/$(BINARY_NAME) # Create control file @echo "Package: $(BINARY_NAME)" > $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control @echo "Version: $(VERSION)" >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control @echo "Architecture: amd64" >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control @echo "Maintainer: Bishop Maintainer " >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control @echo "Description: Bishop - A Go application" >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control @echo " Bishop is a Go application that provides various functionalities." >> $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/control # Copy changelog if it exists @if [ -f changelog ]; then \ cp changelog $(DIST_DIR)/$(BINARY_NAME)_$(VERSION)/DEBIAN/; \ fi # Build the .deb package @cd $(DIST_DIR) && dpkg-deb --build $(BINARY_NAME)_$(VERSION) @mv $(DIST_DIR)/$(BINARY_NAME)_$(VERSION).deb $(DIST_DIR)/$(DEB_PACKAGE_NAME) @echo "Debian package created: $(DIST_DIR)/$(DEB_PACKAGE_NAME)" # Install dependencies .PHONY: deps deps: @echo "Installing dependencies..." @go mod download # Run tests .PHONY: test test: @echo "Running tests..." @go test ./... # Format code .PHONY: fmt fmt: @echo "Formatting code..." @go fmt ./... # Lint code .PHONY: lint lint: @echo "Linting code..." @go vet ./... # Show help .PHONY: help help: @echo "Available targets:" @echo " build - Build the binary in ./build directory" @echo " deb - Build Debian package in ./dist directory" @echo " clean - Clean build and dist directories" @echo " deps - Install dependencies" @echo " test - Run tests" @echo " fmt - Format code" @echo " lint - Lint code" @echo " help - Show this help message"