Go maintainers started to unconditionally update the minimum go version for golang.org/x/ dependencies to go1.23, which means that we'll no longer be able to support any version below that when updating those dependencies; > all: upgrade go directive to at least 1.23.0 [generated] > > By now Go 1.24.0 has been released, and Go 1.22 is no longer supported > per the Go Release Policy (https://go.dev/doc/devel/release#policy). > > For golang/go#69095. This updates our minimum version to go1.23, as we won't be able to maintain compatibility with older versions because of the above. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16:
|
|
//go:build go1.23
|
|
|
|
package command
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
|
|
"github.com/docker/cli/cli/context/store"
|
|
)
|
|
|
|
// DockerContext is a typed representation of what we put in Context metadata
|
|
type DockerContext struct {
|
|
Description string
|
|
AdditionalFields map[string]any
|
|
}
|
|
|
|
// MarshalJSON implements custom JSON marshalling
|
|
func (dc DockerContext) MarshalJSON() ([]byte, error) {
|
|
s := map[string]any{}
|
|
if dc.Description != "" {
|
|
s["Description"] = dc.Description
|
|
}
|
|
if dc.AdditionalFields != nil {
|
|
for k, v := range dc.AdditionalFields {
|
|
s[k] = v
|
|
}
|
|
}
|
|
return json.Marshal(s)
|
|
}
|
|
|
|
// UnmarshalJSON implements custom JSON marshalling
|
|
func (dc *DockerContext) UnmarshalJSON(payload []byte) error {
|
|
var data map[string]any
|
|
if err := json.Unmarshal(payload, &data); err != nil {
|
|
return err
|
|
}
|
|
for k, v := range data {
|
|
switch k {
|
|
case "Description":
|
|
dc.Description = v.(string)
|
|
default:
|
|
if dc.AdditionalFields == nil {
|
|
dc.AdditionalFields = make(map[string]any)
|
|
}
|
|
dc.AdditionalFields[k] = v
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetDockerContext extracts metadata from stored context metadata
|
|
func GetDockerContext(storeMetadata store.Metadata) (DockerContext, error) {
|
|
if storeMetadata.Metadata == nil {
|
|
// can happen if we save endpoints before assigning a context metadata
|
|
// it is totally valid, and we should return a default initialized value
|
|
return DockerContext{}, nil
|
|
}
|
|
res, ok := storeMetadata.Metadata.(DockerContext)
|
|
if !ok {
|
|
return DockerContext{}, errors.New("context metadata is not a valid DockerContext")
|
|
}
|
|
if storeMetadata.Name == DefaultContextName {
|
|
res.Description = "Current DOCKER_HOST based configuration"
|
|
}
|
|
return res, nil
|
|
}
|