zsvo/Makefile
2026-03-13 15:18:31 +03:00

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)"