deb-bootc-compose/Makefile
robojerk cca68c90f6 Add comprehensive phase system, types, and treefile support for deb-bootc-compose
- Add internal/phases/ with complete phase management system
- Add internal/types/ with core data structures
- Add internal/treefile/ for OSTree treefile generation
- Update examples with YAML configurations
- Update .gitignore to properly exclude test artifacts and build outputs
- Update dependencies and configuration files
2025-08-19 20:48:46 -07:00

122 lines
3.2 KiB
Makefile

# Makefile for deb-bootc-compose
# Debian's equivalent to Fedora's Pungi compose system
.PHONY: all build clean test install help
# Variables
BINARY_NAME=deb-bootc-compose
BUILD_DIR=build
VERSION=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
LDFLAGS=-ldflags "-X main.Version=$(VERSION)"
# Default target
all: build
# Build the binary
build: prepare-build
@echo "Building $(BINARY_NAME)..."
@cd cmd/compose && go build $(LDFLAGS) -o ../../$(BUILD_DIR)/$(BINARY_NAME)
@echo "Build complete: $(BUILD_DIR)/$(BINARY_NAME)"
# Build CLI tool
cli: prepare-build
@echo "Building CLI tool..."
@cd cmd/cli && go build $(LDFLAGS) -o ../../$(BUILD_DIR)/$(BINARY_NAME)-cli
@echo "CLI build complete: $(BUILD_DIR)/$(BINARY_NAME)-cli"
# Prepare build directory
prepare-build: $(BUILD_DIR)
# Create build directory
$(BUILD_DIR):
@mkdir -p $(BUILD_DIR)
# Install dependencies
deps:
@echo "Installing dependencies..."
@go mod download
@go mod tidy
# Run tests
test:
@echo "Running tests..."
@go test ./...
# Run tests with coverage
test-coverage:
@echo "Running tests with coverage..."
@go test -coverprofile=coverage.out ./...
@go tool cover -html=coverage.out
# Clean build artifacts
clean:
@echo "Cleaning build artifacts..."
@rm -rf $(BUILD_DIR)
@rm -f coverage.out
@go clean -cache
# Install binary to system
install: build
@echo "Installing $(BINARY_NAME)..."
@sudo cp $(BUILD_DIR)/$(BINARY_NAME) /usr/local/bin/
@echo "Installation complete"
# Uninstall binary from system
uninstall:
@echo "Uninstalling $(BINARY_NAME)..."
@sudo rm -f /usr/local/bin/$(BINARY_NAME)
@echo "Uninstallation complete"
# Run the binary
run: build
@echo "Running $(BINARY_NAME)..."
@./$(BUILD_DIR)/$(BINARY_NAME) --help
# Run with sample treefile
run-sample: build
@echo "Running $(BINARY_NAME) with sample treefile..."
@./$(BUILD_DIR)/$(BINARY_NAME) --treefile examples/debian-bootc-minimal.json --output ./sample-output
# Format code
fmt:
@echo "Formatting code..."
@go fmt ./...
# Lint code
lint:
@echo "Linting code..."
@golangci-lint run
# Generate documentation
docs:
@echo "Generating documentation..."
@mkdir -p docs
@echo "# $(BINARY_NAME) Documentation" > docs/README.md
@echo "" >> docs/README.md
@echo "Generated on: $(shell date)" >> docs/README.md
@echo "Version: $(VERSION)" >> docs/README.md
# Development helpers
dev-setup: deps
@echo "Setting up development environment..."
@go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
@echo "Development environment ready"
# Show help
help:
@echo "Available targets:"
@echo " build - Build the binary"
@echo " cli - Build CLI tool"
@echo " deps - Install dependencies"
@echo " test - Run tests"
@echo " test-coverage- Run tests with coverage"
@echo " clean - Clean build artifacts"
@echo " install - Install binary to system"
@echo " uninstall - Uninstall binary from system"
@echo " run - Run the binary"
@echo " run-sample - Run with sample treefile"
@echo " fmt - Format code"
@echo " lint - Lint code"
@echo " docs - Generate documentation"
@echo " dev-setup - Set up development environment"
@echo " help - Show this help"