diff --git a/.github/workflows/build-check.yaml b/.github/workflows/build-check.yaml index 914e201d4..cfadf4eaf 100644 --- a/.github/workflows/build-check.yaml +++ b/.github/workflows/build-check.yaml @@ -82,3 +82,22 @@ jobs: steps: - uses: actions/checkout@v2 - run: make gen-kotlin + + breaking-change: + needs: docker-pull + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + # This is needed because checkout action does a shallow clone + - name: Fetch main branch for comparison + run: | + git remote set-branches origin '*' + git fetch --depth=1 origin main + git branch main origin/main + - 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 54c234d52..f34f71f9f 100755 --- a/Makefile +++ b/Makefile @@ -18,13 +18,16 @@ 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} +BUF_AGAINST ?= ".git\#branch=main" PROTO_GEN_CPP_DIR ?= $(GENDIR)/cpp PROTO_GEN_CSHARP_DIR ?= $(GENDIR)/csharp PROTO_GEN_GO_DIR ?= $(GENDIR)/go PROTO_GEN_JAVA_DIR ?= $(GENDIR)/java -PROTO_GEN_JS_DIR ?= $(GENDIR)/js PROTO_GEN_KOTLIN_DIR ?= $(GENDIR)/kotlin PROTO_GEN_OBJC_DIR ?= $(GENDIR)/objc PROTO_GEN_OPENAPI_DIR ?= $(GENDIR)/openapi @@ -36,6 +39,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 +143,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 000000000..86ed2c419 --- /dev/null +++ b/buf.yaml @@ -0,0 +1,6 @@ +version: v1 + +# See https://docs.buf.build/breaking/configuration +breaking: + use: + - WIRE