Skip to content
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
80c72cd
build(deps): bump actions/setup-go from 5.6.0 to 6.4.0
dependabot[bot] May 5, 2026
11cea65
build(deps): bump aquasecurity/trivy-action from 0.35.0 to 0.36.0
dependabot[bot] May 5, 2026
88c9056
build(deps): bump codecov/codecov-action from 4.6.0 to 6.0.0
dependabot[bot] May 5, 2026
ce52c7f
build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/htt…
dependabot[bot] May 5, 2026
4be6f86
build(deps): bump dorny/paths-filter
dependabot[bot] May 5, 2026
2aa04d9
build(deps): bump the services-processor-go-modules group
dependabot[bot] May 5, 2026
ed9b2be
build(deps): bump the services-ingest-go-modules group
dependabot[bot] May 5, 2026
5e3dfb9
build(deps): bump github.com/modelcontextprotocol/go-sdk
dependabot[bot] May 5, 2026
87128fd
build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/htt…
dependabot[bot] May 5, 2026
57d1049
build(deps): bump the services-api-go-modules group
dependabot[bot] May 5, 2026
b120d2a
build(deps): bump the root-go-modules group with 10 updates
dependabot[bot] May 5, 2026
89c89b6
build(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1
dependabot[bot] May 5, 2026
80bf011
Merge remote-tracking branch 'origin/dependabot/github_actions/action…
Agent-Hellboy May 5, 2026
b19bb7b
Merge remote-tracking branch 'origin/dependabot/github_actions/action…
Agent-Hellboy May 5, 2026
95645a5
Merge remote-tracking branch 'origin/dependabot/github_actions/aquase…
Agent-Hellboy May 5, 2026
17813e6
Merge remote-tracking branch 'origin/dependabot/github_actions/codeco…
Agent-Hellboy May 5, 2026
d00ab9e
Merge remote-tracking branch 'origin/dependabot/github_actions/dorny/…
Agent-Hellboy May 5, 2026
0828c48
Merge remote-tracking branch 'origin/dependabot/go_modules/root-go-mo…
Agent-Hellboy May 5, 2026
f20abc1
Merge remote-tracking branch 'origin/dependabot/go_modules/examples/g…
Agent-Hellboy May 5, 2026
36c459c
Merge remote-tracking branch 'origin/dependabot/go_modules/services/a…
Agent-Hellboy May 5, 2026
e0387c9
Merge remote-tracking branch 'origin/dependabot/go_modules/services/i…
Agent-Hellboy May 5, 2026
cd8ce7d
Merge remote-tracking branch 'origin/dependabot/go_modules/services/m…
Agent-Hellboy May 5, 2026
a9883cc
Merge remote-tracking branch 'origin/dependabot/go_modules/services/p…
Agent-Hellboy May 5, 2026
7e99441
Merge remote-tracking branch 'origin/dependabot/go_modules/services/u…
Agent-Hellboy May 5, 2026
49b5a47
fix(ci): resolve dependabot consolidation build
Agent-Hellboy May 5, 2026
715a1b2
fix(ci): address dependabot pr feedback
Agent-Hellboy May 5, 2026
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
18 changes: 9 additions & 9 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:

- name: Check changed paths
id: filter
uses: dorny/paths-filter@6852f92c20ea7fd3b0c25de3b5112db3a98da050 # v3
uses: dorny/paths-filter@d1c1ffe0248fe513906c8e24db8ea791d46f8590 # v3
with:
filters: |
code:
Expand All @@ -47,7 +47,7 @@ jobs:
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod
cache: true
Expand Down Expand Up @@ -80,7 +80,7 @@ jobs:
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod
cache: true
Expand Down Expand Up @@ -116,7 +116,7 @@ jobs:
mv unit.out coverage.out

- name: Upload coverage
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
with:
files: ./coverage.out
flags: pre-merge
Expand All @@ -138,7 +138,7 @@ jobs:
submodules: recursive

- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod
cache: true
Expand Down Expand Up @@ -221,7 +221,7 @@ jobs:

- name: Upload e2e artifacts
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: kind-e2e-artifacts
path: .e2e-artifacts/kind
Expand All @@ -237,7 +237,7 @@ jobs:
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod
cache: true
Expand All @@ -256,7 +256,7 @@ jobs:
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod
cache: true
Expand Down Expand Up @@ -292,7 +292,7 @@ jobs:
output-file: mcp-runtime-repository.spdx.json

- name: Upload repository SBOM
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: mcp-runtime-repository-sbom
path: mcp-runtime-repository.spdx.json
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/security-gosec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: go.mod
cache: true
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/security-trivy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Trivy repository vulnerability scan
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # 0.36.0
with:
scan-type: fs
scan-ref: .
Expand All @@ -53,7 +53,7 @@ jobs:
sarif_file: trivy-fs.sarif

- name: Trivy repository misconfiguration scan
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # 0.36.0
with:
scan-type: fs
scan-ref: .
Expand Down Expand Up @@ -94,14 +94,14 @@ jobs:
output-file: operator-image.spdx.json

- name: Upload operator image SBOM
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: operator-image-sbom
path: operator-image.spdx.json
if-no-files-found: error

- name: Trivy image scan
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # 0.35.0
uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # 0.36.0
with:
image-ref: mcp-runtime-operator:ci
format: sarif
Expand Down
16 changes: 14 additions & 2 deletions api/v1alpha1/groupversion_info.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
package v1alpha1

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/schema"
"sigs.k8s.io/controller-runtime/pkg/scheme"
)

var (
// GroupVersion is group version used to register these objects
GroupVersion = schema.GroupVersion{Group: "mcpruntime.org", Version: "v1alpha1"}

// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)

// AddToScheme adds the types in this group-version to the given scheme.
AddToScheme = SchemeBuilder.AddToScheme
)

func addKnownTypes(scheme *runtime.Scheme) error {
scheme.AddKnownTypes(
GroupVersion,
&MCPServer{}, &MCPServerList{},
&MCPAccessGrant{}, &MCPAccessGrantList{},
&MCPAgentSession{}, &MCPAgentSessionList{},
)
metav1.AddToGroupVersion(scheme, GroupVersion)
return nil
}
10 changes: 0 additions & 10 deletions api/v1alpha1/register.go

This file was deleted.

10 changes: 7 additions & 3 deletions api/v1alpha1/scheme_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,9 +142,13 @@ func TestSchemeBuilder(t *testing.T) {
}
})

t.Run("SchemeBuilder has correct GroupVersion", func(t *testing.T) {
if SchemeBuilder.GroupVersion != GroupVersion {
t.Errorf("SchemeBuilder.GroupVersion = %v, want %v", SchemeBuilder.GroupVersion, GroupVersion)
t.Run("SchemeBuilder registers known types", func(t *testing.T) {
scheme := runtime.NewScheme()
if err := SchemeBuilder.AddToScheme(scheme); err != nil {
t.Fatalf("SchemeBuilder.AddToScheme failed: %v", err)
}
if !scheme.IsVersionRegistered(GroupVersion) {
t.Errorf("SchemeBuilder did not register %v", GroupVersion)
}
})
}
Expand Down
72 changes: 63 additions & 9 deletions api/v1alpha1/validation.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package v1alpha1

import (
"context"
"fmt"
"strconv"
"strings"
Expand All @@ -11,16 +12,15 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/util/validation/field"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/webhook"
"sigs.k8s.io/controller-runtime/pkg/webhook/admission"
)

var (
_ webhook.Validator = &MCPServer{}
_ webhook.Defaulter = &MCPServer{}
_ webhook.Validator = &MCPAccessGrant{}
_ webhook.Validator = &MCPAgentSession{}
nowFunc = time.Now
_ admission.Defaulter[*MCPServer] = mcpServerWebhook{}
_ admission.Validator[*MCPServer] = mcpServerWebhook{}
_ admission.Validator[*MCPAccessGrant] = mcpAccessGrantValidator{}
_ admission.Validator[*MCPAgentSession] = mcpAgentSessionValidator{}
nowFunc = time.Now
)

const (
Expand Down Expand Up @@ -206,7 +206,29 @@ func (r *MCPServer) Default() {

// +kubebuilder:webhook:path=/validate-mcpruntime-org-v1alpha1-mcpserver,mutating=false,failurePolicy=fail,sideEffects=None,groups=mcpruntime.org,resources=mcpservers,verbs=create;update,versions=v1alpha1,name=vmcpserver.kb.io,admissionReviewVersions=v1
func (r *MCPServer) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).For(r).Complete()
return ctrl.NewWebhookManagedBy(mgr, r).
WithDefaulter(mcpServerWebhook{}).
WithValidator(mcpServerWebhook{}).
Complete()
}

type mcpServerWebhook struct{}

func (mcpServerWebhook) Default(_ context.Context, obj *MCPServer) error {
obj.Default()
return nil
}

func (mcpServerWebhook) ValidateCreate(_ context.Context, obj *MCPServer) (admission.Warnings, error) {
return obj.ValidateCreate()
}

func (mcpServerWebhook) ValidateUpdate(_ context.Context, _ *MCPServer, newObj *MCPServer) (admission.Warnings, error) {
return newObj.ValidateUpdate(nil)
}
Comment thread
Agent-Hellboy marked this conversation as resolved.
Outdated

func (mcpServerWebhook) ValidateDelete(_ context.Context, obj *MCPServer) (admission.Warnings, error) {
return obj.ValidateDelete()
}

func (r *MCPServer) ValidateCreate() (admission.Warnings, error) {
Expand Down Expand Up @@ -343,7 +365,23 @@ func validateRolloutValue(fieldPath *field.Path, value string) *field.Error {

// +kubebuilder:webhook:path=/validate-mcpruntime-org-v1alpha1-mcpaccessgrant,mutating=false,failurePolicy=fail,sideEffects=None,groups=mcpruntime.org,resources=mcpaccessgrants,verbs=create;update,versions=v1alpha1,name=vmcpaccessgrant.kb.io,admissionReviewVersions=v1
func (r *MCPAccessGrant) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).For(r).Complete()
return ctrl.NewWebhookManagedBy(mgr, r).
WithValidator(mcpAccessGrantValidator{}).
Complete()
}

type mcpAccessGrantValidator struct{}

func (mcpAccessGrantValidator) ValidateCreate(_ context.Context, obj *MCPAccessGrant) (admission.Warnings, error) {
return obj.ValidateCreate()
}

func (mcpAccessGrantValidator) ValidateUpdate(_ context.Context, _ *MCPAccessGrant, newObj *MCPAccessGrant) (admission.Warnings, error) {
return newObj.ValidateUpdate(nil)
}
Comment thread
Agent-Hellboy marked this conversation as resolved.
Outdated

func (mcpAccessGrantValidator) ValidateDelete(_ context.Context, obj *MCPAccessGrant) (admission.Warnings, error) {
return obj.ValidateDelete()
}

func (r *MCPAccessGrant) ValidateCreate() (admission.Warnings, error) {
Expand Down Expand Up @@ -393,7 +431,23 @@ func (r *MCPAccessGrant) validate() error {

// +kubebuilder:webhook:path=/validate-mcpruntime-org-v1alpha1-mcpagentsession,mutating=false,failurePolicy=fail,sideEffects=None,groups=mcpruntime.org,resources=mcpagentsessions,verbs=create;update,versions=v1alpha1,name=vmcpagentsession.kb.io,admissionReviewVersions=v1
func (r *MCPAgentSession) SetupWebhookWithManager(mgr ctrl.Manager) error {
return ctrl.NewWebhookManagedBy(mgr).For(r).Complete()
return ctrl.NewWebhookManagedBy(mgr, r).
WithValidator(mcpAgentSessionValidator{}).
Complete()
}

type mcpAgentSessionValidator struct{}

func (mcpAgentSessionValidator) ValidateCreate(_ context.Context, obj *MCPAgentSession) (admission.Warnings, error) {
return obj.ValidateCreate()
}

func (mcpAgentSessionValidator) ValidateUpdate(_ context.Context, _ *MCPAgentSession, newObj *MCPAgentSession) (admission.Warnings, error) {
return newObj.ValidateUpdate(nil)
}
Comment thread
Agent-Hellboy marked this conversation as resolved.
Outdated

func (mcpAgentSessionValidator) ValidateDelete(_ context.Context, obj *MCPAgentSession) (admission.Warnings, error) {
return obj.ValidateDelete()
}

func (r *MCPAgentSession) ValidateCreate() (admission.Warnings, error) {
Expand Down
2 changes: 1 addition & 1 deletion docs/internals/go-package-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ var (
GroupVersion = schema.GroupVersion{Group: "mcpruntime.org", Version: "v1alpha1"}

// SchemeBuilder is used to add go types to the GroupVersionKind scheme
SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes)

// AddToScheme adds the types in this group-version to the given scheme.
AddToScheme = SchemeBuilder.AddToScheme
Expand Down
8 changes: 4 additions & 4 deletions examples/go-mcp-server/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ module go-example-mcp

go 1.25.0

require github.com/modelcontextprotocol/go-sdk v1.4.1
require github.com/modelcontextprotocol/go-sdk v1.6.0

require (
github.com/google/jsonschema-go v0.4.2 // indirect
github.com/google/jsonschema-go v0.4.3 // indirect
github.com/segmentio/asm v1.1.3 // indirect
github.com/segmentio/encoding v0.5.4 // indirect
github.com/yosida95/uritemplate/v3 v3.0.2 // indirect
golang.org/x/oauth2 v0.34.0 // indirect
golang.org/x/sys v0.40.0 // indirect
golang.org/x/oauth2 v0.35.0 // indirect
golang.org/x/sys v0.41.0 // indirect
)
24 changes: 12 additions & 12 deletions examples/go-mcp-server/go.sum
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo=
github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY=
github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE=
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/google/jsonschema-go v0.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8=
github.com/google/jsonschema-go v0.4.2/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
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/google/jsonschema-go v0.4.3 h1:/DBOLZTfDow7pe2GmaJNhltueGTtDKICi8V8p+DQPd0=
github.com/google/jsonschema-go v0.4.3/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
github.com/modelcontextprotocol/go-sdk v1.6.0 h1:PPLS3kn7WtOEnR+Af4X5H96SG0qSab8R/ZQT/HkhPkY=
github.com/modelcontextprotocol/go-sdk v1.6.0/go.mod h1:kzm3kzFL1/+AziGOE0nUs3gvPoNxMCvkxokMkuFapXQ=
github.com/segmentio/asm v1.1.3 h1:WM03sfUOENvvKexOLp+pCqgb/WDjsi7EK8gIsICtzhc=
github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg=
github.com/segmentio/encoding v0.5.4 h1:OW1VRern8Nw6ITAtwSZ7Idrl3MXCFwXHPgqESYfvNt0=
github.com/segmentio/encoding v0.5.4/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0=
github.com/yosida95/uritemplate/v3 v3.0.2 h1:Ed3Oyj9yrmi9087+NczuL5BwkIc4wvTb5zIM+UJPGz4=
github.com/yosida95/uritemplate/v3 v3.0.2/go.mod h1:ILOh0sOhIJR3+L/8afwt/kE++YT040gmv5BQTMR2HP4=
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=
golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=
golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ=
golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k=
golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k=
golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0=
Loading
Loading