149 lines
4.3 KiB
Makefile
149 lines
4.3 KiB
Makefile
# ZSVO Package Manager - Linux Build System
|
|
# Supports Linux x86_64, ARM64, i386, ARM
|
|
|
|
.PHONY: help build clean test lint fmt install uninstall release docker
|
|
|
|
# Default target
|
|
help: ## Show this help message
|
|
@echo 'ZSVO Package Manager - Linux Build System'
|
|
@echo ''
|
|
@echo 'Usage: make [target]'
|
|
@echo ''
|
|
@echo 'Targets:'
|
|
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-15s %s\n", $$1, $$2}' $(MAKEFILE_LIST)
|
|
|
|
# Variables
|
|
BINARY_NAME=zsvo
|
|
VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
|
|
BUILD_TIME=$(shell date -u '+%Y-%m-%d_%H:%M:%S')
|
|
LDFLAGS=-ldflags "-X main.version=$(VERSION) -X main.buildTime=$(BUILD_TIME)"
|
|
|
|
# Linux platforms
|
|
PLATFORMS=linux/amd64 linux/arm64 linux/386 linux/arm
|
|
|
|
# Build targets
|
|
build: ## Build for current platform
|
|
go build $(LDFLAGS) -o bin/$(BINARY_NAME) .
|
|
|
|
build-all: ## Build for all Linux platforms
|
|
@echo "Building ZSVO for Linux platforms..."
|
|
@mkdir -p bin
|
|
@for platform in $(PLATFORMS); do \
|
|
os=$$(echo $$platform | cut -d'/' -f1); \
|
|
arch=$$(echo $$platform | cut -d'/' -f2); \
|
|
output_name=$(BINARY_NAME)-$$arch; \
|
|
echo "Building $$arch..."; \
|
|
GOOS=$$os GOARCH=$$arch go build $(LDFLAGS) -o dist/$$arch/$$output_name .; \
|
|
done
|
|
@echo "Build complete! Binaries are in dist/"
|
|
|
|
# Platform-specific builds
|
|
build-amd64: ## Build for Linux x86_64
|
|
@echo "Building amd64..."
|
|
@mkdir -p dist/amd64
|
|
GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -o dist/amd64/$(BINARY_NAME) .
|
|
|
|
build-arm64: ## Build for Linux ARM64
|
|
@echo "Building arm64..."
|
|
@mkdir -p dist/arm64
|
|
GOOS=linux GOARCH=arm64 go build $(LDFLAGS) -o dist/arm64/$(BINARY_NAME) .
|
|
|
|
build-386: ## Build for Linux i386
|
|
@echo "Building 386..."
|
|
@mkdir -p dist/386
|
|
GOOS=linux GOARCH=386 go build $(LDFLAGS) -o dist/386/$(BINARY_NAME) .
|
|
|
|
build-arm: ## Build for Linux ARM
|
|
@echo "Building arm..."
|
|
@mkdir -p dist/arm
|
|
GOOS=linux GOARCH=arm go build $(LDFLAGS) -o dist/arm/$(BINARY_NAME) .
|
|
|
|
# Development targets
|
|
test: ## Run all tests
|
|
go test -v ./pkg/...
|
|
|
|
test-race: ## Run tests with race detector
|
|
go test -race -v ./pkg/...
|
|
|
|
test-coverage: ## Run tests with coverage
|
|
go test -coverprofile=coverage.out ./pkg/...
|
|
go tool cover -html=coverage.out -o coverage.html
|
|
|
|
lint: ## Run linter
|
|
golangci-lint run
|
|
|
|
fmt: ## Format code
|
|
go fmt ./...
|
|
goimports -w .
|
|
|
|
vet: ## Run go vet
|
|
go vet ./...
|
|
|
|
# Installation
|
|
install: ## Install for current platform
|
|
go install $(LDFLAGS) .
|
|
|
|
uninstall: ## Uninstall
|
|
go clean -i
|
|
|
|
# Distribution
|
|
release: clean build-all ## Create release packages
|
|
@echo "Creating release packages..."
|
|
@mkdir -p release
|
|
@for arch in amd64 arm64 386 arm; do \
|
|
binary_name=$(BINARY_NAME)-$$arch; \
|
|
release_name=$(BINARY_NAME)-$(VERSION)-$$arch; \
|
|
release_dir=release/$$release_name; \
|
|
mkdir -p $$release_dir; \
|
|
cp dist/$$arch/$$binary_name $$release_dir/$(BINARY_NAME); \
|
|
cp README.md $$release_dir/ 2>/dev/null || true; \
|
|
cp LICENSE $$release_dir/ 2>/dev/null || true; \
|
|
cd release && tar -czf $$release_name.tar.gz $$release_name && cd ..; \
|
|
echo "Created $$release_name.tar.gz"; \
|
|
done
|
|
|
|
# Docker
|
|
docker-build: ## Build Docker image
|
|
docker build -t zsvo:$(VERSION) .
|
|
|
|
docker-run: ## Run Docker container
|
|
docker run -it --rm zsvo:$(VERSION)
|
|
|
|
# Cleanup
|
|
clean: ## Clean build artifacts
|
|
@echo "Cleaning build artifacts..."
|
|
rm -rf bin/
|
|
rm -rf dist/
|
|
rm -rf release/
|
|
rm -f coverage.out coverage.html
|
|
go clean -cache
|
|
|
|
# Development helpers
|
|
dev-setup: ## Setup development environment
|
|
@echo "Setting up development environment..."
|
|
go install golang.org/x/tools/cmd/goimports@latest
|
|
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
|
|
|
pre-commit: fmt vet lint test ## Run pre-commit checks
|
|
|
|
# Quick build for current platform
|
|
quick: ## Quick build for current platform (no optimizations)
|
|
go build -o bin/$(BINARY_NAME) .
|
|
|
|
# Optimized build
|
|
optimized: ## Build with optimizations for current platform
|
|
go build -ldflags "-s -w" -o bin/$(BINARY_NAME) .
|
|
|
|
# Check for required tools
|
|
check-tools:
|
|
@echo "Checking for required tools..."
|
|
@command -v go >/dev/null 2>&1 || { echo "Go is required but not installed."; exit 1; }
|
|
@echo "All required tools are installed."
|
|
|
|
# Show build info
|
|
info: ## Show build information
|
|
@echo "Binary: $(BINARY_NAME)"
|
|
@echo "Version: $(VERSION)"
|
|
@echo "Build Time: $(BUILD_TIME)"
|
|
@echo "Go Version: $(shell go version)"
|
|
@echo "Supported Platforms: $(PLATFORMS)"
|