mirror of
https://github.com/MatrixSeven/file-transfer-go.git
synced 2026-05-21 21:27:30 +08:00
feat: SSG构建|GO二进制SSG产物打包
This commit is contained in:
263
Makefile
263
Makefile
@@ -1,185 +1,108 @@
|
||||
# Makefile for Chuan File Transfer System
|
||||
# Makefile for File Transfer System (Full Stack)
|
||||
|
||||
# 默认目标
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "可用的命令:"
|
||||
@echo " run - 运行应用程序"
|
||||
@echo " build - 构建应用程序"
|
||||
@echo " clean - 清理构建文件"
|
||||
@echo " deps - 安装依赖"
|
||||
@echo " test - 运行测试"
|
||||
@echo " docker - 构建Docker镜像"
|
||||
.PHONY: build clean run dev frontend backend fullstack help
|
||||
|
||||
# 应用程序名称
|
||||
APP_NAME=chuan
|
||||
BUILD_DIR=build
|
||||
MAIN_FILE=cmd/main.go
|
||||
|
||||
# Go相关命令
|
||||
GO=go
|
||||
GOCMD=$(GO)
|
||||
# 构建参数
|
||||
GOCMD=go
|
||||
GOBUILD=$(GOCMD) build
|
||||
GOCLEAN=$(GOCMD) clean
|
||||
GOTEST=$(GOCMD) test
|
||||
GOGET=$(GOCMD) get
|
||||
GOMOD=$(GOCMD) mod
|
||||
BINARY_NAME=file-transfer-server
|
||||
BINARY_UNIX=$(BINARY_NAME)_unix
|
||||
SCRIPT_DIR=./
|
||||
|
||||
# 构建标志
|
||||
LDFLAGS=-ldflags "-X main.Version=1.0.0 -X main.BuildTime=$$(date +'%Y-%m-%d %H:%M:%S')"
|
||||
# 默认构建 - 完整的前后端
|
||||
build: fullstack
|
||||
|
||||
# 运行应用程序
|
||||
.PHONY: run
|
||||
run:
|
||||
@echo "启动文件传输系统..."
|
||||
@mkdir -p uploads
|
||||
$(GOCMD) run $(MAIN_FILE)
|
||||
# 完整的前后端构建(SSG + Go嵌入)
|
||||
fullstack:
|
||||
@echo "🚀 开始全栈构建..."
|
||||
@$(SCRIPT_DIR)build-fullstack.sh
|
||||
|
||||
# 构建应用程序
|
||||
.PHONY: build
|
||||
build:
|
||||
@echo "构建应用程序..."
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
$(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_FILE)
|
||||
# 开发模式构建
|
||||
dev:
|
||||
@echo "🔧 开发模式构建..."
|
||||
@$(SCRIPT_DIR)build-fullstack.sh --dev --verbose
|
||||
|
||||
# 构建Linux版本
|
||||
.PHONY: build-linux
|
||||
# 只构建前端(SSG)
|
||||
frontend:
|
||||
@echo "🎨 构建前端..."
|
||||
@$(SCRIPT_DIR)build-fullstack.sh --frontend-only
|
||||
|
||||
# 只构建后端(需要前端已构建)
|
||||
backend:
|
||||
@echo "⚙️ 构建后端..."
|
||||
@$(SCRIPT_DIR)build-fullstack.sh --backend-only
|
||||
|
||||
# 传统 Go 构建(不包含嵌入的前端)
|
||||
build-go:
|
||||
@echo "📦 传统 Go 构建..."
|
||||
$(GOBUILD) -o $(BINARY_NAME) -v ./cmd
|
||||
|
||||
# 清理所有构建文件
|
||||
clean:
|
||||
@echo "🧹 清理构建文件..."
|
||||
@$(SCRIPT_DIR)build-fullstack.sh --clean
|
||||
$(GOCLEAN)
|
||||
rm -f $(BINARY_NAME)
|
||||
rm -f $(BINARY_UNIX)
|
||||
|
||||
# 运行应用(先构建)
|
||||
run: build
|
||||
@echo "🚀 启动应用..."
|
||||
./$(BINARY_NAME)
|
||||
|
||||
# 快速运行(使用现有二进制)
|
||||
run-quick:
|
||||
@echo "⚡ 快速启动..."
|
||||
./$(BINARY_NAME)
|
||||
|
||||
# Linux 交叉编译
|
||||
build-linux:
|
||||
@echo "构建Linux版本..."
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
GOOS=linux GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME)-linux $(MAIN_FILE)
|
||||
|
||||
# 构建Windows版本
|
||||
.PHONY: build-windows
|
||||
build-windows:
|
||||
@echo "构建Windows版本..."
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
GOOS=windows GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME)-windows.exe $(MAIN_FILE)
|
||||
|
||||
# 构建MacOS版本
|
||||
.PHONY: build-macos
|
||||
build-macos:
|
||||
@echo "构建MacOS版本..."
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
GOOS=darwin GOARCH=amd64 $(GOBUILD) $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME)-macos $(MAIN_FILE)
|
||||
|
||||
# 构建所有平台版本
|
||||
.PHONY: build-all
|
||||
build-all: build-linux build-windows build-macos
|
||||
@echo "所有平台构建完成"
|
||||
@echo "🐧 Linux 交叉编译..."
|
||||
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 $(GOBUILD) -o $(BINARY_UNIX) -v ./cmd
|
||||
|
||||
# 安装依赖
|
||||
.PHONY: deps
|
||||
deps:
|
||||
@echo "安装Go模块依赖..."
|
||||
$(GOMOD) download
|
||||
$(GOMOD) tidy
|
||||
install-deps:
|
||||
@echo "📦 安装 Go 依赖..."
|
||||
$(GOCMD) mod download
|
||||
$(GOCMD) mod tidy
|
||||
@echo "📦 安装前端依赖..."
|
||||
cd chuan-next && yarn install
|
||||
|
||||
# 运行测试
|
||||
.PHONY: test
|
||||
test:
|
||||
@echo "运行测试..."
|
||||
$(GOTEST) -v ./...
|
||||
|
||||
# 清理构建文件
|
||||
.PHONY: clean
|
||||
clean:
|
||||
@echo "清理构建文件..."
|
||||
$(GOCLEAN)
|
||||
rm -rf $(BUILD_DIR)
|
||||
rm -rf uploads/*
|
||||
|
||||
# 格式化代码
|
||||
.PHONY: fmt
|
||||
fmt:
|
||||
@echo "格式化Go代码..."
|
||||
$(GOCMD) fmt ./...
|
||||
|
||||
# 代码检查
|
||||
.PHONY: vet
|
||||
vet:
|
||||
@echo "运行go vet..."
|
||||
# 检查代码
|
||||
check:
|
||||
@echo "🔍 代码检查..."
|
||||
$(GOCMD) vet ./...
|
||||
$(GOCMD) fmt ./...
|
||||
cd chuan-next && yarn lint
|
||||
|
||||
# 安全检查
|
||||
.PHONY: security
|
||||
security:
|
||||
@echo "运行安全检查..."
|
||||
@which gosec > /dev/null || $(GOGET) github.com/securecodewarrior/gosec/v2/cmd/gosec@latest
|
||||
gosec ./...
|
||||
# 测试
|
||||
test:
|
||||
@echo "🧪 运行测试..."
|
||||
$(GOCMD) test -v ./...
|
||||
|
||||
# 性能测试
|
||||
.PHONY: bench
|
||||
bench:
|
||||
@echo "运行性能测试..."
|
||||
$(GOTEST) -bench=. -benchmem ./...
|
||||
|
||||
# 代码覆盖率
|
||||
.PHONY: coverage
|
||||
coverage:
|
||||
@echo "生成代码覆盖率报告..."
|
||||
$(GOTEST) -coverprofile=coverage.out ./...
|
||||
$(GOCMD) tool cover -html=coverage.out -o coverage.html
|
||||
@echo "覆盖率报告已生成: coverage.html"
|
||||
|
||||
# 创建Docker镜像
|
||||
.PHONY: docker
|
||||
docker:
|
||||
@echo "构建Docker镜像..."
|
||||
docker build -t $(APP_NAME):latest .
|
||||
|
||||
# 运行Docker容器
|
||||
.PHONY: docker-run
|
||||
docker-run:
|
||||
@echo "运行Docker容器..."
|
||||
docker run -p 8080:8080 -v $(PWD)/uploads:/app/uploads $(APP_NAME):latest
|
||||
|
||||
# 开发模式(热重载)
|
||||
.PHONY: dev
|
||||
dev:
|
||||
@echo "启动开发模式(需要安装air)..."
|
||||
@which air > /dev/null || $(GOGET) github.com/cosmtrek/air@latest
|
||||
air
|
||||
|
||||
# 安装开发工具
|
||||
.PHONY: tools
|
||||
tools:
|
||||
@echo "安装开发工具..."
|
||||
$(GOGET) github.com/cosmtrek/air@latest
|
||||
$(GOGET) github.com/securecodewarrior/gosec/v2/cmd/gosec@latest
|
||||
$(GOGET) golang.org/x/tools/cmd/goimports@latest
|
||||
|
||||
# 初始化项目
|
||||
.PHONY: init
|
||||
init: deps tools
|
||||
@echo "项目初始化完成"
|
||||
@mkdir -p uploads
|
||||
@mkdir -p logs
|
||||
@echo "创建必要的目录"
|
||||
|
||||
# 部署到生产环境
|
||||
.PHONY: deploy
|
||||
deploy: build-linux
|
||||
@echo "部署到生产环境..."
|
||||
@echo "请手动将 $(BUILD_DIR)/$(APP_NAME)-linux 上传到服务器"
|
||||
|
||||
# 查看项目状态
|
||||
.PHONY: status
|
||||
status:
|
||||
@echo "项目状态:"
|
||||
@echo " Go版本: $$($(GOCMD) version)"
|
||||
@echo " 项目路径: $$(pwd)"
|
||||
@echo " 模块信息:"
|
||||
@$(GOMOD) list -m all | head -10
|
||||
|
||||
# 生成API文档
|
||||
.PHONY: docs
|
||||
docs:
|
||||
@echo "生成API文档..."
|
||||
@which swag > /dev/null || $(GOGET) github.com/swaggo/swag/cmd/swag@latest
|
||||
swag init -g $(MAIN_FILE)
|
||||
|
||||
# 运行所有检查
|
||||
.PHONY: check
|
||||
check: fmt vet test
|
||||
@echo "所有检查完成"
|
||||
# 显示帮助
|
||||
help:
|
||||
@echo "🛠️ 可用的构建命令:"
|
||||
@echo ""
|
||||
@echo "主要命令:"
|
||||
@echo " make build - 完整构建(前端SSG + Go嵌入)"
|
||||
@echo " make dev - 开发模式构建(包含调试信息)"
|
||||
@echo " make run - 构建并运行应用"
|
||||
@echo " make clean - 清理所有构建文件"
|
||||
@echo ""
|
||||
@echo "分离构建:"
|
||||
@echo " make frontend - 只构建前端(Next.js SSG)"
|
||||
@echo " make backend - 只构建后端(需要前端已构建)"
|
||||
@echo " make build-go - 传统 Go 构建(不含前端)"
|
||||
@echo ""
|
||||
@echo "其他命令:"
|
||||
@echo " make run-quick - 直接运行现有二进制"
|
||||
@echo " make build-linux - Linux 交叉编译"
|
||||
@echo " make install-deps- 安装所有依赖"
|
||||
@echo " make check - 代码检查和格式化"
|
||||
@echo " make test - 运行测试"
|
||||
@echo " make help - 显示此帮助"
|
||||
@echo ""
|
||||
@echo "详细构建选项(直接调用脚本):"
|
||||
@echo " ./build-fullstack.sh --help"
|
||||
|
||||
Reference in New Issue
Block a user