Add breaking change detection for well-known types

pull/17513/head
John Chadwick 9 months ago
parent 2967c521a6
commit 71050f4528
  1. 24
      WORKSPACE
  2. 100
      compatibility/BUILD.bazel
  3. 1
      compatibility/buf.yaml
  4. 1
      protobuf_version.bzl

@ -254,3 +254,27 @@ http_archive(
strip_prefix = "rules_testing-0.6.0",
url = "https://github.com/bazelbuild/rules_testing/releases/download/v0.6.0/rules_testing-v0.6.0.tar.gz",
)
# For checking breaking changes to well-known types from the previous release version.
load("//:protobuf_version.bzl", "PROTOBUF_PREVIOUS_RELEASE")
http_archive(
name = "com_google_protobuf_previous_release",
strip_prefix = "protobuf-" + PROTOBUF_PREVIOUS_RELEASE,
url = "https://github.com/protocolbuffers/protobuf/releases/download/v{0}/protobuf-{0}.tar.gz".format(PROTOBUF_PREVIOUS_RELEASE),
)
http_archive(
name = "rules_buf",
integrity = "sha256-Hr64Q/CaYr0E3ptAjEOgdZd1yc+cBjp7OG1wzuf3DIs=",
strip_prefix = "rules_buf-0.3.0",
urls = [
"https://github.com/bufbuild/rules_buf/archive/refs/tags/v0.3.0.zip",
],
)
load("@rules_buf//buf:repositories.bzl", "rules_buf_dependencies", "rules_buf_toolchains")
rules_buf_dependencies()
rules_buf_toolchains(version = "v1.32.1")

@ -1,11 +1,12 @@
load("//compatibility:runtime_conformance.bzl", "java_runtime_conformance")
load("@rules_buf//buf:defs.bzl", "buf_breaking_test")
# Simple build tests for compatibility of gencode from previous major versions
# with the current runtime.
#
# To add more test cases in Java, use java_runtime_conformance as below, and add
# the corresponding http_archive in the WORKSPACE file for the version.
load("//compatibility:runtime_conformance.bzl", "java_runtime_conformance")
# main gencode builds with main runtime as a proof of concept.
java_runtime_conformance(
name = "java_conformance_main",
@ -17,3 +18,98 @@ java_runtime_conformance(
name = "java_conformance_v3.25.0",
gencode_version = "3.25.0",
)
# Breaking change detection for well-known types and descriptor.proto.
buf_breaking_test(
name = "any_proto_breaking",
targets = ["//:any_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:any_proto",
)
buf_breaking_test(
name = "api_proto_breaking",
targets = ["//:api_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:api_proto",
)
buf_breaking_test(
name = "descriptor_proto_breaking",
targets = ["//:descriptor_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:descriptor_proto",
)
buf_breaking_test(
name = "duration_proto_breaking",
targets = ["//:duration_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:duration_proto",
)
buf_breaking_test(
name = "empty_proto_breaking",
targets = ["//:empty_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:empty_proto",
)
buf_breaking_test(
name = "field_mask_proto_breaking",
targets = ["//:field_mask_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:field_mask_proto",
)
buf_breaking_test(
name = "source_context_proto_breaking",
targets = ["//:source_context_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:source_context_proto",
)
buf_breaking_test(
name = "struct_proto_breaking",
targets = ["//:struct_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:struct_proto",
)
buf_breaking_test(
name = "timestamp_proto_breaking",
targets = ["//:timestamp_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:timestamp_proto",
)
buf_breaking_test(
name = "type_proto_breaking",
targets = ["//:type_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:type_proto",
)
buf_breaking_test(
name = "wrappers_proto_breaking",
targets = ["//:wrappers_proto"],
config = ":buf.yaml",
against = "@com_google_protobuf_previous_release//:wrappers_proto",
)
test_suite(
name = "proto_breaking",
tests = [
"any_proto_breaking",
"api_proto_breaking",
"descriptor_proto_breaking",
"duration_proto_breaking",
"empty_proto_breaking",
"field_mask_proto_breaking",
"source_context_proto_breaking",
"struct_proto_breaking",
"timestamp_proto_breaking",
"type_proto_breaking",
"wrappers_proto_breaking",
],
)

@ -0,0 +1 @@
version: v1

@ -4,3 +4,4 @@ PROTOBUF_JAVA_VERSION = "4.29.0"
PROTOBUF_PYTHON_VERSION = "5.29.0"
PROTOBUF_PHP_VERSION = "4.29.0"
PROTOBUF_RUBY_VERSION = "4.29.0"
PROTOBUF_PREVIOUS_RELEASE = "28.0-rc1"

Loading…
Cancel
Save