101 lines
5.6 KiB
Makefile
101 lines
5.6 KiB
Makefile
SHELL := /bin/sh
|
||
PROJECT_NAME := agent
|
||
|
||
.PHONY: build build-linux build-darwin build-windows run agent test lint docker-clean collectors collectors-darwin collectors-linux collectors-windows
|
||
|
||
build:
|
||
# Платформозависимая сборка агента (как у collectors)
|
||
@mkdir -p ./bin/agent; \
|
||
if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
ARCH=$$(/usr/bin/uname -m | sed 's/x86_64/amd64/; s/arm64/arm64/'); \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=$$ARCH golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/agent-darwin ./src"; \
|
||
else \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=linux -e GOARCH=amd64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/agent ./src"; \
|
||
fi
|
||
|
||
build-darwin:
|
||
# Кросс-сборка darwin (arm64) бинаря агента
|
||
@mkdir -p ./bin/agent; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=arm64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/agent-darwin ./src"
|
||
|
||
build-linux:
|
||
# Кросс-сборка linux (amd64) бинаря агента
|
||
@mkdir -p ./bin/agent; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=linux -e GOARCH=amd64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/agent ./src"
|
||
|
||
build-windows:
|
||
# Кросс-сборка windows (amd64) бинаря агента
|
||
@mkdir -p ./bin/agent; \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=windows -e GOARCH=amd64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/agent.exe ./src"
|
||
|
||
collectors:
|
||
# Сборка коллекторов для текущей платформы (через Docker)
|
||
@mkdir -p ./bin/agent/collectors
|
||
@if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
ARCH=$$(/usr/bin/uname -m | sed 's/x86_64/amd64/; s/arm64/arm64/'); \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=$$ARCH golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/collectors/uptime ./src/collectors/uptime && CGO_ENABLED=0 go build -o ./bin/agent/collectors/macos ./src/collectors/macos"; \
|
||
else \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=linux -e GOARCH=amd64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/collectors/uptime ./src/collectors/uptime && CGO_ENABLED=0 go build -o ./bin/agent/collectors/macos ./src/collectors/macos"; \
|
||
fi
|
||
|
||
collectors-darwin:
|
||
# Кросс-сборка коллекторов для macOS
|
||
@mkdir -p ./bin/agent/collectors
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=arm64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/collectors/uptime-darwin ./src/collectors/uptime && CGO_ENABLED=0 go build -o ./bin/agent/collectors/macos-darwin ./src/collectors/macos"
|
||
|
||
collectors-linux:
|
||
# Кросс-сборка коллекторов для Linux
|
||
@mkdir -p ./bin/agent/collectors
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=linux -e GOARCH=amd64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/collectors/uptime-linux ./src/collectors/uptime && CGO_ENABLED=0 go build -o ./bin/agent/collectors/macos-linux ./src/collectors/macos"
|
||
|
||
collectors-windows:
|
||
# Кросс-сборка коллекторов для Windows
|
||
@mkdir -p ./bin/agent/collectors
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=windows -e GOARCH=amd64 golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && CGO_ENABLED=0 go build -o ./bin/agent/collectors/uptime-windows.exe ./src/collectors/uptime && CGO_ENABLED=0 go build -o ./bin/agent/collectors/macos-windows.exe ./src/collectors/macos"
|
||
|
||
run: collectors
|
||
# На macOS собираем darwin-бинарь в Docker и запускаем на хосте (для доступа к macOS API);
|
||
# на других ОС — полностью в контейнере Linux.
|
||
@if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
mkdir -p ./bin/agent; \
|
||
ARCH=$$(/usr/bin/uname -m | sed 's/x86_64/amd64/; s/arm64/arm64/'); \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace -e GOOS=darwin -e GOARCH=$$ARCH golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && go build -o /workspace/bin/agent/agent-darwin ./src >/dev/null 2>&1"; \
|
||
LOG_LEVEL=error CONFIG_PATH=./bin/agent/config.yaml ./bin/agent/agent-darwin --once --mode stdout | docker run --rm -i ghcr.io/jqlang/jq:latest; \
|
||
else \
|
||
docker run --rm -v $$PWD:/workspace -w /workspace golang:1.22 \
|
||
sh -c "go mod tidy >/dev/null 2>&1 && go build -o /tmp/agent ./src >/dev/null 2>&1 && LOG_LEVEL=error CONFIG_PATH=./bin/agent/config.yaml /tmp/agent --once --mode stdout" | docker run --rm -i ghcr.io/jqlang/jq:latest; \
|
||
fi
|
||
|
||
agent: collectors build
|
||
# Запуск агента с ВСЕМИ собранными коллекторами (не one-shot)
|
||
@if [ "$$(/usr/bin/uname -s)" = "Darwin" ]; then \
|
||
LOG_LEVEL=info CONFIG_PATH=./bin/agent/config.yaml ./bin/agent/agent-darwin --mode stdout; \
|
||
else \
|
||
LOG_LEVEL=info CONFIG_PATH=./bin/agent/config.yaml ./bin/agent/agent --mode stdout; \
|
||
fi
|
||
|
||
test:
|
||
# Юнит-тесты в Docker без использования локальной машины
|
||
docker run --rm -v $$PWD:/workspace -w /workspace golang:1.22 \
|
||
sh -c "go test ./..."
|
||
|
||
lint:
|
||
# Линт кода через golangci-lint в Docker
|
||
docker run --rm -v $$PWD:/app -w /app golangci/golangci-lint:latest \
|
||
golangci-lint run --timeout 3m
|
||
|
||
docker-clean:
|
||
docker rmi -f $(PROJECT_NAME):build || true
|
||
|