From f25d10e6b545013f44f4b299ed6ec4b859ff0733 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Fri, 6 Feb 2026 17:17:48 -0500 Subject: [PATCH 1/3] Make generate protobuf script compatible with mac Signed-off-by: Jay DeLuca --- .../generate-protobuf.sh | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 9bd222241..064f6f1ac 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -6,6 +6,24 @@ set -euo pipefail # I could not figure out how to use a protoc Maven plugin to use the shaded module, # so I ran this command to generate the sources manually. +# Use gsed on macOS (requires: brew install gnu-sed) for in-place edits +# BSD sed requires -i '' for in-place with no backup; GNU sed uses -i alone. +if [[ "$OSTYPE" == "darwin"* ]] && command -v gsed >/dev/null 2>&1; then + SED='gsed' + SED_I=(-i) +else + SED='sed' + # BSD sed: -i requires backup extension; '' = no backup + [[ "$OSTYPE" == "darwin"* ]] && SED_I=(-i '') || SED_I=(-i) +fi + +# Use mise-provided protoc if available +if command -v mise >/dev/null 2>&1; then + PROTOC="mise exec -- protoc" +else + PROTOC='protoc' +fi + TARGET_DIR=$1 PROTO_DIR=src/main/protobuf PROTOBUF_VERSION_STRING=$2 @@ -18,22 +36,23 @@ mkdir -p "$TARGET_DIR" rm -rf $PROTO_DIR || true mkdir -p $PROTO_DIR -OLD_PACKAGE=$(sed -nE 's/import (io.prometheus.metrics.expositionformats.generated.*).Metrics;/\1/p' src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java) +OLD_PACKAGE=$($SED -nE 's/import (io.prometheus.metrics.expositionformats.generated.*).Metrics;/\1/p' src/main/java/io/prometheus/metrics/expositionformats/internal/PrometheusProtobufWriterImpl.java) PACKAGE="io.prometheus.metrics.expositionformats.generated.com_google_protobuf_${PROTOBUF_VERSION_STRING}" if [[ $OLD_PACKAGE != "$PACKAGE" ]]; then echo "Replacing package $OLD_PACKAGE with $PACKAGE in all java files" - find .. -type f -name "*.java" -exec sed -i "s/$OLD_PACKAGE/$PACKAGE/g" {} + + find .. -type f -name "*.java" -exec "${SED}" "${SED_I[@]}" "s/$OLD_PACKAGE/$PACKAGE/g" {} + fi curl -sL https://raw.githubusercontent.com/prometheus/client_model/master/io/prometheus/client/metrics.proto -o $PROTO_DIR/metrics.proto -sed -i "s/java_package = \"io.prometheus.client\"/java_package = \"$PACKAGE\"/" $PROTO_DIR/metrics.proto -protoc --java_out "$TARGET_DIR" $PROTO_DIR/metrics.proto -sed -i '1 i\//CHECKSTYLE:OFF: checkstyle' "$(find src/main/generated/io -type f)" -sed -i -e $'$a\\\n//CHECKSTYLE:ON: checkstyle' "$(find src/main/generated/io -type f)" +"${SED}" "${SED_I[@]}" "s/java_package = \"io.prometheus.client\"/java_package = \"$PACKAGE\"/" $PROTO_DIR/metrics.proto +$PROTOC --java_out "$TARGET_DIR" $PROTO_DIR/metrics.proto +find src/main/generated/io -type f -exec "${SED}" "${SED_I[@]}" '1 i\ +//CHECKSTYLE:OFF: checkstyle' {} \; +find src/main/generated/io -type f -exec "${SED}" "${SED_I[@]}" -e $'$a\\\n//CHECKSTYLE:ON: checkstyle' {} \; -GENERATED_WITH=$(grep -oP '\/\/ Protobuf Java Version: \K.*' "$TARGET_DIR/${PACKAGE//\.//}"/Metrics.java) +GENERATED_WITH=$($SED -n 's/.*\/\/ Protobuf Java Version: \(.*\)/\1/p' "$TARGET_DIR/${PACKAGE//\.//}"/Metrics.java) function help() { echo "Please use https://mise.jdx.dev/ - this will use the version specified in mise.toml" @@ -56,4 +75,4 @@ if [[ ${REQUIRE_PROTO_UP_TO_DATE:-false} == "true" && -n "$STATUS" ]]; then echo "Local changes:" echo "$STATUS" exit 1 -fi +fi \ No newline at end of file From 9ad5f5728797f716bccbf25c54b78547e04925bf Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Fri, 6 Feb 2026 17:23:58 -0500 Subject: [PATCH 2/3] remove pin command Signed-off-by: Jay DeLuca --- mise.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/mise.toml b/mise.toml index b75e5175f..420c5634d 100644 --- a/mise.toml +++ b/mise.toml @@ -30,7 +30,6 @@ run = "./mvnw install -DskipTests -Dspotless.check.skip=true -Dcoverage.skip=tru [tasks.generate] description = "bare compile, ignoring formatting and linters" run = [ - "mise use --pin protoc@latest", "./mvnw clean install -DskipTests -Dspotless.check.skip=true -Dcoverage.skip=true -Dcheckstyle.skip=true -Dwarnings=-nowarn" ] env.PROTO_GENERATION = "true" From 1f4213fd750012ef80c05a2bf8e4c5306a1626e2 Mon Sep 17 00:00:00 2001 From: Jay DeLuca Date: Fri, 6 Feb 2026 17:33:03 -0500 Subject: [PATCH 3/3] newline Signed-off-by: Jay DeLuca --- prometheus-metrics-exposition-formats/generate-protobuf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prometheus-metrics-exposition-formats/generate-protobuf.sh b/prometheus-metrics-exposition-formats/generate-protobuf.sh index 064f6f1ac..7c8f8be3b 100755 --- a/prometheus-metrics-exposition-formats/generate-protobuf.sh +++ b/prometheus-metrics-exposition-formats/generate-protobuf.sh @@ -75,4 +75,4 @@ if [[ ${REQUIRE_PROTO_UP_TO_DATE:-false} == "true" && -n "$STATUS" ]]; then echo "Local changes:" echo "$STATUS" exit 1 -fi \ No newline at end of file +fi