Files
email_agent/Makefile

53 lines
1.4 KiB
Makefile

# Email Agent — developer commands.
#
# Go is not installed on the host in every environment; the docker-* targets
# run the same commands inside the pinned golang image.
GO ?= go
IMAGE ?= email-agent:dev
PKG := ./...
.PHONY: help tidy fmt vet build test run clean docker-build docker-up docker-down docker-logs docker-test
help: ## List targets
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN{FS=":.*?## "}{printf " %-16s %s\n", $$1, $$2}'
tidy: ## Sync go.mod/go.sum
$(GO) mod tidy
fmt: ## Format Go sources
$(GO) fmt $(PKG)
vet: ## Run go vet
$(GO) vet $(PKG)
build: ## Build the binary into ./bin
CGO_ENABLED=0 $(GO) build -trimpath -o bin/email-agent ./cmd/email-agent
test: ## Run tests
$(GO) test $(PKG)
run: ## Run locally with defaults (db in ./data)
$(GO) run ./cmd/email-agent
clean: ## Remove build artifacts
rm -rf bin data
# --- Docker (works without a host Go toolchain) ----------------------------
docker-build: ## Build the container image
docker build -t $(IMAGE) .
docker-up: ## Start the stack
docker compose up -d --build
docker-down: ## Stop the stack
docker compose down
docker-logs: ## Follow logs
docker compose logs -f
docker-test: ## Run go build + vet + test inside the golang image
docker run --rm -v "$(CURDIR)":/src -w /src -e CGO_ENABLED=0 golang:1.25-alpine \
sh -c "apk add --no-cache git >/dev/null && go mod download && go build $(PKG) && go vet $(PKG) && go test $(PKG)"