Skip to content

Commit

Permalink
Use newer required protos for google apis
Browse files Browse the repository at this point in the history
fulcio and protobuf-specs need a small number of protos from
googleapis/googleapi but `com.google.api.grpc:proto-google-common-protos`
has gone out of date. We can go back to it if they update it.

Signed-off-by: Appu Goundan <[email protected]>
  • Loading branch information
loosebazooka committed Jul 16, 2024
1 parent 072302e commit 7661ff6
Show file tree
Hide file tree
Showing 5 changed files with 529 additions and 5 deletions.
10 changes: 5 additions & 5 deletions sigstore-java/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ dependencies {

implementation("io.github.erdtman:java-json-canonicalization:1.1")

// this requires inclusion of protos is src/main/proto
protobuf("dev.sigstore:protobuf-specs:0.3.2")
protobuf("com.google.api.grpc:proto-google-common-protos:2.41.0")

implementation(platform("com.google.protobuf:protobuf-bom:4.26.1"))
implementation(platform("com.google.protobuf:protobuf-bom:4.27.2"))
implementation("com.google.protobuf:protobuf-java-util")

// grpc deps
implementation(platform("io.grpc:grpc-bom:1.63.0"))
implementation(platform("io.grpc:grpc-bom:1.64.0"))
implementation("io.grpc:grpc-protobuf")
implementation("io.grpc:grpc-stub")
runtimeOnly("io.grpc:grpc-netty-shaded")
Expand Down Expand Up @@ -63,11 +63,11 @@ dependencies {

protobuf {
protoc {
artifact = "com.google.protobuf:protoc:4.26.1"
artifact = "com.google.protobuf:protoc:4.27.2"
}
plugins {
id("grpc") {
artifact = "io.grpc:protoc-gen-grpc-java:1.63.0"
artifact = "io.grpc:protoc-gen-grpc-java:1.64.0"
}
}
generateProtoTasks {
Expand Down
10 changes: 10 additions & 0 deletions sigstore-java/src/main/proto/google/api/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
These files are copied from https://github.com/googleapis/googleapis/ because the pre-compiled
version of these available from https://github.com/googleapis/api-common-protos as
`com.google.api.grpc:proto-google-common-protos` has gone out of date and I can't tell if there's
an intention on keeping up to date. We require `field_behavior.proto` for
`dev.sigstore:protobuf-specs` and {`annotations.proto`, `field_behavior.proto`, `http.proto`}
for `fulcio.proto`. This change is current required to keep our dependencies up to date. Newer
protobuf tools don't work with the very old `proto-google-common-protos` dependency.

The main issue with including these protos here are that a consumer of `sigstore-java` importing
the same protos from another library might experience some sort of dependency clashing.
31 changes: 31 additions & 0 deletions sigstore-java/src/main/proto/google/api/annotations.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright 2024 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/api/http.proto";
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 = "AnnotationsProto";
option java_package = "com.google.api";
option objc_class_prefix = "GAPI";

extend google.protobuf.MethodOptions {
// See `HttpRule`.
HttpRule http = 72295728;
}
104 changes: 104 additions & 0 deletions sigstore-java/src/main/proto/google/api/field_behavior.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// Copyright 2024 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 [packed = false];
}

// 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;

// Denotes that the field in a resource (a message annotated with
// google.api.resource) is used in the resource name to uniquely identify the
// resource. For AIP-compliant APIs, this should only be applied to the
// `name` field on the resource.
//
// This behavior should not be applied to references to other resources within
// the message.
//
// The identifier field of resources often have different field behavior
// depending on the request it is embedded in (e.g. for Create methods name
// is optional and unused, while for Update methods it is required). Instead
// of method-specific annotations, only `IDENTIFIER` is required.
IDENTIFIER = 8;
}
Loading

0 comments on commit 7661ff6

Please sign in to comment.