140 lines
3.4 KiB
YAML
140 lines
3.4 KiB
YAML
version: "3"
|
||
|
||
vars:
|
||
FRONTEND_DIR: web/frontend
|
||
BIN_DIR: bin
|
||
SERVER_NAME: server
|
||
|
||
# --- 全局 Git 信息 (关键修复:放这里才能被所有子任务读取) ---
|
||
GIT_AUTHOR: zhilv666
|
||
GIT_EMAIL: zhilv666@qq.com
|
||
VERSION:
|
||
sh: git describe --tags --always --dirty 2>/dev/null || echo "dev"
|
||
BUILD_TIME:
|
||
sh: date '+%Y-%m-%d %H:%M:%S'
|
||
GIT_COMMIT:
|
||
sh: git rev-parse --short HEAD 2>/dev/null || echo "unknown"
|
||
|
||
# --- 全局注入参数 (关键修复) ---
|
||
LDFLAGS: >-
|
||
-s -w
|
||
-X "ckwk/internal/conf.Version={{.VERSION}}"
|
||
-X "ckwk/internal/conf.BuildAt={{.BUILD_TIME}}"
|
||
-X "ckwk/internal/conf.GitAuthor={{.GIT_AUTHOR}}"
|
||
-X "ckwk/internal/conf.GitEmail={{.GIT_EMAIL}}"
|
||
-X "ckwk/internal/conf.GitCommit={{.GIT_COMMIT}}"
|
||
|
||
tasks:
|
||
# ======================
|
||
# 🎨 前端
|
||
# ======================
|
||
|
||
fe:install:
|
||
desc: 安装前端依赖 📦
|
||
dir: "{{.FRONTEND_DIR}}"
|
||
cmds:
|
||
- pnpm install
|
||
|
||
fe:dev:
|
||
desc: 启动前端开发服务器 🚀
|
||
dir: "{{.FRONTEND_DIR}}"
|
||
cmds:
|
||
- pnpm dev
|
||
|
||
fe:build:
|
||
desc: 构建前端 🏗️
|
||
dir: "{{.FRONTEND_DIR}}"
|
||
cmds:
|
||
- pnpm build
|
||
|
||
fe:clean:
|
||
desc: 清理前端构建产物 🧹
|
||
dir: "{{.FRONTEND_DIR}}"
|
||
cmds:
|
||
- rm -rf dist
|
||
|
||
# ======================
|
||
# ⚙️ 后端
|
||
# ======================
|
||
|
||
be:run:
|
||
desc: 启动后端服务 🧠
|
||
cmds:
|
||
- go run ./cmd
|
||
|
||
be:build:
|
||
desc: 构建后端二进制 🔨
|
||
cmds:
|
||
- mkdir -p {{.BIN_DIR}}
|
||
- go build -o {{.BIN_DIR}}/{{.SERVER_NAME}} ./cmd
|
||
|
||
# ======================
|
||
# 🔄 开发 / 构建流程
|
||
# ======================
|
||
|
||
dev:
|
||
desc: 同时启动前后端(开发模式)🔥
|
||
cmds:
|
||
- task fe:dev &
|
||
- task be:run
|
||
|
||
dev:be:
|
||
desc: 只启动后端(配合前端 dev)⚡
|
||
cmds:
|
||
- go run ./cmd
|
||
|
||
build:
|
||
desc: 构建前端 + 后端 📦
|
||
cmds:
|
||
- task fe:build
|
||
- task be:build
|
||
|
||
rebuild:
|
||
desc: 清理并重建 🔁
|
||
cmds:
|
||
- task fe:clean
|
||
- task build
|
||
|
||
# ======================
|
||
# 🚀 生产构建
|
||
# ======================
|
||
|
||
release:
|
||
desc: 构建多平台二进制 🌍
|
||
vars:
|
||
MODE: -X "ckwk/internal/conf.Mode=release"
|
||
cmds:
|
||
- task fe:build
|
||
- mkdir -p {{.BIN_DIR}}
|
||
|
||
# 🐧 Linux
|
||
- CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags '{{.LDFLAGS}} {{.MODE}}' -o {{.BIN_DIR}}/{{.SERVER_NAME}}-linux-amd64 ./cmd
|
||
|
||
# 🪟 Windows
|
||
- CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags '{{.LDFLAGS}} {{.MODE}}' -o {{.BIN_DIR}}/{{.SERVER_NAME}}-windows-amd64.exe ./cmd
|
||
|
||
# --- 压缩任务 (优化版) ---
|
||
upx:
|
||
desc: "压缩二进制文件 (智能跳过 macOS 和 Windows ARM)"
|
||
cmds:
|
||
- echo "* 开始压缩处理..."
|
||
- |
|
||
if ! command -v upx > /dev/null 2>&1; then
|
||
echo "⚠️ 未找到 UPX,跳过压缩。"
|
||
exit 0
|
||
fi
|
||
|
||
for file in {{.BIN_DIR}}/*; do
|
||
[ -f "$file" ] || continue
|
||
|
||
if [[ "$file" == *"darwin"* ]]; then
|
||
echo "* [SKIP] 跳过 macOS: $(basename $file)"
|
||
elif [[ "$file" == *"windows_arm"* ]]; then
|
||
echo "* [SKIP] 跳过 Win ARM: $(basename $file)"
|
||
else
|
||
echo "* [UPX] 压缩: $(basename $file)"
|
||
upx --best --lzma "$file" >/dev/null 2>&1 || echo " ⚠️ 失败: $file"
|
||
fi
|
||
done
|
||
silent: true
|