243 lines
6.3 KiB
Bash
Executable File
243 lines
6.3 KiB
Bash
Executable File
#!/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 task starbook; do
|
||
mkdir -p "pkg/proto/$name"
|
||
done
|
||
echo ""
|
||
|
||
# 编译 common.proto(仅生成 pb.go;common.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 ""
|
||
|
||
# 编译 task.proto
|
||
echo "📦 编译 task.proto ..."
|
||
protoc --proto_path=proto \
|
||
--proto_path=. \
|
||
--go_out=pkg/proto/task \
|
||
--go_opt=paths=source_relative \
|
||
--go-triple_out=pkg/proto/task \
|
||
--go-triple_opt=paths=source_relative \
|
||
task.proto
|
||
|
||
echo "✅ task.proto 编译完成"
|
||
echo ""
|
||
|
||
# 编译 starbook.proto
|
||
echo "📦 编译 starbook.proto ..."
|
||
protoc --proto_path=proto \
|
||
--proto_path=. \
|
||
--go_out=pkg/proto/starbook \
|
||
--go_opt=paths=source_relative \
|
||
--go-triple_out=pkg/proto/starbook \
|
||
--go-triple_opt=paths=source_relative \
|
||
starbook.proto
|
||
|
||
echo "✅ starbook.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 task starbook; 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 ""
|