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: # ====================== # 🔁 Git / Submodule # ====================== fe:sync: desc: 同步前端 submodule 🔁 cmds: - git submodule update --init --recursive {{.FRONTEND_DIR}} fe:update: desc: 拉取前端 submodule 最新提交 ⬆️ cmds: - git submodule update --init --remote --recursive {{.FRONTEND_DIR}} # ====================== # 🎨 前端 # ====================== fe:install: desc: 安装前端依赖 📦 deps: [fe:sync] dir: "{{.FRONTEND_DIR}}" cmds: - pnpm install fe:dev: desc: 启动前端开发服务器 🚀 deps: [fe:sync] dir: "{{.FRONTEND_DIR}}" cmds: - pnpm dev fe:build: desc: 构建前端 🏗️ deps: [fe:sync] 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