mirror of
https://github.com/zeromicro/go-zero.git
synced 2026-05-14 18:30:02 +08:00
feat(goctl/rpc): support external proto imports with cross-package ty… (#5472)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
58
tools/goctl/rpc/test/proto/06_wellknown/gen.sh
Executable file
58
tools/goctl/rpc/test/proto/06_wellknown/gen.sh
Executable file
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env bash
|
||||
# Scenario 06: well-known type imports
|
||||
# Usage: bash gen.sh
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
GOCTL_ROOT="$(cd "$SCRIPT_DIR/../../../.." && pwd)"
|
||||
GOCTL="$GOCTL_ROOT/bin/goctl"
|
||||
OUT="$SCRIPT_DIR/output"
|
||||
|
||||
# Find well-known types include path
|
||||
PROTOC_INCLUDE=""
|
||||
PROTOC_BIN="$(which protoc 2>/dev/null || true)"
|
||||
if [ -n "$PROTOC_BIN" ]; then
|
||||
CANDIDATE="$(cd "$(dirname "$PROTOC_BIN")/.." && pwd)/include"
|
||||
[ -f "$CANDIDATE/google/protobuf/timestamp.proto" ] && PROTOC_INCLUDE="$CANDIDATE"
|
||||
fi
|
||||
if [ -z "$PROTOC_INCLUDE" ]; then
|
||||
for d in /opt/homebrew/include /usr/local/include; do
|
||||
[ -f "$d/google/protobuf/timestamp.proto" ] && PROTOC_INCLUDE="$d" && break
|
||||
done
|
||||
fi
|
||||
if [ -z "$PROTOC_INCLUDE" ]; then
|
||||
echo "Error: cannot find google/protobuf/timestamp.proto. Install protobuf (brew install protobuf)."
|
||||
exit 1
|
||||
fi
|
||||
echo "Well-known types: $PROTOC_INCLUDE"
|
||||
|
||||
# Build goctl from source
|
||||
go build -o "$GOCTL" "$GOCTL_ROOT"
|
||||
|
||||
# Clean and initialize output directory
|
||||
rm -rf "$OUT" && mkdir -p "$OUT/pb"
|
||||
(cd "$OUT" && go mod init example.com/demo/s06_wellknown > /dev/null 2>&1)
|
||||
|
||||
# Generate code
|
||||
cd "$SCRIPT_DIR"
|
||||
"$GOCTL" rpc protoc events.proto \
|
||||
--go_out="$OUT/pb" \
|
||||
--go-grpc_out="$OUT/pb" \
|
||||
--zrpc_out="$OUT/rpc" \
|
||||
--go_opt=paths=source_relative \
|
||||
--go-grpc_opt=paths=source_relative \
|
||||
--proto_path=. \
|
||||
--proto_path="$PROTOC_INCLUDE"
|
||||
|
||||
# Verify build
|
||||
echo "Running go mod tidy..."
|
||||
cd "$OUT" && go mod tidy
|
||||
echo "Checking build..."
|
||||
if go build ./...; then
|
||||
echo "✅ Build passed"
|
||||
else
|
||||
echo "❌ Build failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Done. Output: $OUT"
|
||||
Reference in New Issue
Block a user