# 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