From 6bec0588a144b39d12bc8da92a1e407e7ac21c4b Mon Sep 17 00:00:00 2001 From: Edward McFarlane Date: Wed, 29 Jul 2026 14:53:13 +0100 Subject: [PATCH] Support protoopaque builds --- Makefile | 3 +++ error.go | 8 ++++---- go.mod | 8 ++++---- go.sum | 18 ++++++++---------- procedure.go | 4 ++-- spec.go | 4 ++-- wire.go | 8 ++++---- 7 files changed, 27 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index 84253a8..238b4e0 100644 --- a/Makefile +++ b/Makefile @@ -35,6 +35,9 @@ clean: ## Delete intermediate build artifacts .PHONY: test test: build $(BIN)/echo-plugin ## Run unit tests go test -vet=off -race -cover ./... + @# Also run against the Go Opaque API, which the protoopaque build tag selects + @# for the hybrid-generated Protobuf packages we depend on. + go test -vet=off -race -cover -tags protoopaque ./... .PHONY: build build: generate ## Build all packages diff --git a/error.go b/error.go index 1fe1bda..fb96bcc 100644 --- a/error.go +++ b/error.go @@ -113,15 +113,15 @@ func (e *Error) ToProto() *pluginrpcv1.Error { pluginrpcError := validateError(e) protoCode, err := pluginrpcError.Code().ToProto() if err != nil { - return &pluginrpcv1.Error{ + return pluginrpcv1.Error_builder{ Code: pluginrpcv1.Code_CODE_INTERNAL, Message: fmt.Sprintf("Error created with invalid code: %s: %s", e.underlying.Error(), err.Error()), - } + }.Build() } - return &pluginrpcv1.Error{ + return pluginrpcv1.Error_builder{ Code: protoCode, Message: pluginrpcError.Unwrap().Error(), - } + }.Build() } // Error implements error. diff --git a/go.mod b/go.mod index 89a8fd4..75412da 100644 --- a/go.mod +++ b/go.mod @@ -1,19 +1,19 @@ module pluginrpc.com/pluginrpc -go 1.21 +go 1.23 toolchain go1.23.0 require ( - buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.34.2-20240828222655-5345c0a56177.2 + buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1 github.com/mattn/go-isatty v0.0.20 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.9.0 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.36.11 ) require ( - buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 // indirect + buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20240717164558-a6c49f84cc0f.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect golang.org/x/sys v0.25.0 // indirect diff --git a/go.sum b/go.sum index b3121bc..7578de9 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,11 @@ -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2 h1:SZRVx928rbYZ6hEKUIN+vtGDkl7uotABRWGY4OAg5gM= -buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.34.2-20240717164558-a6c49f84cc0f.2/go.mod h1:ylS4c28ACSI59oJrOdW4pHS4n0Hw4TgSPHn8rpHl4Yw= -buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.34.2-20240828222655-5345c0a56177.2 h1:oSi+Adw4xvIjXrW8eY8QGR3sBdfWeY5HN/RefnRt52M= -buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.34.2-20240828222655-5345c0a56177.2/go.mod h1:GjH0gjlY/ns16X8d6eaXV2W+6IFwsO5Ly9WVnzyd1E0= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20240717164558-a6c49f84cc0f.1 h1:m9A4Dxb2yddxbZSEXFr0FwbvI4Cb8zsGtOqLY0QcEA0= +buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.11-20240717164558-a6c49f84cc0f.1/go.mod h1:tvtbpgaVXZX4g6Pn+AnzFycuRK3MOz5HJfEGeEllXYM= +buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1 h1:iGPvEJltOXUMANWf0zajcRcbiOXLD90ZwPUFvbcuv6Q= +buf.build/gen/go/pluginrpc/pluginrpc/protocolbuffers/go v1.36.11-20241007202033-cf42259fcbfc.1/go.mod h1:nWVKKRA29zdt4uvkjka3i/y4mkrswyWwiu0TbdX0zts= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -17,10 +17,8 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/procedure.go b/procedure.go index 95ee321..e0b5fee 100644 --- a/procedure.go +++ b/procedure.go @@ -57,10 +57,10 @@ func NewProcedureForProto(protoProcedure *pluginrpcv1.Procedure) (Procedure, err // NewProtoProcedure returns a new pluginrpcv1.Procedure for the given Procedure. func NewProtoProcedure(procedure Procedure) *pluginrpcv1.Procedure { - return &pluginrpcv1.Procedure{ + return pluginrpcv1.Procedure_builder{ Path: procedure.Path(), Args: procedure.Args(), - } + }.Build() } // ProcedureOption is an option for a new Procedure. diff --git a/spec.go b/spec.go index f74d6c5..efcde72 100644 --- a/spec.go +++ b/spec.go @@ -65,9 +65,9 @@ func NewProtoSpec(spec Spec) *pluginrpcv1.Spec { for i, procedure := range procedures { protoProcedures[i] = NewProtoProcedure(procedure) } - return &pluginrpcv1.Spec{ + return pluginrpcv1.Spec_builder{ Procedures: protoProcedures, - } + }.Build() } // MergeSpecs merges the given Specs. diff --git a/wire.go b/wire.go index ce72243..120f1f5 100644 --- a/wire.go +++ b/wire.go @@ -32,9 +32,9 @@ func marshalRequest(format Format, requestValue any) ([]byte, error) { if err != nil { return nil, err } - protoRequest := &pluginrpcv1.Request{ + protoRequest := pluginrpcv1.Request_builder{ Value: anyRequestValue, - } + }.Build() codec, err := codecForFormat(format) if err != nil { return nil, err @@ -77,10 +77,10 @@ func marshalResponse(format Format, responseValue any, err error) ([]byte, error return nil, err } } - protoResponse := &pluginrpcv1.Response{ + protoResponse := pluginrpcv1.Response_builder{ Value: anyResponseValue, Error: WrapError(err).ToProto(), - } + }.Build() codec, err := codecForFormat(format) if err != nil { return nil, err