# omnichannel-mcp — сборка, тесты, линт. GO ?= go GOLANGCI_LINT ?= golangci-lint .PHONY: build test fmt lint tidy tidy-check ci demo e2e demo-down # Бинарник модуля. build: $(GO) build -o omnichannel-mcp . # Тесты с race-детектором (основной гейт). test: $(GO) test -race ./... -count=1 # Форматирование. fmt: gofmt -w . # Статический анализ + проверка форматирования. lint: $(GOLANGCI_LINT) run ./... @unformatted=$$(gofmt -l .); \ if [ -n "$$unformatted" ]; then echo "gofmt: нужно форматирование: $$unformatted"; exit 1; fi tidy: $(GO) mod tidy # Проверка, что go.mod/go.sum в tidy-состоянии. tidy-check: @$(GO) mod tidy -diff >/dev/null 2>&1 || { echo "go.mod не tidy — запусти make tidy"; $(GO) mod tidy -diff; exit 1; } @echo "tidy: ok" # Локальный гейт (то же, что CI). ci: build test lint tidy-check # Демо: поднять локальный стенд и прогнать сквозной сценарий. demo: docker compose -f examples/demo/docker-compose.yml up -d $(GO) build -o omnichannel-mcp . python3 examples/demo/demo.py # E2E: то же плюс реальный config-agent, исполняющий задачи деплоя. e2e: docker compose -f examples/demo/docker-compose.yml up -d $(GO) build -o omnichannel-mcp . python3 examples/demo/e2e.py demo-down: docker compose -f examples/demo/docker-compose.yml down -v