diff --git a/.github/workflows/test_upb.yml b/.github/workflows/test_upb.yml index 2613d1b83c349..93dba0017167d 100644 --- a/.github/workflows/test_upb.yml +++ b/.github/workflows/test_upb.yml @@ -116,6 +116,7 @@ jobs: ref: ${{ inputs.safe-checkout }} - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0 with: + python-version: 3.12 cache: pip cache-dependency-path: 'python/requirements.txt' - name: Run tests diff --git a/go/BUILD.bazel b/go/BUILD.bazel new file mode 100644 index 0000000000000..c1cb8d7dba662 --- /dev/null +++ b/go/BUILD.bazel @@ -0,0 +1,5 @@ +filegroup( + name = "go_features_proto_srcs", + srcs = ["go_features.proto"], + visibility = ["//:__subpackages__"], +) diff --git a/go/go_features.proto b/go/go_features.proto new file mode 100644 index 0000000000000..ceb3a13d0f2da --- /dev/null +++ b/go/go_features.proto @@ -0,0 +1,57 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2023 Google Inc. All rights reserved. +// +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file or at +// https://developers.google.com/open-source/licenses/bsd + +syntax = "proto2"; + +package pb; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/protobuf/types/gofeaturespb"; + +extend google.protobuf.FeatureSet { + optional GoFeatures go = 1002; +} + +message GoFeatures { + // Whether or not to generate the deprecated UnmarshalJSON method for enums. + optional bool legacy_unmarshal_json_enum = 1 [ + retention = RETENTION_RUNTIME, + targets = TARGET_TYPE_ENUM, + targets = TARGET_TYPE_FILE, + feature_support = { + edition_introduced: EDITION_2023, + edition_deprecated: EDITION_2023, + deprecation_warning: "The legacy UnmarshalJSON API is deprecated and " + "will be removed in a future edition.", + }, + edition_defaults = { edition: EDITION_LEGACY, value: "true" }, + edition_defaults = { edition: EDITION_PROTO3, value: "false" } + ]; + + enum APILevel { + // API_LEVEL_UNSPECIFIED results in selecting the OPEN API, + // but needs to be a separate value to distinguish between + // an explicitly set api level or a missing api level. + API_LEVEL_UNSPECIFIED = 0; + API_OPEN = 1; + API_HYBRID = 2; + API_OPAQUE = 3; + } + + // One of OPEN, HYBRID or OPAQUE. + optional APILevel api_level = 2 [ + retention = RETENTION_RUNTIME, + targets = TARGET_TYPE_MESSAGE, + targets = TARGET_TYPE_FILE, + feature_support = { + edition_introduced: EDITION_2023, + }, + edition_defaults = { edition: EDITION_LEGACY, value: "API_LEVEL_UNSPECIFIED" }, + edition_defaults = { edition: EDITION_2024, value: "API_OPAQUE" } + ]; +} diff --git a/pkg/BUILD.bazel b/pkg/BUILD.bazel index 92849558fa6d3..792f11c155e63 100644 --- a/pkg/BUILD.bazel +++ b/pkg/BUILD.bazel @@ -16,6 +16,7 @@ pkg_files( name = "wkt_protos_files", srcs = [ "//:well_known_type_protos", + "//go:go_features_proto_srcs", "//java/core:java_features_proto_srcs", "//src/google/protobuf:cpp_features_proto_srcs", "//src/google/protobuf:descriptor_proto_srcs",