From f970db58be060a0d96faba51d05d5e72bd37fef5 Mon Sep 17 00:00:00 2001 From: andrewpaekgoogle Date: Wed, 13 Apr 2022 18:09:35 -0400 Subject: [PATCH] Add field check_preceding_lifecycle_events_present to PublishLifecycleEventRequest and PublishBuildToolEventStreamRequest protos. Closes #15247. Signed-off-by: Yun Peng test #15247 Signed-off-by: Yun Peng missing Signed-off-by: Yun Peng piggly wiggly Signed-off-by: Yun Peng spelling Partial commit for third_party/*, see #15315. Closes https://github.com/bazelbuild/bazel/pull/15315 Signed-off-by: Yun Peng --- third_party/googleapis/BUILD.bazel | 29 ++++++ .../googleapis/google/api/client.proto | 99 +++++++++++++++++++ .../google/api/field_behavior.proto | 90 +++++++++++++++++ .../devtools/build/v1/build_events.proto | 16 +-- .../devtools/build/v1/build_status.proto | 15 ++- .../build/v1/publish_build_event.proto | 49 ++++++--- 6 files changed, 275 insertions(+), 23 deletions(-) create mode 100644 third_party/googleapis/google/api/client.proto create mode 100644 third_party/googleapis/google/api/field_behavior.proto diff --git a/third_party/googleapis/BUILD.bazel b/third_party/googleapis/BUILD.bazel index a93d0cb4e0c523..fd1119d3a317a0 100644 --- a/third_party/googleapis/BUILD.bazel +++ b/third_party/googleapis/BUILD.bazel @@ -20,6 +20,8 @@ JAVA_LIBRARY_PROTOS = [ "google_api_auth", "google_api_http", "google_api_annotations", + "google_api_client", + "google_api_field_behavior", "google_watch_v1", "google_rpc_status", "google_rpc_error_details", @@ -110,6 +112,16 @@ java_proto_library( deps = [":google_api_annotations_proto"], ) +java_proto_library( + name = "google_api_client_java_proto", + deps = [":google_api_client_proto"], +) + +java_proto_library( + name = "google_api_field_behavior_java_proto", + deps = [":google_api_field_behavior_proto"], +) + java_proto_library( name = "google_api_http_java_proto", deps = [":google_api_http_proto"], @@ -204,6 +216,7 @@ proto_library( deps = [ ":google_api_annotations_proto", "@com_google_protobuf//:any_proto", + "@com_google_protobuf//:wrappers_proto", ], ) @@ -226,10 +239,13 @@ proto_library( deps = [ ":google_api_annotations_proto", ":google_api_auth_proto", + ":google_api_client_proto", + ":google_api_field_behavior_proto", ":google_devtools_build_v1_build_events_proto", "@com_google_protobuf//:any_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", + "@com_google_protobuf//:wrappers_proto", ], ) @@ -242,6 +258,19 @@ proto_library( ], ) +proto_library( + name = "google_api_client_proto", + srcs = ["google/api/client.proto"], + deps = ["@com_google_protobuf//:descriptor_proto"], +) + +proto_library( + name = "google_api_field_behavior_proto", + srcs = ["google/api/field_behavior.proto"], + deps = ["@com_google_protobuf//:descriptor_proto"], +) + + proto_library( name = "google_api_http_proto", srcs = ["google/api/http.proto"], diff --git a/third_party/googleapis/google/api/client.proto b/third_party/googleapis/google/api/client.proto new file mode 100644 index 00000000000000..3b3fd0c401fd2e --- /dev/null +++ b/third_party/googleapis/google/api/client.proto @@ -0,0 +1,99 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "ClientProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.MethodOptions { + // A definition of a client library method signature. + // + // In client libraries, each proto RPC corresponds to one or more methods + // which the end user is able to call, and calls the underlying RPC. + // Normally, this method receives a single argument (a struct or instance + // corresponding to the RPC request object). Defining this field will + // add one or more overloads providing flattened or simpler method signatures + // in some languages. + // + // The fields on the method signature are provided as a comma-separated + // string. + // + // For example, the proto RPC and annotation: + // + // rpc CreateSubscription(CreateSubscriptionRequest) + // returns (Subscription) { + // option (google.api.method_signature) = "name,topic"; + // } + // + // Would add the following Java overload (in addition to the method accepting + // the request object): + // + // public final Subscription createSubscription(String name, String topic) + // + // The following backwards-compatibility guidelines apply: + // + // * Adding this annotation to an unannotated method is backwards + // compatible. + // * Adding this annotation to a method which already has existing + // method signature annotations is backwards compatible if and only if + // the new method signature annotation is last in the sequence. + // * Modifying or removing an existing method signature annotation is + // a breaking change. + // * Re-ordering existing method signature annotations is a breaking + // change. + repeated string method_signature = 1051; +} + +extend google.protobuf.ServiceOptions { + // The hostname for this service. + // This should be specified with no prefix or protocol. + // + // Example: + // + // service Foo { + // option (google.api.default_host) = "foo.googleapi.com"; + // ... + // } + string default_host = 1049; + + // OAuth scopes needed for the client. + // + // Example: + // + // service Foo { + // option (google.api.oauth_scopes) = \ + // "https://www.googleapis.com/auth/cloud-platform"; + // ... + // } + // + // If there is more than one scope, use a comma-separated string: + // + // Example: + // + // service Foo { + // option (google.api.oauth_scopes) = \ + // "https://www.googleapis.com/auth/cloud-platform," + // "https://www.googleapis.com/auth/monitoring"; + // ... + // } + string oauth_scopes = 1050; +} diff --git a/third_party/googleapis/google/api/field_behavior.proto b/third_party/googleapis/google/api/field_behavior.proto new file mode 100644 index 00000000000000..c4abe3b670f33c --- /dev/null +++ b/third_party/googleapis/google/api/field_behavior.proto @@ -0,0 +1,90 @@ +// Copyright 2018 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; + repeated google.api.FieldBehavior field_behavior = 1052; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; + + // Denotes that a (repeated) field is an unordered list. + // This indicates that the service may provide the elements of the list + // in any arbitrary order, rather than the order the user originally + // provided. Additionally, the list's order may or may not be stable. + UNORDERED_LIST = 6; + + // Denotes that this field returns a non-empty default value if not set. + // This indicates that if the user provides the empty value in a request, + // a non-empty value will be returned. The user will not be aware of what + // non-empty value to expect. + NON_EMPTY_DEFAULT = 7; +} diff --git a/third_party/googleapis/google/devtools/build/v1/build_events.proto b/third_party/googleapis/google/devtools/build/v1/build_events.proto index 8b29a4521cd170..c3bde2129efda4 100644 --- a/third_party/googleapis/google/devtools/build/v1/build_events.proto +++ b/third_party/googleapis/google/devtools/build/v1/build_events.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,13 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// syntax = "proto3"; package google.devtools.build.v1; -import "google/api/annotations.proto"; import "google/devtools/build/v1/build_status.proto"; import "google/protobuf/any.proto"; import "google/protobuf/timestamp.proto"; @@ -27,6 +25,7 @@ option go_package = "google.golang.org/genproto/googleapis/devtools/build/v1;bui option java_multiple_files = true; option java_outer_classname = "BuildEventProto"; option java_package = "com.google.devtools.build.v1"; +option php_namespace = "Google\\Cloud\\Build\\V1"; // An event representing some state change that occurred in the build. This // message does not include field for uniquely identifying an event. @@ -38,7 +37,7 @@ message BuildEvent { // invocation attempt replacing the current one a client is processing. int64 attempt_number = 1; - // Additional details about the invocation. + // Arbitrary details about the invocation attempt. google.protobuf.Any details = 2; } @@ -46,6 +45,9 @@ message BuildEvent { message InvocationAttemptFinished { // Final status of the invocation. BuildStatus invocation_status = 3; + + // Arbitrary details about the invocation attempt. + google.protobuf.Any details = 4; } // Notification that the build request is enqueued. @@ -60,6 +62,9 @@ message BuildEvent { message BuildFinished { // Final status of the build. BuildStatus status = 1; + + // Additional details about the Build. + google.protobuf.Any details = 2; } // Textual output written to standard output or standard error. @@ -112,8 +117,7 @@ message BuildEvent { // An invocation attempt has finished. InvocationAttemptFinished invocation_attempt_finished = 52; - // The build is enqueued (just inserted to the build queue or put back - // into the build queue due to a previous build failure). + // The build is enqueued. BuildEnqueued build_enqueued = 53; // The build has finished. Set when the build is terminated. diff --git a/third_party/googleapis/google/devtools/build/v1/build_status.proto b/third_party/googleapis/google/devtools/build/v1/build_status.proto index 414affc5aaeb55..ef9c441fe3d766 100644 --- a/third_party/googleapis/google/devtools/build/v1/build_status.proto +++ b/third_party/googleapis/google/devtools/build/v1/build_status.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,13 +11,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// syntax = "proto3"; package google.devtools.build.v1; -import "google/api/annotations.proto"; +import "google/protobuf/wrappers.proto"; import "google/protobuf/any.proto"; option cc_enable_arenas = true; @@ -25,7 +24,7 @@ option go_package = "google.golang.org/genproto/googleapis/devtools/build/v1;bui option java_multiple_files = true; option java_outer_classname = "BuildStatusProto"; option java_package = "com.google.devtools.build.v1"; - +option php_namespace = "Google\\Cloud\\Build\\V1"; // Status used for both invocation attempt and overall build completion. message BuildStatus { @@ -62,6 +61,14 @@ message BuildStatus { // The end result. Result result = 1; + // Final invocation ID of the build, if there was one. + // This field is only set on a status in BuildFinished event. + string final_invocation_id = 3; + + // Build tool exit code. Integer value returned by the executed build tool. + // Might not be available in some cases, e.g., a build timeout. + google.protobuf.Int32Value build_tool_exit_code = 4; + // Fine-grained diagnostic information to complement the status. google.protobuf.Any details = 2; } diff --git a/third_party/googleapis/google/devtools/build/v1/publish_build_event.proto b/third_party/googleapis/google/devtools/build/v1/publish_build_event.proto index 7aa3228c99c2d1..687f5da2ef08b6 100644 --- a/third_party/googleapis/google/devtools/build/v1/publish_build_event.proto +++ b/third_party/googleapis/google/devtools/build/v1/publish_build_event.proto @@ -1,4 +1,4 @@ -// Copyright 2018 Google LLC. +// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -11,13 +11,14 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// syntax = "proto3"; package google.devtools.build.v1; import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; import "google/devtools/build/v1/build_events.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/empty.proto"; @@ -27,7 +28,7 @@ option go_package = "google.golang.org/genproto/googleapis/devtools/build/v1;bui option java_multiple_files = true; option java_outer_classname = "BackendProto"; option java_package = "com.google.devtools.build.v1"; - +option php_namespace = "Google\\Cloud\\Build\\V1"; // A service for publishing BuildEvents. BuildEvents are generated by Build // Systems to record actions taken during a Build. Events occur in streams, @@ -45,6 +46,10 @@ option java_package = "com.google.devtools.build.v1"; // target objects produced via compilation, tests run, et cetera. There could be // more than one build tool stream for an invocation attempt of a build. service PublishBuildEvent { + option (google.api.default_host) = "buildeventservice.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform"; + // Publish a build event stating the new state of a build (typically from the // build queue). The BuildEnqueued event must be publishd before all other // events for the same build ID. @@ -55,7 +60,8 @@ service PublishBuildEvent { // The commit status of the request is reported by the RPC's util_status() // function. The error code is the canoncial error code defined in // //util/task/codes.proto. - rpc PublishLifecycleEvent(PublishLifecycleEventRequest) returns (google.protobuf.Empty) { + rpc PublishLifecycleEvent(PublishLifecycleEventRequest) + returns (google.protobuf.Empty) { option (google.api.http) = { post: "/v1/projects/{project_id=*}/lifecycleEvents:publish" body: "*" @@ -72,6 +78,8 @@ service PublishBuildEvent { body: "*" additional_bindings { post: "/v1/events:publish" body: "*" } }; + option (google.api.method_signature) = + "ordered_build_event,notification_keywords,project_id"; } } @@ -97,9 +105,9 @@ message PublishLifecycleEventRequest { // The interactivity of this build. ServiceLevel service_level = 1; - // The lifecycle build event. If this is a build tool event, the RPC will fail - // with INVALID_REQUEST. - OrderedBuildEvent build_event = 2; + // Required. The lifecycle build event. If this is a build tool event, the RPC + // will fail with INVALID_REQUEST. + OrderedBuildEvent build_event = 2 [(google.api.field_behavior) = REQUIRED]; // If the next event for this build or invocation (depending on the event // type) hasn't been published after this duration from when {build_event} @@ -114,10 +122,18 @@ message PublishLifecycleEventRequest { // BuildEnqueued/InvocationAttemptStarted. repeated string notification_keywords = 4; - // The project this build is associated with. + // Required. The project this build is associated with. // This should match the project used for the initial call to // PublishLifecycleEvent (containing a BuildEnqueued message). - string project_id = 6; + string project_id = 6 [(google.api.field_behavior) = REQUIRED]; + + // Whether to require a previously received matching parent lifecycle event + // for the current request's event before continuing processing. + // - InvocationAttemptStarted and BuildFinished events require a BuildEnqueued + // parent event. + // - InvocationAttemptFinished events require an InvocationAttemptStarted + // parent event. + bool check_preceding_lifecycle_events_present = 7; } // States which event has been committed. Any failure to commit will cause @@ -147,9 +163,10 @@ message OrderedBuildEvent { // Streaming request message for PublishBuildToolEventStream. message PublishBuildToolEventStreamRequest { - // The build event with position info. + // Required. The build event with position info. // New publishing clients should use this field rather than the 3 above. - OrderedBuildEvent ordered_build_event = 4; + OrderedBuildEvent ordered_build_event = 4 + [(google.api.field_behavior) = REQUIRED]; // The keywords to be attached to the notification which notifies the start // of a new build event stream. BES only reads this field when sequence_number @@ -157,8 +174,14 @@ message PublishBuildToolEventStreamRequest { // is empty, BES will not publish notification messages for this stream. repeated string notification_keywords = 5; - // The project this build is associated with. + // Required. The project this build is associated with. // This should match the project used for the initial call to // PublishLifecycleEvent (containing a BuildEnqueued message). - string project_id = 6; + string project_id = 6 [(google.api.field_behavior) = REQUIRED]; + + // Whether to require a previously received matching InvocationAttemptStarted + // event before continuing event processing for the event in the current + // request. BES only performs this check for events with sequence_number 1 + // i.e. the first event in the stream. + bool check_preceding_lifecycle_events_present = 7; }