Newer
Older
EnvoyControlPlane / Makefile
# Project settings
APP_NAME := xds-server
PKG := ./...
BIN_DIR := bin
BIN := $(BIN_DIR)/$(APP_NAME)

# Docker settings
DOCKER_REGISTRY ?= docker.jerxie.com/
DOCKER_TAG ?= latest
DOCKER_IMAGE := $(DOCKER_REGISTRY)$(APP_NAME)
DOCKER_FULL_TAG := $(DOCKER_IMAGE):$(DOCKER_TAG)

# Go build settings
GO       ?= go
GOFLAGS  ?=
LDFLAGS  := -s -w

# Default target
.PHONY: all
all: build

# --------------------------------------------------------------------------------------------------

## Build binary
.PHONY: build
build:
	@echo "==> Building $(APP_NAME)..."
	@mkdir -p $(BIN_DIR)
	$(GO) build $(GOFLAGS) -ldflags "$(LDFLAGS)" -o $(BIN) .

## Run directly (default port 18000, override with PORT env var)
.PHONY: run
run:
	@echo "==> Running $(APP_NAME)..."
	@$(GO) run . --port=$${PORT:-18000} --nodeID=test-id

## Run tests
.PHONY: test
test:
	@echo "==> Running tests..."
	$(GO) test -v $(PKG)

## Lint (basic formatting + vet)
.PHONY: lint
lint:
	@echo "==> Running go fmt and go vet..."
	@$(GO) fmt $(PKG)
	@$(GO) vet $(PKG)

## Clean up build artifacts
.PHONY: clean
clean: docker-clean
	@echo "==> Cleaning build artifacts..."
	rm -rf $(BIN_DIR)

## Install deps (tidy)
.PHONY: deps
deps:
	@echo "==> Downloading dependencies..."
	$(GO) mod tidy

# --------------------------------------------------------------------------------------------------

## Build Docker image
.PHONY: dockerbuild
dockerbuild:
	@echo "==> Building Docker image: $(DOCKER_FULL_TAG)"
	docker build -t $(DOCKER_FULL_TAG) .

## Push Docker image
.PHONY: dockerpush
dockerpush:
	@echo "==> Pushing Docker image: $(DOCKER_FULL_TAG)"
	sudo docker push $(DOCKER_FULL_TAG)

## Clean up Docker images (removes the latest tag of the built image)
.PHONY: docker-clean
docker-clean:
	@echo "==> Removing local Docker image: $(DOCKER_IMAGE):latest"
	-docker rmi $(DOCKER_IMAGE):latest 2> /dev/null || true