topfans/backend/scripts/compile-proto.sh
2026-04-07 22:29:48 +08:00

217 lines
5.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Proto 文件编译脚本
# 用途:编译所有 proto 文件为 Go 代码
set -e
# 进入项目根目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR/.."
# 添加 GOPATH/bin 到 PATH
export PATH="$PATH:$(go env GOPATH)/bin"
echo "======================================"
echo "开始编译 Proto 文件"
echo "======================================"
# 检查 protoc 是否已安装
if ! command -v protoc &> /dev/null; then
echo "❌ protoc 未安装!"
echo "请安装 protoc"
echo " macOS: brew install protobuf"
echo " Ubuntu: apt-get install protobuf-compiler"
exit 1
fi
echo "✅ protoc 版本: $(protoc --version)"
# 检查必要的 Go 插件
MISSING_PLUGINS=false
if ! command -v protoc-gen-go &> /dev/null; then
echo "❌ protoc-gen-go 未安装"
MISSING_PLUGINS=true
fi
if ! command -v protoc-gen-go-triple &> /dev/null; then
echo "❌ protoc-gen-go-triple 未安装"
MISSING_PLUGINS=true
fi
if [ "$MISSING_PLUGINS" = true ]; then
echo ""
echo "请安装缺失的插件:"
echo " go install google.golang.org/protobuf/cmd/protoc-gen-go@latest"
echo " go install github.com/dubbogo/protoc-gen-go-triple/v3@latest"
exit 1
fi
echo "✅ 所有必需插件已安装"
echo ""
# 预先创建目标目录
echo "📁 创建目标目录..."
for name in common user social asset gallery ranking activity; do
mkdir -p "pkg/proto/$name"
done
echo ""
# 编译 common.proto仅生成 pb.gocommon.proto 没有 service生成 triple.go 会导致未使用 import 编译失败)
echo "📦 编译 common.proto ..."
protoc --proto_path=proto \
--go_out=pkg/proto/common \
--go_opt=paths=source_relative \
common.proto
echo "✅ common.proto 编译完成"
echo ""
# 编译 user.proto
echo "📦 编译 user.proto ..."
protoc --proto_path=proto \
--proto_path=. \
--go_out=pkg/proto/user \
--go_opt=paths=source_relative \
--go-triple_out=pkg/proto/user \
--go-triple_opt=paths=source_relative \
user.proto
echo "✅ user.proto 编译完成"
echo ""
# 编译 social.proto
echo "📦 编译 social.proto ..."
protoc --proto_path=proto \
--proto_path=. \
--go_out=pkg/proto/social \
--go_opt=paths=source_relative \
--go-triple_out=pkg/proto/social \
--go-triple_opt=paths=source_relative \
social.proto
echo "✅ social.proto 编译完成"
echo ""
# 编译 asset.proto
echo "📦 编译 asset.proto ..."
protoc --proto_path=proto \
--proto_path=. \
--go_out=pkg/proto/asset \
--go_opt=paths=source_relative \
--go-triple_out=pkg/proto/asset \
--go-triple_opt=paths=source_relative \
asset.proto
echo "✅ asset.proto 编译完成"
echo ""
# 编译 gallery.proto
echo "📦 编译 gallery.proto ..."
protoc --proto_path=proto \
--proto_path=. \
--go_out=pkg/proto/gallery \
--go_opt=paths=source_relative \
--go-triple_out=pkg/proto/gallery \
--go-triple_opt=paths=source_relative \
gallery.proto
echo "✅ gallery.proto 编译完成"
echo ""
# 编译 ranking.proto
echo "📦 编译 ranking.proto ..."
protoc --proto_path=proto \
--proto_path=. \
--go_out=pkg/proto/ranking \
--go_opt=paths=source_relative \
--go-triple_out=pkg/proto/ranking \
--go-triple_opt=paths=source_relative \
ranking.proto
echo "✅ ranking.proto 编译完成"
echo ""
# 编译 activity.proto
echo "📦 编译 activity.proto ..."
protoc --proto_path=proto \
--proto_path=. \
--go_out=pkg/proto/activity \
--go_opt=paths=source_relative \
--go-triple_out=pkg/proto/activity \
--go-triple_opt=paths=source_relative \
activity.proto
echo "✅ activity.proto 编译完成"
echo ""
# 清理可能存在的冗余目录和文件
echo "🔄 清理冗余文件..."
# 删除 github.com 目录(如果存在)
if [ -d "github.com" ]; then
rm -rf github.com
echo " ✅ github.com 目录已清理"
fi
# 删除 proto 目录下的生成文件(如果存在)
for name in common user social asset gallery ranking activity; do
if [ -f "proto/$name.pb.go" ]; then
rm "proto/$name.pb.go"
echo " ✅ proto/$name.pb.go 已清理"
fi
if [ -f "proto/$name.triple.go" ]; then
rm "proto/$name.triple.go"
echo " ✅ proto/$name.triple.go 已清理"
fi
# 清理 pkg/proto/$name/proto/ 子目录(如果存在)
if [ -d "pkg/proto/$name/proto" ]; then
rm -rf "pkg/proto/$name/proto"
echo " ✅ pkg/proto/$name/proto/ 子目录已清理"
fi
done
echo " ✅ 所有文件已整理完成"
echo ""
echo "生成的文件结构:"
echo " pkg/proto/"
echo " ├── common/"
echo " │ ├── common.pb.go"
echo " │ └── (no triple.go)"
echo " ├── user/"
echo " │ ├── user.pb.go"
echo " │ └── user.triple.go"
echo " ├── social/"
echo " │ ├── social.pb.go"
echo " │ └── social.triple.go"
echo " ├── asset/"
echo " │ ├── asset.pb.go"
echo " │ └── asset.triple.go"
echo " ├── gallery/"
echo " │ ├── gallery.pb.go"
echo " │ └── gallery.triple.go"
echo " ├── ranking/"
echo " │ ├── ranking.pb.go"
echo " │ └── ranking.triple.go"
echo " └── activity/"
echo " ├── activity.pb.go"
echo " └── activity.triple.go"
echo ""
# 统计生成的文件
GENERATED_FILES=$(find pkg/proto -name "*.pb.go" -o -name "*.triple.go" 2>/dev/null | wc -l)
echo "======================================"
echo "✅ 所有 Proto 文件编译完成!"
echo "======================================"
echo "生成文件总数: $GENERATED_FILES"
echo ""
echo "下一步:"
echo " 1. 实现 RankingService 接口"
echo " 2. 创建 Provider 层"
echo " 3. 注册 Dubbo 服务"
echo ""