From a0edb2e2ce32dc24d8f24a3865a05c3487334354 Mon Sep 17 00:00:00 2001 From: "app-token-plugins[bot]" <116026991+app-token-plugins[bot]@users.noreply.github.com> Date: Thu, 4 Jan 2024 10:10:00 -0500 Subject: [PATCH] Update grpc-ecosystem plugins (#995) New plugin versions found. Please review. --------- Co-authored-by: mfridman Co-authored-by: Michael Fridman --- .../gateway/v2.19.0/.dockerignore | 3 + .../grpc-ecosystem/gateway/v2.19.0/Dockerfile | 18 + .../gateway/v2.19.0/buf.plugin.yaml | 22 + .../separate_pkg_additional_imports.patch | 386 ++++++++++++++++++ .../openapiv2/v2.19.0/.dockerignore | 2 + .../openapiv2/v2.19.0/Dockerfile | 11 + .../openapiv2/v2.19.0/buf.plugin.yaml | 7 + .../gateway/v2.19.0/eliza/plugin.sum | 1 + .../gateway/v2.19.0/grpc-gateway/plugin.sum | 1 + .../gateway/v2.19.0/petapis/plugin.sum | 1 + .../openapiv2/v2.19.0/eliza/plugin.sum | 1 + .../openapiv2/v2.19.0/petapis/plugin.sum | 1 + 12 files changed, 454 insertions(+) create mode 100644 plugins/grpc-ecosystem/gateway/v2.19.0/.dockerignore create mode 100644 plugins/grpc-ecosystem/gateway/v2.19.0/Dockerfile create mode 100644 plugins/grpc-ecosystem/gateway/v2.19.0/buf.plugin.yaml create mode 100644 plugins/grpc-ecosystem/gateway/v2.19.0/separate_pkg_additional_imports.patch create mode 100644 plugins/grpc-ecosystem/openapiv2/v2.19.0/.dockerignore create mode 100644 plugins/grpc-ecosystem/openapiv2/v2.19.0/Dockerfile create mode 100644 plugins/grpc-ecosystem/openapiv2/v2.19.0/buf.plugin.yaml create mode 100644 tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/eliza/plugin.sum create mode 100644 tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/grpc-gateway/plugin.sum create mode 100644 tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/petapis/plugin.sum create mode 100644 tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/eliza/plugin.sum create mode 100644 tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/petapis/plugin.sum diff --git a/plugins/grpc-ecosystem/gateway/v2.19.0/.dockerignore b/plugins/grpc-ecosystem/gateway/v2.19.0/.dockerignore new file mode 100644 index 000000000..12458999e --- /dev/null +++ b/plugins/grpc-ecosystem/gateway/v2.19.0/.dockerignore @@ -0,0 +1,3 @@ +* +!Dockerfile +!separate_pkg_additional_imports.patch diff --git a/plugins/grpc-ecosystem/gateway/v2.19.0/Dockerfile b/plugins/grpc-ecosystem/gateway/v2.19.0/Dockerfile new file mode 100644 index 000000000..7092ae24b --- /dev/null +++ b/plugins/grpc-ecosystem/gateway/v2.19.0/Dockerfile @@ -0,0 +1,18 @@ +# syntax=docker/dockerfile:1.4 +FROM golang:1.21.5-bookworm AS build + +WORKDIR /tmp +RUN git clone --depth 1 --branch v2.19.0 https://github.com/grpc-ecosystem/grpc-gateway.git +COPY --link separate_pkg_additional_imports.patch /tmp/separate_pkg_additional_imports.patch +WORKDIR /tmp/grpc-gateway +RUN git apply /tmp/separate_pkg_additional_imports.patch +WORKDIR /tmp/grpc-gateway/protoc-gen-grpc-gateway +RUN --mount=type=cache,target=/go/pkg/mod \ + CGO_ENABLED=0 \ + go build -ldflags "-s -w" -trimpath + +FROM scratch +COPY --from=build --link --chown=root:root /etc/passwd /etc/passwd +COPY --from=build --link /tmp/grpc-gateway/protoc-gen-grpc-gateway . +USER nobody +ENTRYPOINT [ "/protoc-gen-grpc-gateway" ] diff --git a/plugins/grpc-ecosystem/gateway/v2.19.0/buf.plugin.yaml b/plugins/grpc-ecosystem/gateway/v2.19.0/buf.plugin.yaml new file mode 100644 index 000000000..ffb88da1c --- /dev/null +++ b/plugins/grpc-ecosystem/gateway/v2.19.0/buf.plugin.yaml @@ -0,0 +1,22 @@ +version: v1 +name: buf.build/grpc-ecosystem/gateway +plugin_version: v2.19.0 +source_url: https://github.com/grpc-ecosystem/grpc-gateway +integration_guide_url: https://github.com/grpc-ecosystem/grpc-gateway#usage +description: gRPC to JSON proxy generator following the gRPC HTTP spec. +output_languages: + - go +registry: + go: + deps: + - module: github.com/grpc-ecosystem/grpc-gateway/v2 + version: v2.19.0 + opts: + - paths=source_relative + - standalone=true + - separate_package=true +deps: + - plugin: buf.build/protocolbuffers/go:v1.32.0 + - plugin: buf.build/grpc/go:v1.3.0 +spdx_license_id: BSD-3-Clause +license_url: https://github.com/grpc-ecosystem/grpc-gateway/blob/v2.19.0/LICENSE.txt diff --git a/plugins/grpc-ecosystem/gateway/v2.19.0/separate_pkg_additional_imports.patch b/plugins/grpc-ecosystem/gateway/v2.19.0/separate_pkg_additional_imports.patch new file mode 100644 index 000000000..32f0d3f7a --- /dev/null +++ b/plugins/grpc-ecosystem/gateway/v2.19.0/separate_pkg_additional_imports.patch @@ -0,0 +1,386 @@ +diff --git a/internal/descriptor/registry.go b/internal/descriptor/registry.go +index 1cfc4b02..11e1368d 100644 +--- a/internal/descriptor/registry.go ++++ b/internal/descriptor/registry.go +@@ -151,6 +151,13 @@ type Registry struct { + // allowPatchFeature determines whether to use PATCH feature involving update masks (using google.protobuf.FieldMask). + allowPatchFeature bool + ++ // separatePackage determines whether to output the generated code into a separate package. ++ separatePackage bool ++ ++ // additionalImports is a list of additional imports to be added to the generated code. ++ // N.B. additional imports is not a flag option ++ additionalImports []string ++ + // preserveRPCOrder, if true, will ensure the order of paths emitted in openapi swagger files mirror + // the order of RPC methods found in proto files. If false, emitted paths will be ordered alphabetically. + preserveRPCOrder bool +@@ -244,7 +251,9 @@ func (r *Registry) loadFile(filePath string, file *protogen.File) { + if r.standalone { + pkg.Alias = "ext" + cases.Title(language.AmericanEnglish).String(pkg.Name) + } +- ++ if r.separatePackage { ++ pkg.Name += "gateway" ++ } + if err := r.ReserveGoPackageAlias(pkg.Name, pkg.Path); err != nil { + for i := 0; ; i++ { + alias := fmt.Sprintf("%s_%d", pkg.Name, i) +@@ -838,6 +847,26 @@ func (r *Registry) GetAllowPatchFeature() bool { + return r.allowPatchFeature + } + ++// SetSeparatePackage sets separatePackage ++func (r *Registry) SetSeparatePackage(use bool) { ++ r.separatePackage = use ++} ++ ++// GetSeparatePackage returns separatePackage ++func (r *Registry) GetSeparatePackage() bool { ++ return r.separatePackage ++} ++ ++// SetAdditionalImports sets additionalImports ++func (r *Registry) SetAdditionalImports(imports []string) { ++ r.additionalImports = imports ++} ++ ++// GetAdditionalImports returns additionalImports ++func (r *Registry) GetAdditionalImports() []string { ++ return r.additionalImports ++} ++ + // SetPreserveRPCOrder sets preserveRPCOrder + func (r *Registry) SetPreserveRPCOrder(preserve bool) { + r.preserveRPCOrder = preserve +diff --git a/internal/descriptor/services.go b/internal/descriptor/services.go +index 0ff28d99..f5b409bc 100644 +--- a/internal/descriptor/services.go ++++ b/internal/descriptor/services.go +@@ -3,6 +3,7 @@ package descriptor + import ( + "errors" + "fmt" ++ "path/filepath" + "strings" + + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/httprule" +@@ -20,6 +21,7 @@ func (r *Registry) loadServices(file *File) error { + grpclog.Infof("Loading services from %s", file.GetName()) + } + var svcs []*Service ++ var additionalImports []string + for _, sd := range file.GetService() { + if grpclog.V(2) { + grpclog.Infof("Registering %s", sd.GetName()) +@@ -29,6 +31,35 @@ func (r *Registry) loadServices(file *File) error { + ServiceDescriptorProto: sd, + ForcePrefixedName: r.standalone, + } ++ if r.separatePackage { ++ // when generating a separate package for the gateway, we need to generate an import statement ++ // for the gRPC stubs that are no longer in the same package. This is done by adding the grpc ++ // package to the additionalImports list. In order to prepare a valid import statement, we'll replace ++ // the source package name, something like: ../pet/v1/v1petgateway with ../pet/v1/v1petgrpc ++ const ( ++ baseTypePackageName = "protocolbuffers" ++ baseTypePackageSubPath = baseTypePackageName + "/go" ++ grpcPackageName = "grpc" ++ grpcPackageSubPath = grpcPackageName + "/go" ++ ) ++ packageName := strings.TrimSuffix(svc.File.GoPkg.Name, "gateway") + grpcPackageName ++ svc.GRPCFile = &File{ ++ GoPkg: GoPackage{ ++ // additionally, as the `go_package` option is passed through from the generator, and can only be ++ // set the one time, without making major changes, we'll use the package name sent through the ++ // options as a basis, and replace the source package name with the grpc package name. ++ Path: strings.Replace( ++ filepath.Join(svc.File.GoPkg.Path, packageName), ++ baseTypePackageSubPath, ++ grpcPackageSubPath, ++ 1, ++ ), ++ Name: strings.Replace(packageName, baseTypePackageSubPath, grpcPackageSubPath, 1), ++ }, ++ } ++ additionalImports = append(additionalImports, svc.GRPCFile.GoPkg.Path) ++ } ++ r.SetAdditionalImports(additionalImports) + for _, md := range sd.GetMethod() { + if grpclog.V(2) { + grpclog.Infof("Processing %s.%s", sd.GetName(), md.GetName()) +diff --git a/internal/descriptor/types.go b/internal/descriptor/types.go +index 5a43472b..c0c02966 100644 +--- a/internal/descriptor/types.go ++++ b/internal/descriptor/types.go +@@ -164,6 +164,9 @@ type Service struct { + *descriptorpb.ServiceDescriptorProto + // File is the file where this service is defined. + File *File ++ // GRPCFile is the file where this service's gRPC stubs are defined. ++ // This is nil if the service's gRPC stubs are defined alongside the messages. ++ GRPCFile *File + // Methods is the list of methods defined in this service. + Methods []*Method + // ForcePrefixedName when set to true, prefixes a type with a package prefix. +@@ -173,7 +176,9 @@ type Service struct { + // FQSN returns the fully qualified service name of this service. + func (s *Service) FQSN() string { + components := []string{""} +- if s.File.Package != nil { ++ if s.GRPCFile != nil && s.GRPCFile.GetPackage() != "" { ++ components = append(components, s.GRPCFile.GetPackage()) ++ } else if s.File.Package != nil { + components = append(components, s.File.GetPackage()) + } + components = append(components, s.GetName()) +@@ -185,7 +190,11 @@ func (s *Service) InstanceName() string { + if !s.ForcePrefixedName { + return s.GetName() + } +- return fmt.Sprintf("%s.%s", s.File.Pkg(), s.GetName()) ++ pkg := s.File.Pkg() ++ if s.GRPCFile != nil { ++ pkg = s.GRPCFile.Pkg() ++ } ++ return fmt.Sprintf("%s.%s", pkg, s.GetName()) + } + + // ClientConstructorName returns name of the Client constructor with package prefix if needed +@@ -194,7 +203,11 @@ func (s *Service) ClientConstructorName() string { + if !s.ForcePrefixedName { + return constructor + } +- return fmt.Sprintf("%s.%s", s.File.Pkg(), constructor) ++ pkg := s.File.Pkg() ++ if s.GRPCFile != nil { ++ pkg = s.GRPCFile.Pkg() ++ } ++ return fmt.Sprintf("%s.%s", pkg, constructor) + } + + // Method wraps descriptorpb.MethodDescriptorProto for richer features. +diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator.go b/protoc-gen-grpc-gateway/internal/gengateway/generator.go +index 62766254..033d1c09 100644 +--- a/protoc-gen-grpc-gateway/internal/gengateway/generator.go ++++ b/protoc-gen-grpc-gateway/internal/gengateway/generator.go +@@ -5,6 +5,8 @@ import ( + "fmt" + "go/format" + "path" ++ "path/filepath" ++ "strings" + + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" + gen "github.com/grpc-ecosystem/grpc-gateway/v2/internal/generator" +@@ -22,11 +24,18 @@ type generator struct { + registerFuncSuffix string + allowPatchFeature bool + standalone bool ++ separatePackage bool + } + + // New returns a new generator which generates grpc gateway files. +-func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix string, +- allowPatchFeature, standalone bool) gen.Generator { ++func New( ++ reg *descriptor.Registry, ++ useRequestContext bool, ++ registerFuncSuffix string, ++ allowPatchFeature bool, ++ standalone bool, ++ separatePackage bool, ++) gen.Generator { + var imports []descriptor.GoPackage + for _, pkgpath := range []string{ + "context", +@@ -65,6 +74,7 @@ func New(reg *descriptor.Registry, useRequestContext bool, registerFuncSuffix st + registerFuncSuffix: registerFuncSuffix, + allowPatchFeature: allowPatchFeature, + standalone: standalone, ++ separatePackage: separatePackage, + } + } + +@@ -90,10 +100,19 @@ func (g *generator) Generate(targets []*descriptor.File) ([]*descriptor.Response + grpclog.Errorf("%v: %s", err, code) + return nil, err + } ++ goPkg := file.GoPkg ++ fileNamePrefix := file.GeneratedFilenamePrefix ++ if g.separatePackage { ++ goPkg = descriptor.GoPackage{ ++ Path: filepath.Join(file.GoPkg.Path, file.GoPkg.Name), ++ Name: file.GoPkg.Name, ++ } ++ fileNamePrefix = path.Join(file.GeneratedFilenamePrefix, file.GoPkg.Name, filepath.Base(file.GeneratedFilenamePrefix)) ++ } + files = append(files, &descriptor.ResponseFile{ +- GoPkg: file.GoPkg, ++ GoPkg: goPkg, + CodeGeneratorResponse_File: &pluginpb.CodeGeneratorResponse_File{ +- Name: proto.String(file.GeneratedFilenamePrefix + ".pb.gw.go"), ++ Name: proto.String(fileNamePrefix + ".pb.gw.go"), + Content: proto.String(string(formatted)), + }, + }) +@@ -109,6 +128,14 @@ func (g *generator) generate(file *descriptor.File) (string, error) { + imports = append(imports, pkg) + } + ++ for _, additionalImport := range g.reg.GetAdditionalImports() { ++ elems := strings.Split(additionalImport, "/") ++ imports = append(imports, descriptor.GoPackage{ ++ Path: additionalImport, ++ Name: elems[len(elems)-1], ++ }) ++ } ++ + if g.standalone { + imports = append(imports, file.GoPkg) + } +diff --git a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go +index 2c5fe023..816fbca1 100644 +--- a/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go ++++ b/protoc-gen-grpc-gateway/internal/gengateway/generator_test.go +@@ -1,6 +1,8 @@ + package gengateway + + import ( ++ "path/filepath" ++ "strings" + "testing" + + "github.com/grpc-ecosystem/grpc-gateway/v2/internal/descriptor" +@@ -96,3 +98,75 @@ func TestGenerator_Generate(t *testing.T) { + t.Fatalf("invalid name %q, expected %q", gotName, expectedName) + } + } ++ ++func TestGenerator_GenerateSeparatePackage(t *testing.T) { ++ reg := descriptor.NewRegistry() ++ reg.SetSeparatePackage(true) ++ reg.SetStandalone(true) ++ g := New(reg, true, "Handler", true, true, true) ++ targets := []*descriptor.File{ ++ crossLinkFixture(newExampleFileDescriptorWithGoPkg(&descriptor.GoPackage{ ++ Path: "example.com/path/to/example", ++ Name: "example" + "gateway", ++ Alias: "extexample", ++ }, "path/to/example")), ++ } ++ // Set ForcePrefixedName (usually set when standalone=true). ++ for _, f := range targets { ++ for _, msg := range f.Messages { ++ msg.ForcePrefixedName = true ++ for _, field := range msg.Fields { ++ field.ForcePrefixedName = true ++ } ++ } ++ for _, enum := range f.Enums { ++ enum.ForcePrefixedName = true ++ } ++ imports := make([]string, 0) ++ for _, svc := range f.Services { ++ packageName := strings.TrimSuffix(svc.File.GoPkg.Name, "gateway") + "grpc" ++ svc.ForcePrefixedName = true ++ // replicates behavior in internal/descriptor/services.go (loadServices) ++ svc.GRPCFile = &descriptor.File{ ++ GoPkg: descriptor.GoPackage{ ++ Path: strings.Replace( ++ filepath.Join(svc.File.GoPkg.Path, packageName), ++ "protocolbuffers/go", ++ "grpc/go", ++ 1, ++ ), ++ Name: strings.Replace(packageName, "protocolbuffers/go", "grpc/go", 1), ++ }, ++ } ++ imports = append(reg.GetAdditionalImports(), svc.GRPCFile.GoPkg.Path) ++ } ++ reg.SetAdditionalImports(imports) ++ } ++ result, err := g.Generate(targets) ++ if err != nil { ++ t.Fatalf("failed to generate stubs: %v", err) ++ } ++ if len(result) != 1 { ++ t.Fatalf("expected to generate one file, got: %d", len(result)) ++ } ++ expectedName := "path/to/example/examplegateway/example.pb.gw.go" ++ gotName := result[0].GetName() ++ if gotName != expectedName { ++ t.Fatalf("invalid name %q, expected %q", gotName, expectedName) ++ } ++ if result[0].GoPkg.Path != "example.com/path/to/example/examplegateway" { ++ t.Fatalf("invalid path %q, expected %q", result[0].GoPkg.Path, "example.com/path/to/example/examplegateway") ++ } ++ if result[0].GoPkg.Name != "examplegateway" { ++ t.Fatalf("invalid name %q, expected %q", result[0].GoPkg.Name, "examplegateway") ++ } ++ // Require the two dependencies to be declared as imported packages ++ for _, expectedImport := range []string{ ++ `extexample "example.com/path/to/example"`, ++ `"example.com/path/to/example/examplegrpc"`, ++ } { ++ if !strings.Contains(result[0].GetContent(), expectedImport) { ++ t.Fatalf("expected to find import %q in the generated file", expectedImport) ++ } ++ } ++} +diff --git a/protoc-gen-grpc-gateway/main.go b/protoc-gen-grpc-gateway/main.go +index 5a1e6977..7e89ad1c 100644 +--- a/protoc-gen-grpc-gateway/main.go ++++ b/protoc-gen-grpc-gateway/main.go +@@ -10,6 +10,7 @@ + package main + + import ( ++ "errors" + "flag" + "fmt" + "os" +@@ -35,6 +36,7 @@ var ( + versionFlag = flag.Bool("version", false, "print the current version") + warnOnUnboundMethods = flag.Bool("warn_on_unbound_methods", false, "emit a warning message if an RPC method has no HttpRule annotation") + generateUnboundMethods = flag.Bool("generate_unbound_methods", false, "generate proxy methods even for RPC methods that have no HttpRule annotation") ++ separatePackage = flag.Bool("separate_package", false, "generate gateway code to v1gateway package (requires standalone=true).") + + _ = flag.Bool("logtostderr", false, "Legacy glog compatibility. This flag is a no-op, you can safely remove it") + ) +@@ -58,15 +60,22 @@ func main() { + ParamFunc: flag.CommandLine.Set, + }.Run(func(gen *protogen.Plugin) error { + reg := descriptor.NewRegistry() +- + if err := applyFlags(reg); err != nil { + return err + } +- ++ if *separatePackage && !*standalone { ++ return errors.New("option separate_package=true must be specified with standalone=true") ++ } ++ generator := gengateway.New( ++ reg, ++ *useRequestContext, ++ *registerFuncSuffix, ++ *allowPatchFeature, ++ *standalone, ++ *separatePackage, ++ ) + codegenerator.SetSupportedFeaturesOnPluginGen(gen) + +- generator := gengateway.New(reg, *useRequestContext, *registerFuncSuffix, *allowPatchFeature, *standalone) +- + if grpclog.V(1) { + grpclog.Infof("Parsing code generator request") + } +@@ -120,6 +129,7 @@ func applyFlags(reg *descriptor.Registry) error { + } + reg.SetStandalone(*standalone) + reg.SetAllowDeleteBody(*allowDeleteBody) ++ reg.SetSeparatePackage(*separatePackage) + + flag.Visit(func(f *flag.Flag) { + if f.Name == "allow_repeated_fields_in_body" { diff --git a/plugins/grpc-ecosystem/openapiv2/v2.19.0/.dockerignore b/plugins/grpc-ecosystem/openapiv2/v2.19.0/.dockerignore new file mode 100644 index 000000000..5d0f124ff --- /dev/null +++ b/plugins/grpc-ecosystem/openapiv2/v2.19.0/.dockerignore @@ -0,0 +1,2 @@ +* +!Dockerfile diff --git a/plugins/grpc-ecosystem/openapiv2/v2.19.0/Dockerfile b/plugins/grpc-ecosystem/openapiv2/v2.19.0/Dockerfile new file mode 100644 index 000000000..24b41ba5a --- /dev/null +++ b/plugins/grpc-ecosystem/openapiv2/v2.19.0/Dockerfile @@ -0,0 +1,11 @@ +# syntax=docker/dockerfile:1.4 +FROM golang:1.21.5-bookworm AS build +RUN --mount=type=cache,target=/go/pkg/mod \ + CGO_ENABLED=0 \ + go install -ldflags="-s -w" -trimpath github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.19.0 + +FROM scratch +COPY --from=build --link --chown=root:root /etc/passwd /etc/passwd +COPY --from=build --link /go/bin/protoc-gen-openapiv2 / +USER nobody +ENTRYPOINT [ "/protoc-gen-openapiv2" ] diff --git a/plugins/grpc-ecosystem/openapiv2/v2.19.0/buf.plugin.yaml b/plugins/grpc-ecosystem/openapiv2/v2.19.0/buf.plugin.yaml new file mode 100644 index 000000000..740fd1f73 --- /dev/null +++ b/plugins/grpc-ecosystem/openapiv2/v2.19.0/buf.plugin.yaml @@ -0,0 +1,7 @@ +version: v1 +name: buf.build/grpc-ecosystem/openapiv2 +plugin_version: v2.19.0 +source_url: https://github.com/grpc-ecosystem/grpc-gateway +description: Generates OpenAPI definitions for Protobuf services. +spdx_license_id: BSD-3-Clause +license_url: https://github.com/grpc-ecosystem/grpc-gateway/blob/v2.19.0/LICENSE.txt diff --git a/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/eliza/plugin.sum b/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/eliza/plugin.sum new file mode 100644 index 000000000..7d9c0f31d --- /dev/null +++ b/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/eliza/plugin.sum @@ -0,0 +1 @@ +h1:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= diff --git a/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/grpc-gateway/plugin.sum b/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/grpc-gateway/plugin.sum new file mode 100644 index 000000000..fb2effdf8 --- /dev/null +++ b/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/grpc-gateway/plugin.sum @@ -0,0 +1 @@ +h1:CYhAyOwRIsla+BTC/XTtip7z7w+bai2y6WLhqX7VdgI= diff --git a/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/petapis/plugin.sum b/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/petapis/plugin.sum new file mode 100644 index 000000000..7d9c0f31d --- /dev/null +++ b/tests/testdata/buf.build/grpc-ecosystem/gateway/v2.19.0/petapis/plugin.sum @@ -0,0 +1 @@ +h1:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= diff --git a/tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/eliza/plugin.sum b/tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/eliza/plugin.sum new file mode 100644 index 000000000..06875f679 --- /dev/null +++ b/tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/eliza/plugin.sum @@ -0,0 +1 @@ +h1:i/zjVkZaxoFgKQESrbFwisCaDNzRLPWmUND0XCR+IlI= diff --git a/tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/petapis/plugin.sum b/tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/petapis/plugin.sum new file mode 100644 index 000000000..7b9624ad7 --- /dev/null +++ b/tests/testdata/buf.build/grpc-ecosystem/openapiv2/v2.19.0/petapis/plugin.sum @@ -0,0 +1 @@ +h1:SybfdW8LTRLCVcNSux9/dP9iFEQFhWbADwdaILiM0EY=