Skip to content

Commit 2cddfeb

Browse files
committed
Improve regenerate.sh to use the correct proto compiler version
1 parent fc3f327 commit 2cddfeb

File tree

3 files changed

+116
-40
lines changed

3 files changed

+116
-40
lines changed

protoc_installer.sh

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/bin/bash
2+
# Install protoc
3+
echo "Installing protoc"
4+
PROTOC_VERSION="25.2"
5+
echo "Protobuf version: ${PROTOC_VERSION}"
6+
7+
8+
download_macos() {
9+
echo "Attempting to install libprotoc ${PROTOC_VERSION} using Homebrew (macOS)..."
10+
brew search libprotoc >/dev/null 2>&1
11+
if [[ $? -eq 0 ]]; then
12+
PROTOC_VERSION=$(echo "$PROTOC_VERSION/1" | bc)
13+
brew install protobuf@"${PROTOC_VERSION}"
14+
if [[ $? -eq 0 ]]; then
15+
echo "libprotoc ${PROTOC_VERSION} successfully installed on macOS"
16+
else
17+
echo "Error installing libprotoc on macOS"
18+
fi
19+
else
20+
echo "Could not find libprotoc ${PROTOC_VERSION} formula in Homebrew. Please consider manual installation."
21+
fi
22+
}
23+
24+
25+
# Function to download pre-built binaries for Linux
26+
download_linux() {
27+
echo "Attempting to download pre-built libprotoc ${PROTOC_VERSION} binary (Linux)..."
28+
29+
# Determine architecture
30+
if [[ $(uname -m) == "x86_64" ]]; then
31+
ARCH="x86_64"
32+
elif [[ $(uname -m) == "aarch64" ]]; then
33+
ARCH="aarch_64"
34+
else
35+
echo "Unsupported architecture. Please consider manual installation."
36+
return
37+
fi
38+
39+
# Download URL (adjust if a newer release is available)
40+
DOWNLOAD_URL="https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-${ARCH}.zip"
41+
42+
echo "Download URL: ${DOWNLOAD_URL}"
43+
44+
# Download and unzip
45+
curl -LO "$DOWNLOAD_URL"
46+
echo "Downloaded"
47+
if [ -z "$WORKDIR" ]; then
48+
unzip "protoc-${PROTOC_VERSION}-linux-$ARCH.zip"
49+
else
50+
unzip "protoc-${PROTOC_VERSION}-linux-$ARCH.zip" -d "${WORKDIR}"
51+
rm "protoc-${PROTOC_VERSION}-linux-$ARCH.zip"
52+
fi
53+
}
54+
55+
56+
download_protoc() {
57+
# Detect the Operating System
58+
OS=$(uname -s)
59+
60+
case "$OS" in
61+
"Darwin") download_macos ;;
62+
"Linux") download_linux ;;
63+
*) echo "Unsupported operating system. Please consider manual installation." ;;
64+
esac
65+
}

regenerate.sh

Lines changed: 49 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@
1515

1616
set -eu -o pipefail
1717

18-
WORKDIR=$(mktemp -d)
18+
export WORKDIR=$(mktemp -d)
1919

2020
function finish {
2121
rm -rf "$WORKDIR"
2222
}
2323
trap finish EXIT
2424

25-
export GOBIN=${WORKDIR}/bin
26-
export PATH=${GOBIN}:${PATH}
27-
mkdir -p ${GOBIN}
25+
export GOBIN="${WORKDIR}"/bin
26+
export PATH="${GOBIN}:${PATH}"
27+
mkdir -p "${GOBIN}"
2828

2929
echo "remove existing generated files"
3030
# grpc_testing_not_regenerate/*.pb.go is not re-generated,
@@ -38,39 +38,52 @@ echo "go install cmd/protoc-gen-go-grpc"
3838
(cd cmd/protoc-gen-go-grpc && go install .)
3939

4040
echo "git clone https://github.com/grpc/grpc-proto"
41-
git clone --quiet https://github.com/grpc/grpc-proto ${WORKDIR}/grpc-proto
41+
git clone --quiet https://github.com/grpc/grpc-proto "${WORKDIR}"/grpc-proto
4242

4343
echo "git clone https://github.com/protocolbuffers/protobuf"
44-
git clone --quiet https://github.com/protocolbuffers/protobuf ${WORKDIR}/protobuf
44+
git clone --quiet https://github.com/protocolbuffers/protobuf "${WORKDIR}"/protobuf
4545

4646
# Pull in code.proto as a proto dependency
47-
mkdir -p ${WORKDIR}/googleapis/google/rpc
47+
mkdir -p "${WORKDIR}"/googleapis/google/rpc
4848
echo "curl https://raw.githubusercontent.com/googleapis/googleapis/master/google/rpc/code.proto"
49-
curl --silent https://raw.githubusercontent.com/googleapis/googleapis/master/google/rpc/code.proto > ${WORKDIR}/googleapis/google/rpc/code.proto
49+
curl --silent https://raw.githubusercontent.com/googleapis/googleapis/master/google/rpc/code.proto > "${WORKDIR}"/googleapis/google/rpc/code.proto
5050

51-
mkdir -p ${WORKDIR}/out
51+
source ./protoc_installer.sh
52+
download_protoc
53+
54+
export PATH="$PATH:$GOBIN"
55+
56+
PROTOC_PATH="/usr/local/bin"
57+
if [[ ":$PATH:" != *":$PROTOC_PATH:"* ]]; then
58+
export PATH="$PATH:$PROTOC_PATH"
59+
echo "protoc added to your PATH. You might need to open a new terminal"
60+
else
61+
echo "protoc already appears to be on your PATH"
62+
fi
63+
64+
mkdir -p "${WORKDIR}/out"
5265

5366
# Generates sources without the embed requirement
5467
LEGACY_SOURCES=(
55-
${WORKDIR}/grpc-proto/grpc/binlog/v1/binarylog.proto
56-
${WORKDIR}/grpc-proto/grpc/channelz/v1/channelz.proto
57-
${WORKDIR}/grpc-proto/grpc/health/v1/health.proto
58-
${WORKDIR}/grpc-proto/grpc/lb/v1/load_balancer.proto
68+
"${WORKDIR}/grpc-proto/grpc/binlog/v1/binarylog.proto"
69+
"${WORKDIR}/grpc-proto/grpc/channelz/v1/channelz.proto"
70+
"${WORKDIR}/grpc-proto/grpc/health/v1/health.proto"
71+
"${WORKDIR}/grpc-proto/grpc/lb/v1/load_balancer.proto"
5972
profiling/proto/service.proto
60-
${WORKDIR}/grpc-proto/grpc/reflection/v1alpha/reflection.proto
61-
${WORKDIR}/grpc-proto/grpc/reflection/v1/reflection.proto
73+
"${WORKDIR}/grpc-proto/grpc/reflection/v1alpha/reflection.proto"
74+
"${WORKDIR}/grpc-proto/grpc/reflection/v1/reflection.proto"
6275
)
6376

6477
# Generates only the new gRPC Service symbols
6578
SOURCES=(
6679
$(git ls-files --exclude-standard --cached --others "*.proto" | grep -v '^\(profiling/proto/service.proto\|reflection/grpc_reflection_v1alpha/reflection.proto\)$')
67-
${WORKDIR}/grpc-proto/grpc/gcp/altscontext.proto
68-
${WORKDIR}/grpc-proto/grpc/gcp/handshaker.proto
69-
${WORKDIR}/grpc-proto/grpc/gcp/transport_security_common.proto
70-
${WORKDIR}/grpc-proto/grpc/lookup/v1/rls.proto
71-
${WORKDIR}/grpc-proto/grpc/lookup/v1/rls_config.proto
72-
${WORKDIR}/grpc-proto/grpc/testing/*.proto
73-
${WORKDIR}/grpc-proto/grpc/core/*.proto
80+
"${WORKDIR}/grpc-proto/grpc/gcp/altscontext.proto"
81+
"${WORKDIR}/grpc-proto/grpc/gcp/handshaker.proto"
82+
"${WORKDIR}/grpc-proto/grpc/gcp/transport_security_common.proto"
83+
"${WORKDIR}/grpc-proto/grpc/lookup/v1/rls.proto"
84+
"${WORKDIR}/grpc-proto/grpc/lookup/v1/rls_config.proto"
85+
"${WORKDIR}/grpc-proto/grpc/testing/*.proto"
86+
"${WORKDIR}/grpc-proto/grpc/core/*.proto"
7487
)
7588

7689
# These options of the form 'Mfoo.proto=bar' instruct the codegen to use an
@@ -93,31 +106,31 @@ Mgrpc/testing/empty.proto=google.golang.org/grpc/interop/grpc_testing
93106

94107
for src in ${SOURCES[@]}; do
95108
echo "protoc ${src}"
96-
protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS}:${WORKDIR}/out \
109+
protoc --go_out="${OPTS}:${WORKDIR}/out" --go-grpc_out="${OPTS}:${WORKDIR}/out" \
97110
-I"." \
98-
-I${WORKDIR}/grpc-proto \
99-
-I${WORKDIR}/googleapis \
100-
-I${WORKDIR}/protobuf/src \
101-
${src}
111+
-I"${WORKDIR}/grpc-proto" \
112+
-I"${WORKDIR}/googleapis" \
113+
-I"${WORKDIR}/protobuf/src" \
114+
"${src}"
102115
done
103116

104117
for src in ${LEGACY_SOURCES[@]}; do
105118
echo "protoc ${src}"
106-
protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS},require_unimplemented_servers=false:${WORKDIR}/out \
119+
protoc --go_out="${OPTS}:${WORKDIR}"/out --go-grpc_out="${OPTS}",require_unimplemented_servers=false:"${WORKDIR}/out" \
107120
-I"." \
108-
-I${WORKDIR}/grpc-proto \
109-
-I${WORKDIR}/googleapis \
110-
-I${WORKDIR}/protobuf/src \
111-
${src}
121+
-I"${WORKDIR}/grpc-proto" \
122+
-I"${WORKDIR}/googleapis" \
123+
-I"${WORKDIR}/protobuf/src" \
124+
"${src}"
112125
done
113126

114127
# The go_package option in grpc/lookup/v1/rls.proto doesn't match the
115128
# current location. Move it into the right place.
116-
mkdir -p ${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1
117-
mv ${WORKDIR}/out/google.golang.org/grpc/lookup/grpc_lookup_v1/* ${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1
129+
mkdir -p "${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1"
130+
mv "${WORKDIR}/out/google.golang.org/grpc/lookup/grpc_lookup_v1/*" "${WORKDIR}/out/google.golang.org/grpc/internal/proto/grpc_lookup_v1"
118131

119132
# grpc_testing_not_regenerate/*.pb.go are not re-generated,
120133
# see grpc_testing_not_regenerate/README.md for details.
121-
rm ${WORKDIR}/out/google.golang.org/grpc/reflection/grpc_testing_not_regenerate/*.pb.go
134+
rm "${WORKDIR}/out/google.golang.org/grpc/reflection/grpc_testing_not_regenerate/*.pb.go"
122135

123-
cp -R ${WORKDIR}/out/google.golang.org/grpc/* .
136+
cp -R "${WORKDIR}/out/google.golang.org/grpc/*" .

vet.sh

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,9 @@ if [[ "$1" = "-install" ]]; then
4141
popd
4242
if [[ -z "${VET_SKIP_PROTO}" ]]; then
4343
if [[ "${GITHUB_ACTIONS}" = "true" ]]; then
44-
PROTOBUF_VERSION=25.2 # a.k.a. v4.22.0 in pb.go files.
45-
PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip
44+
source ./protoc_installer.sh
4645
pushd /home/runner/go
47-
wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME}
48-
unzip ${PROTOC_FILENAME}
46+
download_protoc
4947
bin/protoc --version
5048
popd
5149
elif not which protoc > /dev/null; then

0 commit comments

Comments
 (0)