Files

118 lines
4.4 KiB
Makefile

# 版本号(可通过 make VERSION=1.0.0 指定)
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
# Agent 版本号基于 pkg/agent/ 目录的最后修改提交生成
# 格式:{最近修改 pkg/agent 的提交短hash}
AGENT_VERSION ?= $(shell git log -1 --format=%h -- pkg/agent 2>/dev/null || echo "dev")
GIT_REVISION=$(shell git rev-parse HEAD)
GO_VERSION=$(shell go version)
BUILD_TIME=$(shell date +%Y-%m-%d_%H:%M:%S)
# UPX 默认使用快速压缩。可通过 make UPX_FLAGS=... 覆盖。
UPX_FLAGS ?=
# Go 构建参数
LDFLAGS=-s -w -X 'github.com/pika-monitor/pika/pkg/version.Version=$(VERSION)' -X 'github.com/pika-monitor/pika/pkg/version.AgentVersion=$(AGENT_VERSION)'
AGENT_LDFLAGS=-s -w -X 'github.com/pika-monitor/pika/pkg/version.Version=$(VERSION)' -X 'github.com/pika-monitor/pika/pkg/version.AgentVersion=$(AGENT_VERSION)'
GOFLAGS=CGO_ENABLED=0
# 默认主题已拆分到独立仓库。本地默认使用同级目录,CI 会显式传入 checkout 目录。
DEFAULT_THEME_DIR ?= ../pika-default-theme
DEFAULT_THEME_OUTPUT_DIR ?= themes/default
.PHONY: build-web build-default-theme
# 构建官方管理前端和独立的默认主题,并组装到统一发布目录。
build-web:
npm ci --prefix web
npm run build --prefix web
$(MAKE) build-default-theme
build-default-theme:
test -f "$(DEFAULT_THEME_DIR)/package-lock.json"
test -f "$(DEFAULT_THEME_DIR)/pika-theme.json"
npm ci --prefix "$(DEFAULT_THEME_DIR)"
npm run build --prefix "$(DEFAULT_THEME_DIR)"
rm -rf "$(DEFAULT_THEME_OUTPUT_DIR)"
mkdir -p "$(DEFAULT_THEME_OUTPUT_DIR)"
cp "$(DEFAULT_THEME_DIR)/pika-theme.json" "$(DEFAULT_THEME_OUTPUT_DIR)/pika-theme.json"
cp -R "$(DEFAULT_THEME_DIR)/dist" "$(DEFAULT_THEME_OUTPUT_DIR)/dist"
# 构建服务端(开发)
build-server:
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="$(LDFLAGS)" -o bin/pika-linux-amd64 cmd/serv/main.go
upx $(UPX_FLAGS) bin/pika-linux-amd64
build-servers:
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="$(LDFLAGS)" -o bin/pika-linux-amd64 cmd/serv/main.go
$(GOFLAGS) GOOS=linux GOARCH=arm64 go build -trimpath -ldflags="$(LDFLAGS)" -o bin/pika-linux-arm64 cmd/serv/main.go
upx $(UPX_FLAGS) bin/pika-linux-amd64
upx $(UPX_FLAGS) bin/pika-linux-arm64
# 构建所有平台的 Agent
build-agents:
@echo "Building agents for all platforms..."
@echo "Server version: $(VERSION)"
@echo "Agent version: $(AGENT_VERSION)"
@mkdir -p bin/agents
# Linux
$(GOFLAGS) GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-linux-amd64 ./cmd/agent
$(GOFLAGS) GOOS=linux GOARCH=arm64 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-linux-arm64 ./cmd/agent
$(GOFLAGS) GOOS=linux GOARCH=arm GOARM=7 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-linux-armv7 ./cmd/agent
$(GOFLAGS) GOOS=linux GOARCH=loong64 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-linux-loong64 ./cmd/agent
# macOS
$(GOFLAGS) GOOS=darwin GOARCH=amd64 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-darwin-amd64 ./cmd/agent
$(GOFLAGS) GOOS=darwin GOARCH=arm64 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-darwin-arm64 ./cmd/agent
# Windows
$(GOFLAGS) GOOS=windows GOARCH=amd64 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-windows-amd64.exe ./cmd/agent
$(GOFLAGS) GOOS=windows GOARCH=arm64 go build -trimpath -ldflags="$(AGENT_LDFLAGS)" -o bin/agents/pika-agent-windows-arm64.exe ./cmd/agent
@echo "All agents built successfully!"
@echo "Compressing agents with UPX..."
@upx $(UPX_FLAGS) bin/agents/pika-agent-linux-amd64
@upx $(UPX_FLAGS) bin/agents/pika-agent-linux-arm64
@upx $(UPX_FLAGS) bin/agents/pika-agent-linux-armv7
@echo "All agents compressed successfully!"
@ls -lh bin/agents/
# 构建所有(release版本)
build-release:
$(MAKE) build-web
$(MAKE) build-agents
$(MAKE) build-servers
# 清理编译产物
clean:
rm -rf bin/*
rm -rf web/dist
rm -rf themes/default
# 运行测试
test:
go test -v ./...
# 代码格式化
fmt:
go fmt ./...
# 代码检查
lint:
golangci-lint run
# 生成 Wire 代码
wire:
cd internal && wire
# 显示版本信息
version:
@echo "Server Version: $(VERSION)"
@echo "Agent Version: $(AGENT_VERSION)"
@echo "Git Revision: $(GIT_REVISION)"
@echo "Go Version: $(GO_VERSION)"
@echo "Build Time: $(BUILD_TIME)"