From 3fa4008e075a5d05bd46b126fb0dc96e0e598af6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Gronowski?= Date: Tue, 29 Sep 2026 17:48:57 +0200 Subject: [PATCH] cmd/mobyextgen: Use a distinctive mobyextcontract import alias MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Contract packages whose names matched generated imports produced uncompilable adapters because both imports used the same alias. Go type identities and the protobuf wire format are unchanged. Signed-off-by: Paweł Gronowski --- cmd/mobyextgen/generation_test.go | 6 +- cmd/mobyextgen/model.go | 1 - cmd/mobyextgen/parse.go | 8 +-- cmd/mobyextgen/wire.go | 2 +- example/greeter/v0/protogen/wire.gen.go | 30 ++++----- .../launcher/echo/v1/protogen/wire.gen.go | 30 ++++----- sdk/sdkapi/protogen/wire.gen.go | 62 +++++++++---------- 7 files changed, 69 insertions(+), 70 deletions(-) diff --git a/cmd/mobyextgen/generation_test.go b/cmd/mobyextgen/generation_test.go index 7997e9a..30a3a3b 100644 --- a/cmd/mobyextgen/generation_test.go +++ b/cmd/mobyextgen/generation_test.go @@ -131,8 +131,8 @@ type Runtime interface{ Do(ctx interface{}, req *Req) (*Resp, error) } wire, err := emitWire(pt) assert.NilError(t, err) src := string(wire) - assert.Check(t, strings.Contains(src, "func RegisterServer(r grpc.ServiceRegistrar, impl p.Runtime)"), src) - assert.Check(t, strings.Contains(src, "func NewClient(conn grpc.ClientConnInterface) p.Runtime"), src) + assert.Check(t, strings.Contains(src, "func RegisterServer(r grpc.ServiceRegistrar, impl mobyextcontract.Runtime)"), src) + assert.Check(t, strings.Contains(src, "func NewClient(conn grpc.ClientConnInterface) mobyextcontract.Runtime"), src) assert.Check(t, !strings.Contains(src, "ServerPoint"), "a non-point contract must not emit point registrations:\n%s", src) assert.Check(t, !strings.Contains(src, "clientpoint"), "a non-point contract must not import the point packages:\n%s", src) assert.Check(t, !strings.Contains(src, "servicev0"), "an unpublished contract must not emit typed publication APIs:\n%s", src) @@ -163,7 +163,7 @@ var Point = extensions.DefinePoint[Runtime]("my.proto.pkg.v1") assert.Check(t, strings.Contains(src, "var ClientPoint = clientpoint.Registration{"), src) assert.Check(t, strings.Contains(src, "func NewRuntimeClient(cc grpc.ClientConnInterface) RuntimeClient"), "ordinary point must retain its raw gRPC client:\n%s", src) - assert.Check(t, strings.Contains(src, "func NewClient(conn grpc.ClientConnInterface) p.Runtime"), + assert.Check(t, strings.Contains(src, "func NewClient(conn grpc.ClientConnInterface) mobyextcontract.Runtime"), "ordinary point must expose its handwritten client:\n%s", src) assert.Check(t, !strings.Contains(src, "servicev0") && !strings.Contains(src, "func Bind("), "ordinary Point transport must not contain extension-side publication bindings:\n%s", src) diff --git a/cmd/mobyextgen/model.go b/cmd/mobyextgen/model.go index 969ee4d..8ad2217 100644 --- a/cmd/mobyextgen/model.go +++ b/cmd/mobyextgen/model.go @@ -6,7 +6,6 @@ package main // model type point struct { - pkgName string // Go package name importPath string // package import path protoPath string // module-relative path of the .proto licenseHeader string // SPDX notices from the contract interface's source file diff --git a/cmd/mobyextgen/parse.go b/cmd/mobyextgen/parse.go index 7675a74..c3a7fce 100644 --- a/cmd/mobyextgen/parse.go +++ b/cmd/mobyextgen/parse.go @@ -38,21 +38,21 @@ func parseContract(dir, serviceIdentity string) (point, error) { } var files []*ast.File - var pkgName string + foundPackage := false for name, pkg := range pkgs { if strings.HasSuffix(name, "_test") { continue } - pkgName = name + foundPackage = true for _, f := range pkg.Files { files = append(files, f) } } - if pkgName == "" { + if !foundPackage { return point{}, fmt.Errorf("no package found in %s", dir) } - pt := point{pkgName: pkgName} + var pt point if serviceIdentity != "" { pkg, service, ok := splitServiceIdentity(serviceIdentity) diff --git a/cmd/mobyextgen/wire.go b/cmd/mobyextgen/wire.go index bfff345..6af9ae3 100644 --- a/cmd/mobyextgen/wire.go +++ b/cmd/mobyextgen/wire.go @@ -14,7 +14,7 @@ import ( func emitWire(pt point) ([]byte, error) { var b strings.Builder - cpkg := pt.pkgName + const cpkg = "mobyextcontract" svc, iface := pt.service, pt.iface b.WriteString(pt.licenseHeader) fmt.Fprintln(&b, "// Code generated by mobyextgen. DO NOT EDIT.") diff --git a/example/greeter/v0/protogen/wire.gen.go b/example/greeter/v0/protogen/wire.gen.go index cc3f62c..97a6ec5 100644 --- a/example/greeter/v0/protogen/wire.gen.go +++ b/example/greeter/v0/protogen/wire.gen.go @@ -8,7 +8,7 @@ import ( context "context" extensions "github.com/moby/extensions" clientpoint "github.com/moby/extensions/clientpoint" - greeterv0 "github.com/moby/extensions/example/greeter/v0" + mobyextcontract "github.com/moby/extensions/example/greeter/v0" serverpoint "github.com/moby/extensions/serverpoint" grpc "google.golang.org/grpc" ) @@ -76,29 +76,29 @@ func (c *serviceClient) Greet(ctx context.Context, in *HelloRequest, opts ...grp // ServerPoint serves the Greeter point: it registers the point's gRPC service for // a provider with an SDK server. A binary passes it to (*sdk.Server).Register. var ServerPoint = serverpoint.Registration{ - Point: greeterv0.Point.ID(), + Point: mobyextcontract.Point.ID(), Register: func(r grpc.ServiceRegistrar, impl any) { - r.RegisterService(&serviceDesc, &grpcServer{impl: impl.(greeterv0.Greeter)}) + r.RegisterService(&serviceDesc, &grpcServer{impl: impl.(mobyextcontract.Greeter)}) }, } // ClientProvider builds a broker provider for the Greeter point from an // out-of-process gRPC connection. func ClientProvider(conn grpc.ClientConnInterface) extensions.Provider { - return greeterv0.Point.Provide(NewClient(conn)) + return mobyextcontract.Point.Provide(NewClient(conn)) } // ClientPoint registers ClientProvider for the Greeter point with a host. -var ClientPoint = clientpoint.Registration{Point: greeterv0.Point.ID(), Provider: ClientProvider} +var ClientPoint = clientpoint.Registration{Point: mobyextcontract.Point.ID(), Provider: ClientProvider} -// NewClient returns a greeterv0.Greeter that calls the Greeter point over conn. -func NewClient(conn grpc.ClientConnInterface) greeterv0.Greeter { +// NewClient returns a mobyextcontract.Greeter that calls the Greeter point over conn. +func NewClient(conn grpc.ClientConnInterface) mobyextcontract.Greeter { return &grpcClient{client: NewGreeterClient(conn)} } // grpcServer serves an implementation of the contract's Go interface. type grpcServer struct { - impl greeterv0.Greeter + impl mobyextcontract.Greeter } func (s *grpcServer) Greet(ctx context.Context, req *HelloRequest) (*HelloReply, error) { @@ -113,7 +113,7 @@ type grpcClient struct { client GreeterClient } -func (c *grpcClient) Greet(ctx context.Context, req *greeterv0.HelloRequest) (*greeterv0.HelloReply, error) { +func (c *grpcClient) Greet(ctx context.Context, req *mobyextcontract.HelloRequest) (*mobyextcontract.HelloReply, error) { resp, err := c.client.Greet(ctx, helloRequestToProto(req)) if err != nil { return nil, err @@ -121,7 +121,7 @@ func (c *grpcClient) Greet(ctx context.Context, req *greeterv0.HelloRequest) (*g return helloReplyFromProto(resp), nil } -func helloReplyToProto(in *greeterv0.HelloReply) *HelloReply { +func helloReplyToProto(in *mobyextcontract.HelloReply) *HelloReply { if in == nil { return nil } @@ -130,16 +130,16 @@ func helloReplyToProto(in *greeterv0.HelloReply) *HelloReply { return out } -func helloReplyFromProto(in *HelloReply) *greeterv0.HelloReply { +func helloReplyFromProto(in *HelloReply) *mobyextcontract.HelloReply { if in == nil { return nil } - out := &greeterv0.HelloReply{} + out := &mobyextcontract.HelloReply{} out.Message = in.GetMessage() return out } -func helloRequestToProto(in *greeterv0.HelloRequest) *HelloRequest { +func helloRequestToProto(in *mobyextcontract.HelloRequest) *HelloRequest { if in == nil { return nil } @@ -148,11 +148,11 @@ func helloRequestToProto(in *greeterv0.HelloRequest) *HelloRequest { return out } -func helloRequestFromProto(in *HelloRequest) *greeterv0.HelloRequest { +func helloRequestFromProto(in *HelloRequest) *mobyextcontract.HelloRequest { if in == nil { return nil } - out := &greeterv0.HelloRequest{} + out := &mobyextcontract.HelloRequest{} out.Name = in.GetName() return out } diff --git a/internal/launcher/echo/v1/protogen/wire.gen.go b/internal/launcher/echo/v1/protogen/wire.gen.go index 41f3760..250bb50 100644 --- a/internal/launcher/echo/v1/protogen/wire.gen.go +++ b/internal/launcher/echo/v1/protogen/wire.gen.go @@ -8,7 +8,7 @@ import ( context "context" extensions "github.com/moby/extensions" clientpoint "github.com/moby/extensions/clientpoint" - echov1 "github.com/moby/extensions/internal/launcher/echo/v1" + mobyextcontract "github.com/moby/extensions/internal/launcher/echo/v1" serverpoint "github.com/moby/extensions/serverpoint" grpc "google.golang.org/grpc" ) @@ -76,29 +76,29 @@ func (c *serviceClient) Echo(ctx context.Context, in *EchoRequest, opts ...grpc. // ServerPoint serves the Echo point: it registers the point's gRPC service for // a provider with an SDK server. A binary passes it to (*sdk.Server).Register. var ServerPoint = serverpoint.Registration{ - Point: echov1.Point.ID(), + Point: mobyextcontract.Point.ID(), Register: func(r grpc.ServiceRegistrar, impl any) { - r.RegisterService(&serviceDesc, &grpcServer{impl: impl.(echov1.Echo)}) + r.RegisterService(&serviceDesc, &grpcServer{impl: impl.(mobyextcontract.Echo)}) }, } // ClientProvider builds a broker provider for the Echo point from an // out-of-process gRPC connection. func ClientProvider(conn grpc.ClientConnInterface) extensions.Provider { - return echov1.Point.Provide(NewClient(conn)) + return mobyextcontract.Point.Provide(NewClient(conn)) } // ClientPoint registers ClientProvider for the Echo point with a host. -var ClientPoint = clientpoint.Registration{Point: echov1.Point.ID(), Provider: ClientProvider} +var ClientPoint = clientpoint.Registration{Point: mobyextcontract.Point.ID(), Provider: ClientProvider} -// NewClient returns a echov1.Echo that calls the Echo point over conn. -func NewClient(conn grpc.ClientConnInterface) echov1.Echo { +// NewClient returns a mobyextcontract.Echo that calls the Echo point over conn. +func NewClient(conn grpc.ClientConnInterface) mobyextcontract.Echo { return &grpcClient{client: NewEchoClient(conn)} } // grpcServer serves an implementation of the contract's Go interface. type grpcServer struct { - impl echov1.Echo + impl mobyextcontract.Echo } func (s *grpcServer) Echo(ctx context.Context, req *EchoRequest) (*EchoResponse, error) { @@ -113,7 +113,7 @@ type grpcClient struct { client EchoClient } -func (c *grpcClient) Echo(ctx context.Context, req *echov1.EchoRequest) (*echov1.EchoResponse, error) { +func (c *grpcClient) Echo(ctx context.Context, req *mobyextcontract.EchoRequest) (*mobyextcontract.EchoResponse, error) { resp, err := c.client.Echo(ctx, echoRequestToProto(req)) if err != nil { return nil, err @@ -121,7 +121,7 @@ func (c *grpcClient) Echo(ctx context.Context, req *echov1.EchoRequest) (*echov1 return echoResponseFromProto(resp), nil } -func echoRequestToProto(in *echov1.EchoRequest) *EchoRequest { +func echoRequestToProto(in *mobyextcontract.EchoRequest) *EchoRequest { if in == nil { return nil } @@ -130,16 +130,16 @@ func echoRequestToProto(in *echov1.EchoRequest) *EchoRequest { return out } -func echoRequestFromProto(in *EchoRequest) *echov1.EchoRequest { +func echoRequestFromProto(in *EchoRequest) *mobyextcontract.EchoRequest { if in == nil { return nil } - out := &echov1.EchoRequest{} + out := &mobyextcontract.EchoRequest{} out.Message = in.GetMessage() return out } -func echoResponseToProto(in *echov1.EchoResponse) *EchoResponse { +func echoResponseToProto(in *mobyextcontract.EchoResponse) *EchoResponse { if in == nil { return nil } @@ -148,11 +148,11 @@ func echoResponseToProto(in *echov1.EchoResponse) *EchoResponse { return out } -func echoResponseFromProto(in *EchoResponse) *echov1.EchoResponse { +func echoResponseFromProto(in *EchoResponse) *mobyextcontract.EchoResponse { if in == nil { return nil } - out := &echov1.EchoResponse{} + out := &mobyextcontract.EchoResponse{} out.Message = in.GetMessage() return out } diff --git a/sdk/sdkapi/protogen/wire.gen.go b/sdk/sdkapi/protogen/wire.gen.go index 764f7ae..40d12b2 100644 --- a/sdk/sdkapi/protogen/wire.gen.go +++ b/sdk/sdkapi/protogen/wire.gen.go @@ -6,7 +6,7 @@ package protogen import ( context "context" - sdkapi "github.com/moby/extensions/sdk/sdkapi" + mobyextcontract "github.com/moby/extensions/sdk/sdkapi" grpc "google.golang.org/grpc" ) @@ -95,18 +95,18 @@ func (c *serviceClient) Initialize(ctx context.Context, in *InitializeRequest, o } // RegisterServer serves impl as the Extension service on r. -func RegisterServer(r grpc.ServiceRegistrar, impl sdkapi.Extension) { +func RegisterServer(r grpc.ServiceRegistrar, impl mobyextcontract.Extension) { r.RegisterService(&serviceDesc, &grpcServer{impl: impl}) } -// NewClient returns a sdkapi.Extension that calls the Extension service over conn. -func NewClient(conn grpc.ClientConnInterface) sdkapi.Extension { +// NewClient returns a mobyextcontract.Extension that calls the Extension service over conn. +func NewClient(conn grpc.ClientConnInterface) mobyextcontract.Extension { return &grpcClient{client: NewExtensionClient(conn)} } // grpcServer serves an implementation of the contract's Go interface. type grpcServer struct { - impl sdkapi.Extension + impl mobyextcontract.Extension } func (s *grpcServer) Describe(ctx context.Context, req *DescribeRequest) (*DescribeResponse, error) { @@ -129,7 +129,7 @@ type grpcClient struct { client ExtensionClient } -func (c *grpcClient) Describe(ctx context.Context, req *sdkapi.DescribeRequest) (*sdkapi.DescribeResponse, error) { +func (c *grpcClient) Describe(ctx context.Context, req *mobyextcontract.DescribeRequest) (*mobyextcontract.DescribeResponse, error) { resp, err := c.client.Describe(ctx, describeRequestToProto(req)) if err != nil { return nil, err @@ -137,7 +137,7 @@ func (c *grpcClient) Describe(ctx context.Context, req *sdkapi.DescribeRequest) return describeResponseFromProto(resp), nil } -func (c *grpcClient) Initialize(ctx context.Context, req *sdkapi.InitializeRequest) (*sdkapi.InitializeResponse, error) { +func (c *grpcClient) Initialize(ctx context.Context, req *mobyextcontract.InitializeRequest) (*mobyextcontract.InitializeResponse, error) { resp, err := c.client.Initialize(ctx, initializeRequestToProto(req)) if err != nil { return nil, err @@ -145,7 +145,7 @@ func (c *grpcClient) Initialize(ctx context.Context, req *sdkapi.InitializeReque return initializeResponseFromProto(resp), nil } -func declarationToProto(in *sdkapi.Declaration) *Declaration { +func declarationToProto(in *mobyextcontract.Declaration) *Declaration { if in == nil { return nil } @@ -165,11 +165,11 @@ func declarationToProto(in *sdkapi.Declaration) *Declaration { return out } -func declarationFromProto(in *Declaration) *sdkapi.Declaration { +func declarationFromProto(in *Declaration) *mobyextcontract.Declaration { if in == nil { return nil } - out := &sdkapi.Declaration{} + out := &mobyextcontract.Declaration{} out.ID = in.GetId() for _, e := range in.GetProviders() { out.Providers = append(out.Providers, *pointDeclarationFromProto(e)) @@ -185,7 +185,7 @@ func declarationFromProto(in *Declaration) *sdkapi.Declaration { return out } -func dependencyToProto(in *sdkapi.Dependency) *Dependency { +func dependencyToProto(in *mobyextcontract.Dependency) *Dependency { if in == nil { return nil } @@ -196,18 +196,18 @@ func dependencyToProto(in *sdkapi.Dependency) *Dependency { return out } -func dependencyFromProto(in *Dependency) *sdkapi.Dependency { +func dependencyFromProto(in *Dependency) *mobyextcontract.Dependency { if in == nil { return nil } - out := &sdkapi.Dependency{} + out := &mobyextcontract.Dependency{} out.Point = in.GetPoint() out.Extension = in.GetExtension() out.Optional = in.GetOptional() return out } -func describeRequestToProto(in *sdkapi.DescribeRequest) *DescribeRequest { +func describeRequestToProto(in *mobyextcontract.DescribeRequest) *DescribeRequest { if in == nil { return nil } @@ -215,15 +215,15 @@ func describeRequestToProto(in *sdkapi.DescribeRequest) *DescribeRequest { return out } -func describeRequestFromProto(in *DescribeRequest) *sdkapi.DescribeRequest { +func describeRequestFromProto(in *DescribeRequest) *mobyextcontract.DescribeRequest { if in == nil { return nil } - out := &sdkapi.DescribeRequest{} + out := &mobyextcontract.DescribeRequest{} return out } -func describeResponseToProto(in *sdkapi.DescribeResponse) *DescribeResponse { +func describeResponseToProto(in *mobyextcontract.DescribeResponse) *DescribeResponse { if in == nil { return nil } @@ -232,16 +232,16 @@ func describeResponseToProto(in *sdkapi.DescribeResponse) *DescribeResponse { return out } -func describeResponseFromProto(in *DescribeResponse) *sdkapi.DescribeResponse { +func describeResponseFromProto(in *DescribeResponse) *mobyextcontract.DescribeResponse { if in == nil { return nil } - out := &sdkapi.DescribeResponse{} + out := &mobyextcontract.DescribeResponse{} out.Declaration = declarationFromProto(in.GetDeclaration()) return out } -func initializeRequestToProto(in *sdkapi.InitializeRequest) *InitializeRequest { +func initializeRequestToProto(in *mobyextcontract.InitializeRequest) *InitializeRequest { if in == nil { return nil } @@ -249,15 +249,15 @@ func initializeRequestToProto(in *sdkapi.InitializeRequest) *InitializeRequest { return out } -func initializeRequestFromProto(in *InitializeRequest) *sdkapi.InitializeRequest { +func initializeRequestFromProto(in *InitializeRequest) *mobyextcontract.InitializeRequest { if in == nil { return nil } - out := &sdkapi.InitializeRequest{} + out := &mobyextcontract.InitializeRequest{} return out } -func initializeResponseToProto(in *sdkapi.InitializeResponse) *InitializeResponse { +func initializeResponseToProto(in *mobyextcontract.InitializeResponse) *InitializeResponse { if in == nil { return nil } @@ -265,15 +265,15 @@ func initializeResponseToProto(in *sdkapi.InitializeResponse) *InitializeRespons return out } -func initializeResponseFromProto(in *InitializeResponse) *sdkapi.InitializeResponse { +func initializeResponseFromProto(in *InitializeResponse) *mobyextcontract.InitializeResponse { if in == nil { return nil } - out := &sdkapi.InitializeResponse{} + out := &mobyextcontract.InitializeResponse{} return out } -func pointDeclarationToProto(in *sdkapi.PointDeclaration) *PointDeclaration { +func pointDeclarationToProto(in *mobyextcontract.PointDeclaration) *PointDeclaration { if in == nil { return nil } @@ -282,16 +282,16 @@ func pointDeclarationToProto(in *sdkapi.PointDeclaration) *PointDeclaration { return out } -func pointDeclarationFromProto(in *PointDeclaration) *sdkapi.PointDeclaration { +func pointDeclarationFromProto(in *PointDeclaration) *mobyextcontract.PointDeclaration { if in == nil { return nil } - out := &sdkapi.PointDeclaration{} + out := &mobyextcontract.PointDeclaration{} out.ID = in.GetId() return out } -func providerServicesToProto(in *sdkapi.ProviderServices) *ProviderServices { +func providerServicesToProto(in *mobyextcontract.ProviderServices) *ProviderServices { if in == nil { return nil } @@ -301,11 +301,11 @@ func providerServicesToProto(in *sdkapi.ProviderServices) *ProviderServices { return out } -func providerServicesFromProto(in *ProviderServices) *sdkapi.ProviderServices { +func providerServicesFromProto(in *ProviderServices) *mobyextcontract.ProviderServices { if in == nil { return nil } - out := &sdkapi.ProviderServices{} + out := &mobyextcontract.ProviderServices{} out.Point = in.GetPoint() out.Services = in.GetServices() return out