From 0bfcf1ca8fdbe0c7f964a63ce84f51998fe1d4c2 Mon Sep 17 00:00:00 2001 From: Aaron Abbott Date: Wed, 3 Aug 2022 04:13:20 -0400 Subject: [PATCH] Use buf to detect for wire breaking changes (#415) --- .github/workflows/build-check.yaml | 13 +++++++++++++ Makefile | 11 +++++++++++ buf.yaml | 6 ++++++ 3 files changed, 30 insertions(+) create mode 100644 buf.yaml diff --git a/.github/workflows/build-check.yaml b/.github/workflows/build-check.yaml index 914e201..7f26bf3 100644 --- a/.github/workflows/build-check.yaml +++ b/.github/workflows/build-check.yaml @@ -82,3 +82,16 @@ jobs: steps: - uses: actions/checkout@v2 - run: make gen-kotlin + + breaking-change: + needs: docker-pull + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Run make breaking-change with json output to annotate PR + # Formats JSON output into Github workflow commands + # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-error-message + run: > + BUF_FLAGS="--error-format json" make -s breaking-change + | jq -rs '.[] | "::error file=\(.path),line=\(.start_line),endLine=\(.end_line),title=Buf detected breaking change \(.type)::\(.message)"' + ; (exit ${PIPESTATUS[0]}) diff --git a/Makefile b/Makefile index 54c234d..1d8c996 100755 --- a/Makefile +++ b/Makefile @@ -18,7 +18,13 @@ endef gen-all: gen-cpp gen-csharp gen-go gen-java gen-kotlin gen-objc gen-openapi gen-php gen-python gen-ruby OTEL_DOCKER_PROTOBUF ?= otel/build-protobuf:0.9.0 +BUF_DOCKER ?= bufbuild/buf:1.7.0 + PROTOC := docker run --rm -u ${shell id -u} -v${PWD}:${PWD} -w${PWD} ${OTEL_DOCKER_PROTOBUF} --proto_path=${PWD} +BUF := docker run --rm -v "${PWD}:/workspace" -w /workspace ${BUF_DOCKER} +# When checking for protobuf breaking changes, check against the upstream repo's main branch. +# Options are described in https://docs.buf.build/breaking/usage#git +BUF_AGAINST ?= "https://github.com/open-telemetry/opentelemetry-proto.git" PROTO_GEN_CPP_DIR ?= $(GENDIR)/cpp PROTO_GEN_CSHARP_DIR ?= $(GENDIR)/csharp @@ -36,6 +42,7 @@ PROTO_GEN_RUBY_DIR ?= $(GENDIR)/ruby .PHONY: docker-pull docker-pull: docker pull $(OTEL_DOCKER_PROTOBUF) + docker pull $(BUF_DOCKER) # Generate gRPC/Protobuf implementation for C++. .PHONY: gen-cpp @@ -139,3 +146,7 @@ gen-ruby: $(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/trace/v1/trace_service.proto $(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/metrics/v1/metrics_service.proto $(PROTOC) --ruby_out=./$(PROTO_GEN_RUBY_DIR) --grpc-ruby_out=./$(PROTO_GEN_RUBY_DIR) opentelemetry/proto/collector/logs/v1/logs_service.proto + +.PHONY: breaking-change +breaking-change: + $(BUF) breaking --against $(BUF_AGAINST) $(BUF_FLAGS) diff --git a/buf.yaml b/buf.yaml new file mode 100644 index 0000000..86ed2c4 --- /dev/null +++ b/buf.yaml @@ -0,0 +1,6 @@ +version: v1 + +# See https://docs.buf.build/breaking/configuration +breaking: + use: + - WIRE