# 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