53 lines
1.4 KiB
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)"
|