Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions cicd-mcp-server/REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,21 @@ Creates a new Cloud Run service or updates an existing one from source.
- `port` (integer, optional): The port the container listens on.
- `allow_public_access` (boolean, optional): If the service should be public. Default is `false`.

### `deploy_cloudrun_service_no_build`
Creates a new Cloud Run service or updates an existing one from source without a build step, utilizing a Google-managed base image.

**Arguments:**
- `project_id` (string, required): The Google Cloud project ID.
- `location` (string, required): The Google Cloud location.
- `service_name` (string, required): The name of the Cloud Run service.
- `source` (string, required): The path to the source code to deploy.
- `base_image` (string, required): The runtime base image (e.g., `nodejs24`, `python314`, `osonly24`).
- `command` (string, optional): The command that the container starts up with.
- `args` (array of strings, optional): Arguments to pass to the container command.
- `env_vars` (object with string keys and values, optional): Environment variables to set.
- `port` (integer, optional): The port the container listens on.
- `allow_public_access` (boolean, optional): If the service should be public. Default is `false`.

## Developer Connect

### `create_git_connection`
Expand Down
38 changes: 38 additions & 0 deletions cicd-mcp-server/cloudrun/client/cloudrunclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import (
"context"
"fmt"
"os/exec"
"strings"

"google.golang.org/api/iterator"

Expand Down Expand Up @@ -52,6 +53,7 @@ type CloudRunClient interface {
UpdateService(ctx context.Context, projectID, location, serviceName, imageURL, revisionName string, port int32, service *cloudrunpb.Service) (*cloudrunpb.Service, error)
GetRevision(ctx context.Context, service *cloudrunpb.Service) (*cloudrunpb.Revision, error)
DeployFromSource(ctx context.Context, projectID, location, serviceName, source string, port int32, allowPublicAccess bool) error
DeployNoBuild(ctx context.Context, projectID, location, serviceName, source, baseImage, command string, cmdArgs []string, envVars map[string]string, port int32, allowPublicAccess bool) error
DeleteService(ctx context.Context, projectID, location, serviceName string) error
SetServiceAccess(ctx context.Context, serviceName string, allowPublicAccess bool) error
}
Expand Down Expand Up @@ -202,6 +204,42 @@ func (c *CloudRunClientImpl) DeployFromSource(ctx context.Context, projectID, lo
return nil
}

// DeployNoBuild deploys a Cloud Run service from source without a build step, using a base image.
func (c *CloudRunClientImpl) DeployNoBuild(ctx context.Context, projectID, location, serviceName, source, baseImage, command string, cmdArgs []string, envVars map[string]string, port int32, allowPublicAccess bool) error {
args := []string{"beta", "run", "deploy", serviceName, "--project", projectID, "--region", location, "--source", source, "--no-build", "--base-image", baseImage, "--format", "json", "--quiet"}
if command != "" {
args = append(args, "--command", command)
}
if len(cmdArgs) > 0 {
argStr := strings.Join(cmdArgs, ",")
args = append(args, fmt.Sprintf("--args=%s", argStr))
}
if len(envVars) > 0 {
envPairs := make([]string, 0, len(envVars))
for k, v := range envVars {
envPairs = append(envPairs, fmt.Sprintf("%s=%s", k, v))
}
envStr := strings.Join(envPairs, ",")
args = append(args, "--set-env-vars", envStr)
}
if port != 0 {
args = append(args, "--port", fmt.Sprintf("%d", port))
}
if allowPublicAccess {
args = append(args, "--allow-unauthenticated")
} else {
args = append(args, "--no-allow-unauthenticated")
}

cmd := c.execer.Command("gcloud", args...)
out, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("failed to deploy no-build: %w, output: %s", err, out)
}
return nil
}


// DeleteService deletes a Cloud Run service.
func (c *CloudRunClientImpl) DeleteService(ctx context.Context, projectID, location, serviceName string) error {
name := fmt.Sprintf("projects/%s/locations/%s/services/%s", projectID, location, serviceName)
Expand Down
6 changes: 6 additions & 0 deletions cicd-mcp-server/cloudrun/client/mocks/mock_cloudrunclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ type MockCloudRunClient struct {
UpdateServiceFunc func(ctx context.Context, projectID, location, serviceName, imageURL, revisionName string, port int32, service *cloudrunpb.Service) (*cloudrunpb.Service, error)
GetRevisionFunc func(ctx context.Context, service *cloudrunpb.Service) (*cloudrunpb.Revision, error)
DeployFromSourceFunc func(ctx context.Context, projectID, location, serviceName, source string, port int32, allowPublicAccess bool) error
DeployNoBuildFunc func(ctx context.Context, projectID, location, serviceName, source, baseImage, command string, cmdArgs []string, envVars map[string]string, port int32, allowPublicAccess bool) error
DeleteServiceFunc func(ctx context.Context, projectID, location, serviceName string) error
SetServiceAccessFunc func(ctx context.Context, serviceName string, allowPublicAccess bool) error
}
Expand Down Expand Up @@ -67,6 +68,11 @@ func (m *MockCloudRunClient) DeployFromSource(ctx context.Context, projectID, lo
return m.DeployFromSourceFunc(ctx, projectID, location, serviceName, source, port, allowPublicAccess)
}

// DeployNoBuild mocks the DeployNoBuild method.
func (m *MockCloudRunClient) DeployNoBuild(ctx context.Context, projectID, location, serviceName, source, baseImage, command string, cmdArgs []string, envVars map[string]string, port int32, allowPublicAccess bool) error {
return m.DeployNoBuildFunc(ctx, projectID, location, serviceName, source, baseImage, command, cmdArgs, envVars, port, allowPublicAccess)
}

func (m *MockCloudRunClient) SetServiceAccess(ctx context.Context, serviceName string, allowPublicAccess bool) error {
return m.SetServiceAccessFunc(ctx, serviceName, allowPublicAccess)
}
32 changes: 32 additions & 0 deletions cicd-mcp-server/cloudrun/cloudrun.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ func (h *Handler) Register(server *mcp.Server) {
addListServicesTool(server, h.CrClient)
addDeployToCloudRunFromImageTool(server, h.CrClient)
addDeployToCloudRunFromSourceTool(server, h.CrClient)
addDeployToCloudRunNoBuildTool(server, h.CrClient)
}

type ListServicesArgs struct {
Expand Down Expand Up @@ -134,3 +135,34 @@ func addDeployToCloudRunFromSourceTool(server *mcp.Server, crClient cloudrunclie
}
mcp.AddTool(server, &mcp.Tool{Name: "deploy_cloudrun_service_from_source", Description: "Creates a new Cloud Run service or updates an existing one from source. This tool may take a couple minutes to finish running."}, deployToCloudRunFromSourceToolFunc)
}

type DeployToCloudRunNoBuildArgs struct {
ProjectID string `json:"project_id" jsonschema:"The Google Cloud project ID."`
Location string `json:"location" jsonschema:"The Google Cloud location."`
ServiceName string `json:"service_name" jsonschema:"The name of the Cloud Run service."`
Source string `json:"source" jsonschema:"The path to the source code to deploy."`
BaseImage string `json:"base_image" jsonschema:"The runtime base image (e.g., nodejs24, python314, osonly24)."`
Command string `json:"command,omitempty" jsonschema:"The command that the container starts up with."`
Args []string `json:"args,omitempty" jsonschema:"Arguments to pass to the container command."`
EnvVars map[string]string `json:"env_vars,omitempty" jsonschema:"Environment variables to set."`
Port int32 `json:"port,omitempty" jsonschema:"The port the container listens on."`
AllowPublicAccess bool `json:"allow_public_access,omitempty" jsonschema:"If the service should be public. Default is false."`
}

var deployToCloudRunNoBuildToolFunc func(ctx context.Context, req *mcp.CallToolRequest, args DeployToCloudRunNoBuildArgs) (*mcp.CallToolResult, any, error)

func addDeployToCloudRunNoBuildTool(server *mcp.Server, crClient cloudrunclient.CloudRunClient) {
deployToCloudRunNoBuildToolFunc = func(ctx context.Context, req *mcp.CallToolRequest, args DeployToCloudRunNoBuildArgs) (*mcp.CallToolResult, any, error) {
err := crClient.DeployNoBuild(ctx, args.ProjectID, args.Location, args.ServiceName, args.Source, args.BaseImage, args.Command, args.Args, args.EnvVars, args.Port, args.AllowPublicAccess)
if err != nil {
return &mcp.CallToolResult{}, nil, fmt.Errorf("failed to deploy service: %w", err)
}
service, err := crClient.GetService(ctx, args.ProjectID, args.Location, args.ServiceName)
if err != nil {
return &mcp.CallToolResult{}, nil, fmt.Errorf("failed to get service: %w", err)
}
return &mcp.CallToolResult{}, service, nil
}
mcp.AddTool(server, &mcp.Tool{Name: "deploy_cloudrun_service_no_build", Description: "Creates a new Cloud Run service or updates an existing one from source without a build step, using a pre-configured base image. This tool may take a couple minutes to finish running."}, deployToCloudRunNoBuildToolFunc)
}

9 changes: 5 additions & 4 deletions cicd-mcp-server/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ require (
github.com/philippgille/chromem-go v0.7.0
github.com/stretchr/testify v1.11.1
google.golang.org/api v0.252.0
google.golang.org/grpc v1.78.0
google.golang.org/grpc v1.79.3
google.golang.org/protobuf v1.36.11
)

Expand Down Expand Up @@ -117,6 +117,7 @@ require (
github.com/moby/sys/signal v0.7.1 // indirect
github.com/moby/sys/user v0.4.0 // indirect
github.com/moby/sys/userns v0.1.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
Expand Down Expand Up @@ -165,7 +166,7 @@ require (
go.opentelemetry.io/otel/sdk v1.43.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect
go.opentelemetry.io/otel/trace v1.43.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.17.0 // indirect
Expand All @@ -185,8 +186,8 @@ require (
golang.org/x/vuln v1.1.4 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/genproto v0.0.0-20251020155222-88f65dc88635 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
Expand Down
38 changes: 19 additions & 19 deletions cicd-mcp-server/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,8 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0=
github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4=
github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w=
github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI=
github.com/compose-spec/compose-go/v2 v2.8.1 h1:27O4dzyhiS/UEUKp1zHOHCBWD1WbxGsYGMNNaSejTk4=
github.com/compose-spec/compose-go/v2 v2.8.1/go.mod h1:veko/VB7URrg/tKz3vmIAQDaz+CGiXH8vZsW79NmAww=
github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo=
Expand Down Expand Up @@ -151,12 +151,12 @@ github.com/elliotwutingfeng/asciiset v0.0.0-20230602022725-51bbb787efab/go.mod h
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM=
github.com/envoyproxy/go-control-plane/envoy v1.35.0 h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo=
github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs=
github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA=
github.com/envoyproxy/go-control-plane/envoy v1.36.0 h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g=
github.com/envoyproxy/go-control-plane/envoy v1.36.0/go.mod h1:ty89S1YCCVruQAm9OtKeEkQLTb+Lkz0k8v9W0Oxsv98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4=
github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA=
github.com/erikvarga/go-rpmdb v0.0.0-20250523120114-a15a62cd4593 h1:cIQ/Ziclb/qreqg1nqGEtH4V9UJCTaNSKz9gBRaeZlA=
github.com/erikvarga/go-rpmdb v0.0.0-20250523120114-a15a62cd4593/go.mod h1:MiEorPk0IChAoCwpg2FXyqVgbNvOlPWZAYHqqIoDNoY=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
Expand Down Expand Up @@ -243,8 +243,8 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU
github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA=
github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo=
github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1 h1:X5VWvz21y3gzm9Nw/kaUeku/1+uBhcekkmy4IkffJww=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.1/go.mod h1:Zanoh4+gvIgluNqcfMVTJueD4wSS5hT7zTt4Mrutd90=
github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E=
github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
Expand Down Expand Up @@ -293,8 +293,8 @@ github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs=
github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA=
github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modelcontextprotocol/go-sdk v1.4.1 h1:M4x9GyIPj+HoIlHNGpK2hq5o3BFhC+78PkEaldQRphc=
github.com/modelcontextprotocol/go-sdk v1.4.1/go.mod h1:Bo/mS87hPQqHSRkMv4dQq1XCu6zv4INdXnFZabkNU6s=
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw=
Expand Down Expand Up @@ -441,8 +441,8 @@ go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfC
go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz09os=
go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo=
go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
Expand Down Expand Up @@ -565,17 +565,17 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20251020155222-88f65dc88635 h1:I5FLgnlmGA5voD3BZp9Rc17FGiius/DlMB3WsJ1C4Xw=
google.golang.org/genproto v0.0.0-20251020155222-88f65dc88635/go.mod h1:1Ic78BnpzY8OaTCmzxJDP4qC9INZPbGZl+54RKjtyeI=
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda h1:+2XxjfsAu6vqFxwGBRcHiMaDCuZiqXGDUDVWVtrFAnE=
google.golang.org/genproto/googleapis/api v0.0.0-20251029180050-ab9386a59fda/go.mod h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda h1:i/Q+bfisr7gq6feoJnS/DlpdwEL4ihp41fvRiM3Ork0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251029180050-ab9386a59fda/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls=
google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc=
google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U=
google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
Expand Down
Loading
Loading