-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
188 lines (161 loc) · 5.31 KB
/
Makefile
File metadata and controls
188 lines (161 loc) · 5.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# Makefile for qoder-logout
BINARY_NAME=qoder-logout
MAIN_FILE=main.go
# 版本信息
VERSION ?= $(shell git describe --tags --always --dirty)
COMMIT ?= $(shell git rev-parse HEAD)
DATE ?= $(shell date -u '+%Y-%m-%d_%H:%M:%S')
BUILT_BY ?= makefile
# Go 相关变量
GOCMD=go
GOBUILD=$(GOCMD) build
GOCLEAN=$(GOCMD) clean
GOTEST=$(GOCMD) test
GOGET=$(GOCMD) get
GOMOD=$(GOCMD) mod
# 构建标志
LDFLAGS=-ldflags="-s -w -X main.version=$(VERSION) -X main.commit=$(COMMIT) -X main.date=$(DATE) -X main.builtBy=$(BUILT_BY)"
BUILD_FLAGS=$(LDFLAGS)
# CGO 设置 (用于 sqlite3)
export CGO_ENABLED=1
.PHONY: all build clean test deps install uninstall help version
.PHONY: goreleaser-check goreleaser-install goreleaser-snapshot goreleaser-release
.PHONY: release-prepare release-tag release-dry build-all
# 默认目标
all: deps build
# 显示版本信息
version:
@echo "项目: $(BINARY_NAME)"
@echo "版本: $(VERSION)"
@echo "提交: $(COMMIT)"
@echo "构建时间: $(DATE)"
# 构建二进制文件
build:
@echo "构建 $(BINARY_NAME)..."
$(GOBUILD) $(BUILD_FLAGS) -o $(BINARY_NAME) $(MAIN_FILE)
@echo "构建完成: $(BINARY_NAME)"
# 清理构建文件
clean:
@echo "清理构建文件..."
$(GOCLEAN)
rm -f $(BINARY_NAME)
@echo "清理完成"
# 运行测试
test:
@echo "运行测试..."
$(GOTEST) -v ./...
# 安装依赖
deps:
@echo "安装依赖..."
$(GOMOD) tidy
$(GOMOD) download
# 安装到系统
install: build
@echo "安装 $(BINARY_NAME) 到系统..."
cp $(BINARY_NAME) /usr/local/bin/$(BINARY_NAME)
@echo "安装完成,现在可以使用 '$(BINARY_NAME)' 命令"
# 从系统卸载
uninstall:
@echo "从系统卸载 $(BINARY_NAME)..."
rm -f /usr/local/bin/$(BINARY_NAME)
@echo "卸载完成"
# 构建多平台版本
build-all:
@echo "构建多平台版本..."
GOOS=darwin GOARCH=amd64 $(GOBUILD) $(BUILD_FLAGS) -o $(BINARY_NAME)-darwin-amd64 $(MAIN_FILE)
GOOS=darwin GOARCH=arm64 $(GOBUILD) $(BUILD_FLAGS) -o $(BINARY_NAME)-darwin-arm64 $(MAIN_FILE)
GOOS=linux GOARCH=amd64 $(GOBUILD) $(BUILD_FLAGS) -o $(BINARY_NAME)-linux-amd64 $(MAIN_FILE)
GOOS=windows GOARCH=amd64 $(GOBUILD) $(BUILD_FLAGS) -o $(BINARY_NAME)-windows-amd64.exe $(MAIN_FILE)
@echo "多平台构建完成"
# 运行程序
run: build
@echo "运行 $(BINARY_NAME)..."
./$(BINARY_NAME)
# GoReleaser 相关命令
# 安装 GoReleaser
goreleaser-install:
@echo "安装 GoReleaser..."
@if ! command -v goreleaser >/dev/null 2>&1; then \
echo "GoReleaser 未安装,正在安装..."; \
go install github.com/goreleaser/goreleaser@latest; \
else \
echo "GoReleaser 已安装: $$(goreleaser --version)"; \
fi
# 检查 GoReleaser 配置
goreleaser-check: goreleaser-install
@echo "检查 GoReleaser 配置..."
goreleaser check
@echo "配置检查完成"
# 构建快照版本
goreleaser-snapshot: goreleaser-install
@echo "构建快照版本..."
goreleaser release --snapshot --clean
@echo "快照版本构建完成,查看 dist/ 目录"
# 模拟发布流程
goreleaser-dry: goreleaser-install
@echo "模拟发布流程..."
goreleaser release --skip-publish --clean
@echo "模拟发布完成"
# 正式发布(需要 GITHUB_TOKEN)
goreleaser-release: goreleaser-install
@echo "正式发布..."
@if [ -z "$$GITHUB_TOKEN" ]; then \
echo "错误: 需要设置 GITHUB_TOKEN 环境变量"; \
exit 1; \
fi
goreleaser release --clean
@echo "发布完成"
# 显示帮助信息
help:
@echo "可用的 make 目标:"
@echo " all - 安装依赖并构建"
@echo " version - 显示版本信息"
@echo " build - 构建二进制文件"
@echo " clean - 清理构建文件"
@echo " test - 运行测试"
@echo " deps - 安装依赖"
@echo " install - 安装到系统 (/usr/local/bin)"
@echo " uninstall - 从系统卸载"
@echo " build-all - 构建多平台版本 (传统方式)"
@echo " run - 构建并运行"
@echo ""
@echo " GoReleaser 相关:"
@echo " goreleaser-install - 安装 GoReleaser 工具"
@echo " goreleaser-check - 检查 GoReleaser 配置"
@echo " goreleaser-snapshot - 构建快照版本 (使用 GoReleaser)"
@echo " goreleaser-dry - 模拟发布流程"
@echo " goreleaser-release - 正式发布 (需要 GITHUB_TOKEN)"
@echo ""
@echo " 版本管理:"
@echo " release-prepare - 准备发布 (测试+清理+检查)"
@echo " release-tag - 创建版本标签"
@echo " release-clean - 清理发布文件"
@echo " help - 显示此帮助信息"
# 版本管理和发布准备
# 准备发布(检查代码、测试、清理)
release-prepare:
@echo "准备发布..."
$(GOMOD) tidy
@echo "运行测试..."
$(GOTEST) -v ./...
@echo "清理构建文件..."
$(MAKE) clean
@echo "检查 GoReleaser 配置..."
$(MAKE) goreleaser-check
@echo "发布准备完成"
# 创建版本标签
release-tag:
@echo "创建版本标签..."
@read -p "请输入版本号 (e.g., v1.0.0): " version; \
if [ -z "$$version" ]; then \
echo "错误: 版本号不能为空"; \
exit 1; \
fi; \
echo "创建标签: $$version"; \
git tag -a "$$version" -m "Release $$version"; \
echo "标签已创建,使用 'git push origin $$version' 推送到远程仓库"
# 清理发布文件
release-clean:
@echo "清理发布文件..."
rm -rf dist/
@echo "清理完成"