Skip to content

Commit

Permalink
Update cog and use AnyAsInterface to prefer interface{} usage over any (
Browse files Browse the repository at this point in the history
#588)

Update cog and use `AnyAsInterface` to prefer `interface{}` usage over
`any` in generated go code. This resolves a known issue in kube openAPI
codegen with `map[string]any`. Obviates
#587
  • Loading branch information
IfSentient authored Jan 16, 2025
1 parent 2b52470 commit c7c2e09
Show file tree
Hide file tree
Showing 16 changed files with 68 additions and 54 deletions.
1 change: 1 addition & 0 deletions codegen/cuekind/generators.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ func ResourceGenerator(groupKinds bool) *codejen.JennyList[codegen.Kind] {
Depth: 1,
AddKubernetesCodegen: true,
GroupByKind: !groupKinds,
AnyAsInterface: true, // This is for compatibility with kube openAPI generator, which has issues with map[string]any
},
&jennies.ResourceObjectGenerator{
SubresourceTypesArePrefixed: groupKinds,
Expand Down
14 changes: 12 additions & 2 deletions codegen/jennies/gotypes.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ type GoTypes struct {
// When GroupByKind is false, subresource types (such as spec and status) are prefixed with the kind name,
// i.e. generating FooSpec instead of Spec for kind.Name() = "Foo" and Depth=1
GroupByKind bool

// AnyAsInterface determines whether to use `interface{}` instead of `any` in generated go code.
// If true, `interface{}` will be used instead of `any`.
AnyAsInterface bool
}

func (*GoTypes) JennyName() string {
Expand Down Expand Up @@ -87,7 +91,9 @@ func (g *GoTypes) generateFiles(version *codegen.KindVersion, name string, machi

codegenPipeline := cog.TypesFromSchema().
CUEValue(packageName, version.Schema, cog.ForceEnvelope(name)).
Golang(cog.GoConfig{})
Golang(cog.GoConfig{
AnyAsInterface: g.AnyAsInterface,
})

if g.AddKubernetesCodegen {
codegenPipeline = codegenPipeline.SchemaTransformations(cog.AppendCommentToObjects("+k8s:openapi-gen=true"))
Expand Down Expand Up @@ -122,6 +128,7 @@ func (g *GoTypes) generateFilesAtDepth(v cue.Value, kv *codegen.KindVersion, cur
Name: exportField(strings.Join(fieldName, "")),
NamePrefix: namePrefix,
AddKubernetesOpenAPIGenComment: g.AddKubernetesCodegen && !(len(fieldName) == 1 && fieldName[0] == "metadata"),
AnyAsInterface: g.AnyAsInterface,
}, len(v.Path().Selectors())-(g.Depth-g.NamingDepth))
if err != nil {
return nil, err
Expand Down Expand Up @@ -155,6 +162,7 @@ type CUEGoConfig struct {
Name string

AddKubernetesOpenAPIGenComment bool
AnyAsInterface bool

// NamePrefix prefixes all generated types with the provided NamePrefix
NamePrefix string
Expand All @@ -180,7 +188,9 @@ func GoTypesFromCUE(v cue.Value, cfg CUEGoConfig, maxNamingDepth int) ([]byte, e
codegenPipeline := cog.TypesFromSchema().
CUEValue(cfg.PackageName, v, cog.ForceEnvelope(cfg.Name), cog.NameFunc(nameFunc)).
SchemaTransformations(cog.PrefixObjectsNames(cfg.NamePrefix)).
Golang(cog.GoConfig{})
Golang(cog.GoConfig{
AnyAsInterface: cfg.AnyAsInterface,
})

if cfg.AddKubernetesOpenAPIGenComment {
codegenPipeline = codegenPipeline.SchemaTransformations(cog.AppendCommentToObjects("+k8s:openapi-gen=true"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type CustomKindstatusOperatorState struct {
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]any `json:"details,omitempty"`
Details map[string]interface{} `json:"details,omitempty"`
}

// NewCustomKindstatusOperatorState creates a new CustomKindstatusOperatorState object.
Expand All @@ -26,7 +26,7 @@ type CustomKindStatus struct {
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]CustomKindstatusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]any `json:"additionalFields,omitempty"`
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}

// NewCustomKindStatus creates a new CustomKindStatus object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (

// +k8s:openapi-gen=true
type CustomKindInnerObject2 struct {
Name string `json:"name"`
Details map[string]any `json:"details"`
Name string `json:"name"`
Details map[string]interface{} `json:"details"`
}

// NewCustomKindInnerObject2 creates a new CustomKindInnerObject2 object.
Expand Down Expand Up @@ -42,8 +42,8 @@ func NewCustomKindType1() *CustomKindType1 {

// +k8s:openapi-gen=true
type CustomKindType2 struct {
Group string `json:"group"`
Details map[string]any `json:"details"`
Group string `json:"group"`
Details map[string]interface{} `json:"details"`
}

// NewCustomKindType2 creates a new CustomKindType2 object.
Expand All @@ -52,7 +52,7 @@ func NewCustomKindType2() *CustomKindType2 {
}

// +k8s:openapi-gen=true
type CustomKindUnionType any
type CustomKindUnionType interface{}

// +k8s:openapi-gen=true
type CustomKindSpec struct {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type CustomKindstatusOperatorState struct {
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]any `json:"details,omitempty"`
Details map[string]interface{} `json:"details,omitempty"`
}

// NewCustomKindstatusOperatorState creates a new CustomKindstatusOperatorState object.
Expand All @@ -27,7 +27,7 @@ type CustomKindStatus struct {
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]CustomKindstatusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]any `json:"additionalFields,omitempty"`
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}

// NewCustomKindStatus creates a new CustomKindStatus object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type TestKind2statusOperatorState struct {
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]any `json:"details,omitempty"`
Details map[string]interface{} `json:"details,omitempty"`
}

// NewTestKind2statusOperatorState creates a new TestKind2statusOperatorState object.
Expand All @@ -26,7 +26,7 @@ type TestKind2Status struct {
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]TestKind2statusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]any `json:"additionalFields,omitempty"`
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}

// NewTestKind2Status creates a new TestKind2Status object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type TestKindstatusOperatorState struct {
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]any `json:"details,omitempty"`
Details map[string]interface{} `json:"details,omitempty"`
}

// NewTestKindstatusOperatorState creates a new TestKindstatusOperatorState object.
Expand All @@ -26,7 +26,7 @@ type TestKindStatus struct {
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]TestKindstatusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]any `json:"additionalFields,omitempty"`
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}

// NewTestKindStatus creates a new TestKindStatus object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type TestKindstatusOperatorState struct {
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]any `json:"details,omitempty"`
Details map[string]interface{} `json:"details,omitempty"`
}

// NewTestKindstatusOperatorState creates a new TestKindstatusOperatorState object.
Expand All @@ -26,7 +26,7 @@ type TestKindStatus struct {
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]TestKindstatusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]any `json:"additionalFields,omitempty"`
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}

// NewTestKindStatus creates a new TestKindStatus object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type StatusOperatorState struct {
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]any `json:"details,omitempty"`
Details map[string]interface{} `json:"details,omitempty"`
}

// NewStatusOperatorState creates a new StatusOperatorState object.
Expand All @@ -26,7 +26,7 @@ type Status struct {
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]any `json:"additionalFields,omitempty"`
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}

// NewStatus creates a new Status object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (

// +k8s:openapi-gen=true
type InnerObject2 struct {
Name string `json:"name"`
Details map[string]any `json:"details"`
Name string `json:"name"`
Details map[string]interface{} `json:"details"`
}

// NewInnerObject2 creates a new InnerObject2 object.
Expand Down Expand Up @@ -42,8 +42,8 @@ func NewType1() *Type1 {

// +k8s:openapi-gen=true
type Type2 struct {
Group string `json:"group"`
Details map[string]any `json:"details"`
Group string `json:"group"`
Details map[string]interface{} `json:"details"`
}

// NewType2 creates a new Type2 object.
Expand All @@ -52,7 +52,7 @@ func NewType2() *Type2 {
}

// +k8s:openapi-gen=true
type UnionType any
type UnionType interface{}

// +k8s:openapi-gen=true
type Spec struct {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type StatusOperatorState struct {
// descriptiveState is an optional more descriptive state field which has no requirements on format
DescriptiveState *string `json:"descriptiveState,omitempty"`
// details contains any extra information that is operator-specific
Details map[string]any `json:"details,omitempty"`
Details map[string]interface{} `json:"details,omitempty"`
}

// NewStatusOperatorState creates a new StatusOperatorState object.
Expand All @@ -27,7 +27,7 @@ type Status struct {
// Any operator which consumes this kind SHOULD add its state evaluation information to this field.
OperatorStates map[string]StatusOperatorState `json:"operatorStates,omitempty"`
// additionalFields is reserved for future use
AdditionalFields map[string]any `json:"additionalFields,omitempty"`
AdditionalFields map[string]interface{} `json:"additionalFields,omitempty"`
}

// NewStatus creates a new Status object.
Expand Down
10 changes: 5 additions & 5 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ require (
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874
github.com/getkin/kin-openapi v0.128.0
github.com/grafana/codejen v0.0.4-0.20230321061741-77f656893a3d
github.com/grafana/cog v0.0.12
github.com/grafana/cog v0.0.16
github.com/grafana/grafana-app-sdk/logging v0.29.0
github.com/hashicorp/go-multierror v1.1.1
github.com/prometheus/client_golang v1.20.5
Expand Down Expand Up @@ -94,13 +94,13 @@ require (
go.opentelemetry.io/otel/metric v1.33.0 // indirect
go.opentelemetry.io/proto/otlp v1.4.0 // indirect
golang.org/x/mod v0.22.0 // indirect
golang.org/x/net v0.33.0 // indirect
golang.org/x/net v0.34.0 // indirect
golang.org/x/oauth2 v0.24.0 // indirect
golang.org/x/sys v0.28.0 // indirect
golang.org/x/term v0.27.0 // indirect
golang.org/x/sys v0.29.0 // indirect
golang.org/x/term v0.28.0 // indirect
golang.org/x/text v0.21.0 // indirect
golang.org/x/time v0.7.0 // indirect
golang.org/x/tools v0.28.0 // indirect
golang.org/x/tools v0.29.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect
google.golang.org/protobuf v1.35.2 // indirect
Expand Down
20 changes: 10 additions & 10 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grafana/codejen v0.0.4-0.20230321061741-77f656893a3d h1:hrXbGJ5jgp6yNITzs5o+zXq0V5yT3siNJ+uM8LGwWKk=
github.com/grafana/codejen v0.0.4-0.20230321061741-77f656893a3d/go.mod h1:zmwwM/DRyQB7pfuBjTWII3CWtxcXh8LTwAYGfDfpR6s=
github.com/grafana/cog v0.0.12 h1:MJfFUVzp0El3+zZCmUQ2Y8uzwvM3aa5zj7EOeeuG6VY=
github.com/grafana/cog v0.0.12/go.mod h1:HwJbc60fZ+viayROClLGdDwO5w/JjBOpO9wjGnAfMLc=
github.com/grafana/cog v0.0.16 h1:JdaZOSZD7i5dKE0vjC1k8AgcCovOZqfr58zytUMeixY=
github.com/grafana/cog v0.0.16/go.mod h1:jrS9indvWuDs60RHEZpLaAkmZdgyoLKMOEUT0jiB1t0=
github.com/grafana/grafana-app-sdk/logging v0.29.0 h1:mgbXaAf33aFwqwGVeaX30l8rkeAJH0iACgX5Rn6YkN4=
github.com/grafana/grafana-app-sdk/logging v0.29.0/go.mod h1:xy6ZyVXl50Z3DBDLybvBPphbykPhuVNed/VNmen9DQM=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE=
Expand Down Expand Up @@ -204,8 +204,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0=
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand All @@ -216,10 +216,10 @@ golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
Expand All @@ -230,8 +230,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down
5 changes: 4 additions & 1 deletion go.work.sum
Original file line number Diff line number Diff line change
Expand Up @@ -906,7 +906,6 @@ github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grafana/cog v0.0.1/go.mod h1:FqZi9WZ/Uzvs3tvo7l+OViThCpfvu3KDGDqHCB2LNbg=
github.com/grafana/grafana-app-sdk/logging v0.29.0/go.mod h1:xy6ZyVXl50Z3DBDLybvBPphbykPhuVNed/VNmen9DQM=
github.com/grafana/grafana-plugin-sdk-go v0.222.0/go.mod h1:0lYONo3rJrjIoJNOQP0h2NXmOaF5rFIuH/rwSVSeIrQ=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
Expand Down Expand Up @@ -1234,6 +1233,8 @@ golang.org/x/crypto v0.30.0 h1:RwoQn3GkWiMkzlX562cLB7OxWvjH1L8xutO2WoJcRoY=
golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc=
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0=
Expand Down Expand Up @@ -1292,10 +1293,12 @@ golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457 h1:zf5N6UOrA487eEFacMePxjXAJctxKmyjKUsjA11Uzuk=
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg=
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
Expand Down
Loading

0 comments on commit c7c2e09

Please sign in to comment.