|
| 1 | +# MaaS Billing Makefile |
| 2 | + |
| 3 | +# Container Engine to be used for building image and with kind |
| 4 | +CONTAINER_ENGINE ?= docker |
| 5 | +ifeq (podman,$(CONTAINER_ENGINE)) |
| 6 | + CONTAINER_ENGINE_EXTRA_FLAGS ?= --load |
| 7 | +endif |
| 8 | + |
| 9 | +# Image settings |
| 10 | +REPO ?= ghcr.io/your-org/maas-key-manager |
| 11 | +TAG ?= latest |
| 12 | +FULL_IMAGE ?= $(REPO):$(TAG) |
| 13 | + |
| 14 | +# Key Manager settings |
| 15 | +KEY_MANAGER_DIR := deployment/kuadrant-openshift/key-manager |
| 16 | +BINARY_NAME := key-manager |
| 17 | +BUILD_DIR := ./bin |
| 18 | +CMD_DIR := $(KEY_MANAGER_DIR)/cmd/key-manager |
| 19 | + |
| 20 | +# Go settings |
| 21 | +GO_VERSION := 1.24.2 |
| 22 | +GOOS ?= linux |
| 23 | +GOARCH ?= amd64 |
| 24 | +CGO_ENABLED ?= 0 |
| 25 | + |
| 26 | +# Git settings |
| 27 | +GIT_COMMIT := $(shell git rev-parse --short HEAD) |
| 28 | +GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) |
| 29 | +BUILD_TIME := $(shell date -u '+%Y-%m-%d_%H:%M:%S') |
| 30 | + |
| 31 | +# Ldflags for build info |
| 32 | +LDFLAGS := -ldflags "-s -w -X main.version=$(TAG) -X main.commit=$(GIT_COMMIT) -X main.buildTime=$(BUILD_TIME)" |
| 33 | + |
| 34 | +.PHONY: help |
| 35 | +help: ## Show this help message |
| 36 | + @echo "MaaS Billing Makefile" |
| 37 | + @echo "" |
| 38 | + @echo "Usage: make <target> [REPO=your-repo] [TAG=your-tag]" |
| 39 | + @echo "" |
| 40 | + @echo "Examples:" |
| 41 | + @echo " make build-image REPO=ghcr.io/myorg/key-manager TAG=v1.0.0" |
| 42 | + @echo " make push-image REPO=ghcr.io/myorg/key-manager TAG=latest" |
| 43 | + @echo "" |
| 44 | + @echo "Targets:" |
| 45 | + @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " %-20s %s\n", $$1, $$2}' $(MAKEFILE_LIST) |
| 46 | + |
| 47 | +.PHONY: fmt |
| 48 | +fmt: ## Format Go code using gofmt |
| 49 | + @echo "Formatting Go code..." |
| 50 | + @cd $(KEY_MANAGER_DIR) && gofmt -s -w . |
| 51 | + @echo "Code formatting complete" |
| 52 | + |
| 53 | +.PHONY: fmt-check |
| 54 | +fmt-check: ## Check if Go code is formatted |
| 55 | + @echo "Checking Go code formatting..." |
| 56 | + @cd $(KEY_MANAGER_DIR) && if [ -n "$$(gofmt -l .)" ]; then \ |
| 57 | + echo "The following files need formatting:"; \ |
| 58 | + gofmt -l .; \ |
| 59 | + exit 1; \ |
| 60 | + fi |
| 61 | + @echo "All Go code is properly formatted" |
| 62 | + |
| 63 | +.PHONY: vet |
| 64 | +vet: ## Run go vet |
| 65 | + @echo "Running go vet..." |
| 66 | + @cd $(KEY_MANAGER_DIR) && go vet ./... |
| 67 | + |
| 68 | +.PHONY: lint |
| 69 | +lint: fmt-check vet ## Run all linting checks |
| 70 | + @echo "All linting checks passed" |
| 71 | + |
| 72 | +.PHONY: tidy |
| 73 | +tidy: ## Tidy Go modules |
| 74 | + @echo "Tidying Go modules..." |
| 75 | + @cd $(KEY_MANAGER_DIR) && go mod tidy |
| 76 | + @cd $(KEY_MANAGER_DIR) && go mod verify |
| 77 | + |
| 78 | +.PHONY: deps |
| 79 | +deps: ## Download Go dependencies |
| 80 | + @echo "Downloading Go dependencies..." |
| 81 | + @cd $(KEY_MANAGER_DIR) && go mod download |
| 82 | + |
| 83 | +.PHONY: build |
| 84 | +build: fmt deps ## Build the key-manager binary |
| 85 | + @echo "Building $(BINARY_NAME)..." |
| 86 | + @mkdir -p $(BUILD_DIR) |
| 87 | + @cd $(KEY_MANAGER_DIR) && CGO_ENABLED=$(CGO_ENABLED) GOOS=$(GOOS) GOARCH=$(GOARCH) go build $(LDFLAGS) -o ../../$(BUILD_DIR)/$(BINARY_NAME) ./cmd/key-manager |
| 88 | + @echo "Built $(BUILD_DIR)/$(BINARY_NAME)" |
| 89 | + |
| 90 | +.PHONY: test |
| 91 | +test: ## Run Go tests |
| 92 | + @echo "Running tests..." |
| 93 | + @cd $(KEY_MANAGER_DIR) && go test -v -race -coverprofile=coverage.out ./... |
| 94 | + @cd $(KEY_MANAGER_DIR) && go tool cover -html=coverage.out -o coverage.html |
| 95 | + @echo "Test coverage report generated: $(KEY_MANAGER_DIR)/coverage.html" |
| 96 | + |
| 97 | +.PHONY: test-short |
| 98 | +test-short: ## Run Go tests (short mode) |
| 99 | + @echo "Running tests (short mode)..." |
| 100 | + @cd $(KEY_MANAGER_DIR) && go test -short -v ./... |
| 101 | + |
| 102 | +.PHONY: build-image |
| 103 | +build-image: ## Build container image (use REPO= and TAG= to specify image) |
| 104 | + @if [ -z "$(REPO)" ]; then \ |
| 105 | + echo "Error: REPO is required. Usage: make build-image REPO=ghcr.io/myorg/key-manager"; \ |
| 106 | + exit 1; \ |
| 107 | + fi |
| 108 | + @echo "Building container image $(FULL_IMAGE)..." |
| 109 | + @cd $(KEY_MANAGER_DIR) && $(CONTAINER_ENGINE) build $(CONTAINER_ENGINE_EXTRA_FLAGS) -t $(FULL_IMAGE) . |
| 110 | + @echo "Container image $(FULL_IMAGE) built successfully" |
| 111 | + |
| 112 | +.PHONY: push-image |
| 113 | +push-image: ## Push container image (use REPO= and TAG= to specify image) |
| 114 | + @if [ -z "$(REPO)" ]; then \ |
| 115 | + echo "Error: REPO is required. Usage: make push-image REPO=ghcr.io/myorg/key-manager"; \ |
| 116 | + exit 1; \ |
| 117 | + fi |
| 118 | + @echo "Pushing container image $(FULL_IMAGE)..." |
| 119 | + @$(CONTAINER_ENGINE) push $(FULL_IMAGE) |
| 120 | + @echo "Container image $(FULL_IMAGE) pushed successfully" |
| 121 | + |
| 122 | +.PHONY: build-push-image |
| 123 | +build-push-image: build-image push-image ## Build and push container image |
| 124 | + |
| 125 | +.PHONY: run |
| 126 | +run: build ## Run the key-manager locally |
| 127 | + @echo "Running $(BINARY_NAME)..." |
| 128 | + @$(BUILD_DIR)/$(BINARY_NAME) |
| 129 | + |
| 130 | +.PHONY: version |
| 131 | +version: ## Show version information |
| 132 | + @echo "Image: $(FULL_IMAGE)" |
| 133 | + @echo "Git Commit: $(GIT_COMMIT)" |
| 134 | + @echo "Git Branch: $(GIT_BRANCH)" |
| 135 | + @echo "Build Time: $(BUILD_TIME)" |
| 136 | + @echo "Go Version: $(GO_VERSION)" |
| 137 | + |
| 138 | +# Default target |
| 139 | +.DEFAULT_GOAL := help |
| 140 | + |
0 commit comments