bachelor-thesis/scenario_generator/Makefile

94 lines
3 KiB
Makefile

.PHONY: help build test clean install run release lint fmt vet
# Variablen
BINARY_NAME=scenario-generator
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}"
GO=go
GOFLAGS=-v
GOOS?=$(shell go env GOOS)
GOARCH?=$(shell go env GOARCH)
# Farben für Output
COLOR_RESET=\033[0m
COLOR_BOLD=\033[1m
COLOR_GREEN=\033[32m
COLOR_YELLOW=\033[33m
help: ## Zeige diese Hilfe
@echo "$(COLOR_BOLD)Thesis Scenario Generator - Makefile$(COLOR_RESET)"
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(COLOR_GREEN)%-15s$(COLOR_RESET) %s\n", $$1, $$2}'
@echo ""
build: ## Baue das Binary
@echo "$(COLOR_BOLD)Building $(BINARY_NAME) $(VERSION)...$(COLOR_RESET)"
CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) $(GO) build $(GOFLAGS) $(LDFLAGS) -o $(BINARY_NAME) .
@echo "$(COLOR_GREEN)✓ Build erfolgreich: $(BINARY_NAME)$(COLOR_RESET)"
build-linux: ## Baue für Linux (amd64)
@echo "$(COLOR_BOLD)Building for Linux...$(COLOR_RESET)"
GOOS=linux GOARCH=amd64 $(MAKE) build
@mv $(BINARY_NAME) $(BINARY_NAME)-linux-amd64
build-all: build-linux ## Baue für alle Plattformen
@echo "$(COLOR_GREEN)✓ Alle Builds abgeschlossen$(COLOR_RESET)"
test: ## Führe Tests aus
@echo "$(COLOR_BOLD)Running tests...$(COLOR_RESET)"
$(GO) test -v -race -coverprofile=coverage.out ./...
@echo "$(COLOR_GREEN)✓ Tests erfolgreich$(COLOR_RESET)"
coverage: test ## Zeige Test-Coverage
$(GO) tool cover -html=coverage.out
lint: ## Führe Linting aus (benötigt golangci-lint)
@echo "$(COLOR_BOLD)Running linter...$(COLOR_RESET)"
@if command -v golangci-lint >/dev/null 2>&1; then \
golangci-lint run ./...; \
else \
echo "$(COLOR_YELLOW)⚠ golangci-lint nicht installiert. Überspringe...$(COLOR_RESET)"; \
fi
fmt: ## Formatiere Code
@echo "$(COLOR_BOLD)Formatting code...$(COLOR_RESET)"
$(GO) fmt ./...
@echo "$(COLOR_GREEN)✓ Code formatiert$(COLOR_RESET)"
vet: ## Führe go vet aus
@echo "$(COLOR_BOLD)Running go vet...$(COLOR_RESET)"
$(GO) vet ./...
@echo "$(COLOR_GREEN)✓ Vet erfolgreich$(COLOR_RESET)"
clean:
@echo "$(COLOR_BOLD)Cleaning...$(COLOR_RESET)"
rm -f $(BINARY_NAME)
rm -f $(BINARY_NAME)-*
rm -f coverage.out
@echo "$(COLOR_GREEN)✓ Cleanup abgeschlossen$(COLOR_RESET)"
install: build
@echo "$(COLOR_BOLD)Installing to /usr/local/bin...$(COLOR_RESET)"
sudo cp $(BINARY_NAME) /usr/local/bin/
sudo chmod +x /usr/local/bin/$(BINARY_NAME)
@echo "$(COLOR_GREEN)✓ Installation abgeschlossen$(COLOR_RESET)"
run: build
@echo "$(COLOR_BOLD)Running $(BINARY_NAME)...$(COLOR_RESET)"
./$(BINARY_NAME)
# Release
release: clean fmt vet test build-all ## Erstelle Release (build, test, fmt)
@echo "$(COLOR_GREEN)✓ Release $(VERSION) bereit$(COLOR_RESET)"
@echo ""
@echo "Binaries:"
@ls -lh $(BINARY_NAME)-*
# Development
dev: fmt vet run
check: fmt vet test lint
# Default target
.DEFAULT_GOAL := help