diff --git a/cmd/envite/docker.go b/cmd/envite/docker.go index 552c66e..77072dd 100644 --- a/cmd/envite/docker.go +++ b/cmd/envite/docker.go @@ -7,7 +7,8 @@ package main import ( "encoding/json" "fmt" - "github.com/docker/docker/client" + + "github.com/moby/moby/client" "github.com/perimeterx/envite" "github.com/perimeterx/envite/docker" ) diff --git a/docker/component.go b/docker/component.go index 9f1fff6..79aa777 100644 --- a/docker/component.go +++ b/docker/component.go @@ -15,14 +15,11 @@ import ( "sync/atomic" "time" - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/client" - "github.com/docker/docker/errdefs" - "github.com/docker/docker/pkg/jsonmessage" - "github.com/docker/docker/pkg/stdcopy" + "github.com/containerd/errdefs" + "github.com/moby/moby/api/pkg/stdcopy" + "github.com/moby/moby/api/types/container" + "github.com/moby/moby/api/types/jsonstream" + "github.com/moby/moby/client" "github.com/perimeterx/envite" ) @@ -121,7 +118,11 @@ func (c *Component) Prepare(ctx context.Context) error { // create a dedicated copy of the docker image to prevent // other environments running concurrently from removing our image. - return c.cli.ImageTag(ctx, c.config.Image, c.imageCloneTag) + _, err = c.cli.ImageTag(ctx, client.ImageTagOptions{ + Source: c.config.Image, + Target: c.imageCloneTag, + }) + return err } // pullImage pulls the Docker image specified in the configuration. @@ -136,15 +137,16 @@ func (c *Component) pullImage(ctx context.Context) error { return err } - reader, err := c.cli.ImagePull(ctx, c.config.Image, opts) + result, err := c.cli.ImagePull(ctx, c.config.Image, opts) if err != nil { return err } + defer result.Close() - scanner := bufio.NewScanner(reader) + scanner := bufio.NewScanner(result) for scanner.Scan() { bytes := scanner.Bytes() - msg := jsonmessage.JSONMessage{} + msg := jsonstream.Message{} err = json.Unmarshal(bytes, &msg) if err != nil { return fmt.Errorf("failed to parse image pull output: %w", err) @@ -170,7 +172,7 @@ func (c *Component) pullImage(ctx context.Context) error { } } - return reader.Close() + return nil } func (c *Component) Start(ctx context.Context) error { @@ -193,11 +195,13 @@ func (c *Component) startContainer(ctx context.Context) (string, error) { var id string res, err := c.cli.ContainerCreate( ctx, - c.runConfig.containerConfig, - c.runConfig.hostConfig, - c.runConfig.networkingConfig, - c.runConfig.platformConfig, - c.containerName, + client.ContainerCreateOptions{ + Config: c.runConfig.containerConfig, + HostConfig: c.runConfig.hostConfig, + NetworkingConfig: c.runConfig.networkingConfig, + Platform: c.runConfig.platformConfig, + Name: c.containerName, + }, ) if err == nil { id = res.ID @@ -212,7 +216,7 @@ func (c *Component) startContainer(ctx context.Context) (string, error) { id = cont.ID } - err = c.cli.ContainerStart(context.Background(), id, container.StartOptions{}) + _, err = c.cli.ContainerStart(context.Background(), id, client.ContainerStartOptions{}) if err != nil { return "", fmt.Errorf("failed to start container: %w", err) } @@ -234,12 +238,12 @@ func (c *Component) Stop(ctx context.Context) error { return nil } - err = c.cli.ContainerStop(ctx, cont.ID, container.StopOptions{}) + _, err = c.cli.ContainerStop(ctx, cont.ID, client.ContainerStopOptions{}) if err != nil { return err } - err = c.cli.ContainerRemove(ctx, cont.ID, container.RemoveOptions{Force: true}) + _, err = c.cli.ContainerRemove(ctx, cont.ID, client.ContainerRemoveOptions{Force: true}) if err != nil && !errdefs.IsNotFound(err) && !errdefs.IsConflict(err) { return err } @@ -261,7 +265,7 @@ func (c *Component) Cleanup(ctx context.Context) error { } func (c *Component) removeImage(ctx context.Context) error { - _, err := c.cli.ImageRemove(ctx, c.imageCloneTag, image.RemoveOptions{}) + _, err := c.cli.ImageRemove(ctx, c.imageCloneTag, client.ImageRemoveOptions{}) if err != nil && !strings.Contains(err.Error(), "reference does not exist") && !strings.Contains(err.Error(), "No such image") { return err } @@ -271,7 +275,7 @@ func (c *Component) removeImage(ctx context.Context) error { return nil } - _, err = c.cli.ImageRemove(ctx, c.config.Image, image.RemoveOptions{}) + _, err = c.cli.ImageRemove(ctx, c.config.Image, client.ImageRemoveOptions{}) if err != nil && !errdefs.IsNotFound(err) { return err } @@ -327,9 +331,8 @@ func (c *Component) Exec(ctx context.Context, cmd []string) (int, error) { } c.Writer().WriteString(c.Writer().Color.Cyan(fmt.Sprintf("executing: %s", strings.Join(cmd, " ")))) - response, err := c.cli.ContainerExecCreate(ctx, cont.ID, container.ExecOptions{ + response, err := c.cli.ExecCreate(ctx, cont.ID, client.ExecCreateOptions{ Cmd: cmd, - Detach: false, AttachStdout: true, AttachStderr: true, }) @@ -337,7 +340,7 @@ func (c *Component) Exec(ctx context.Context, cmd []string) (int, error) { return 0, fmt.Errorf("failed to create exec: %w", err) } - hijack, err := c.cli.ContainerExecAttach(ctx, response.ID, container.ExecStartOptions{}) + hijack, err := c.cli.ExecAttach(ctx, response.ID, client.ExecAttachOptions{}) if err != nil { return 0, fmt.Errorf("failed to attach exec: %w", err) } @@ -349,7 +352,7 @@ func (c *Component) Exec(ctx context.Context, cmd []string) (int, error) { hijack.Close() - execResp, err := c.cli.ContainerExecInspect(ctx, response.ID) + execResp, err := c.cli.ExecInspect(ctx, response.ID, client.ExecInspectOptions{}) if err != nil { return 0, fmt.Errorf("failed to inspect exec: %w", err) } @@ -358,16 +361,16 @@ func (c *Component) Exec(ctx context.Context, cmd []string) (int, error) { return execResp.ExitCode, nil } -func (c *Component) findContainer(ctx context.Context) (*types.Container, error) { - containers, err := c.cli.ContainerList(ctx, container.ListOptions{ +func (c *Component) findContainer(ctx context.Context) (*container.Summary, error) { + result, err := c.cli.ContainerList(ctx, client.ContainerListOptions{ All: true, - Filters: filters.NewArgs(filters.Arg("name", c.containerName)), + Filters: make(client.Filters).Add("name", c.containerName), }) if err != nil { return nil, fmt.Errorf("failed to list containers: %w", err) } - for _, co := range containers { + for _, co := range result.Items { if len(co.Names) > 0 && co.Names[0][1:] == c.containerName { return &co, nil } diff --git a/docker/config.go b/docker/config.go index 7a8e6b7..ff98391 100644 --- a/docker/config.go +++ b/docker/config.go @@ -5,19 +5,22 @@ package docker import ( + "context" "fmt" - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/blkiodev" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/mount" - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/api/types/strslice" + "net/netip" + "os" + "strings" + "time" + "github.com/docker/go-units" + "github.com/moby/moby/api/types/blkiodev" + "github.com/moby/moby/api/types/container" + "github.com/moby/moby/api/types/mount" + "github.com/moby/moby/api/types/network" + "github.com/moby/moby/api/types/strslice" + "github.com/moby/moby/client" ocispec "github.com/opencontainers/image-spec/specs-go/v1" "gopkg.in/yaml.v3" - "os" - "time" ) // Config represents Docker Component configuration @@ -92,7 +95,8 @@ type Config struct { // NetworkDisabled - used for https://github.com/moby/moby/blob/v24.0.6/api/types/container/config.go#L89 NetworkDisabled bool `json:"network_disabled,omitempty"` - // MacAddress - used for https://github.com/moby/moby/blob/v24.0.6/api/types/container/config.go#L90 + // MacAddress - DEPRECATED in v29: MAC address is now set via network endpoint settings + // This field is kept for backwards compatibility but is no longer used MacAddress string `json:"mac_address,omitempty"` // OnBuild - used for https://github.com/moby/moby/blob/v24.0.6/api/types/container/config.go#L91 @@ -287,7 +291,8 @@ type ImagePullOptions struct { // PrivilegeFunc - used for https://github.com/moby/moby/blob/v24.0.6/api/types/client.go#L281 // available only via code, not available in config files - PrivilegeFunc types.RequestPrivilegeFunc `json:"-"` + // Updated signature for v29 - now takes context.Context + PrivilegeFunc func() (string, error) `json:"-"` // Platform - used for https://github.com/moby/moby/blob/v24.0.6/api/types/client.go#L282 Platform string `json:"platform,omitempty"` @@ -393,7 +398,8 @@ type Resources struct { // DeviceRequests - used for https://github.com/moby/moby/blob/v24.0.6/api/types/container/hostconfig.go#L348 DeviceRequests []DeviceRequest `json:"device_requests,omitempty"` - // KernelMemoryTCP - used for https://github.com/moby/moby/blob/v24.0.6/api/types/container/hostconfig.go#L353 + // KernelMemoryTCP - DEPRECATED: This field has been removed in Docker v29 + // This field is kept for backwards compatibility but is no longer used KernelMemoryTCP int64 `json:"kernel_memory_tcp,omitempty"` // MemoryReservation - used for https://github.com/moby/moby/blob/v24.0.6/api/types/container/hostconfig.go#L354 @@ -643,8 +649,8 @@ func (c Config) initialize(network *Network, imageCloneTag string) (*runConfig, return result, nil } -func (c Config) imagePullOptions() (image.PullOptions, error) { - result := image.PullOptions{} +func (c Config) imagePullOptions() (client.ImagePullOptions, error) { + result := client.ImagePullOptions{} if c.ImagePullOptions != nil { var auth string @@ -652,7 +658,7 @@ func (c Config) imagePullOptions() (image.PullOptions, error) { var err error auth, err = c.ImagePullOptions.RegistryAuthFunc() if err != nil { - return image.PullOptions{}, fmt.Errorf("failed to get registry auth: %w", err) + return client.ImagePullOptions{}, fmt.Errorf("failed to get registry auth: %w", err) } } else { auth = c.ImagePullOptions.RegistryAuth @@ -660,8 +666,18 @@ func (c Config) imagePullOptions() (image.PullOptions, error) { result.All = c.ImagePullOptions.All result.RegistryAuth = auth - result.PrivilegeFunc = c.ImagePullOptions.PrivilegeFunc - result.Platform = c.ImagePullOptions.Platform + // Note: PrivilegeFunc signature changed in v29 - now takes context.Context + if c.ImagePullOptions.PrivilegeFunc != nil { + result.PrivilegeFunc = func(_ context.Context) (string, error) { + return c.ImagePullOptions.PrivilegeFunc() + } + } + // Platform is now an array of platforms in v29 + // Parse platform string in format "os[/arch[/variant]]" (e.g., "linux/amd64", "linux/arm64/v8") + if c.ImagePullOptions.Platform != "" { + platform := parsePlatformString(c.ImagePullOptions.Platform) + result.Platforms = []ocispec.Platform{platform} + } } return result, nil @@ -693,12 +709,12 @@ func (c Config) containerConfig(imageCloneTag string) *container.Config { WorkingDir: c.WorkingDir, Entrypoint: strslice.StrSlice(c.Entrypoint), NetworkDisabled: c.NetworkDisabled, - MacAddress: c.MacAddress, - OnBuild: c.OnBuild, - Labels: c.Labels, - StopSignal: c.StopSignal, - StopTimeout: c.StopTimeout, - Shell: strslice.StrSlice(c.Shell), + // MacAddress has been removed in v29 - now set via network endpoint settings + OnBuild: c.OnBuild, + Labels: c.Labels, + StopSignal: c.StopSignal, + StopTimeout: c.StopTimeout, + Shell: strslice.StrSlice(c.Shell), } } @@ -734,7 +750,7 @@ func (c Config) hostConfig(network *Network) *container.HostConfig { CapAdd: strslice.StrSlice(c.CapAdd), CapDrop: strslice.StrSlice(c.CapDrop), CgroupnsMode: c.CgroupnsMode, - DNS: c.DNS, + DNS: convertDNSToNetipAddrs(c.DNS), DNSOptions: c.DNSOptions, DNSSearch: c.DNSSearch, ExtraHosts: c.ExtraHosts, @@ -811,17 +827,17 @@ func (c *Resources) build() container.Resources { Devices: mapSlice(c.Devices, DeviceMapping.build), DeviceCgroupRules: c.DeviceCgroupRules, DeviceRequests: mapSlice(c.DeviceRequests, DeviceRequest.build), - KernelMemoryTCP: c.KernelMemoryTCP, - MemoryReservation: c.MemoryReservation, - MemorySwap: c.MemorySwap, - MemorySwappiness: c.MemorySwappiness, - OomKillDisable: c.OomKillDisable, - PidsLimit: c.PidsLimit, - Ulimits: mapSlice(c.Ulimits, Ulimit.build), - CPUCount: c.CPUCount, - CPUPercent: c.CPUPercent, - IOMaximumIOps: c.IOMaximumIOps, - IOMaximumBandwidth: c.IOMaximumBandwidth, + // KernelMemoryTCP removed in v29 + MemoryReservation: c.MemoryReservation, + MemorySwap: c.MemorySwap, + MemorySwappiness: c.MemorySwappiness, + OomKillDisable: c.OomKillDisable, + PidsLimit: c.PidsLimit, + Ulimits: mapSlice(c.Ulimits, Ulimit.build), + CPUCount: c.CPUCount, + CPUPercent: c.CPUPercent, + IOMaximumIOps: c.IOMaximumIOps, + IOMaximumBandwidth: c.IOMaximumBandwidth, } } @@ -956,3 +972,35 @@ type ErrInvalidConfig struct { func (e ErrInvalidConfig) Error() string { return fmt.Sprintf("invalid docker config - property %s: %s", e.Property, e.Msg) } + +// convertDNSToNetipAddrs converts DNS server strings to netip.Addr slice +func convertDNSToNetipAddrs(dns []string) []netip.Addr { + if len(dns) == 0 { + return nil + } + result := make([]netip.Addr, 0, len(dns)) + for _, d := range dns { + addr, err := netip.ParseAddr(d) + if err == nil { + result = append(result, addr) + } + } + return result +} + +// parsePlatformString parses a platform string in format "os[/arch[/variant]]" +// e.g., "linux", "linux/amd64", "linux/arm64/v8" +func parsePlatformString(platform string) ocispec.Platform { + parts := strings.Split(platform, "/") + p := ocispec.Platform{} + if len(parts) >= 1 { + p.OS = parts[0] + } + if len(parts) >= 2 { + p.Architecture = parts[1] + } + if len(parts) >= 3 { + p.Variant = parts[2] + } + return p +} diff --git a/docker/logs.go b/docker/logs.go index ccb5d15..f992879 100644 --- a/docker/logs.go +++ b/docker/logs.go @@ -7,18 +7,18 @@ package docker import ( "bufio" "context" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/client" - "github.com/docker/docker/pkg/stdcopy" "strings" "time" + + "github.com/moby/moby/api/pkg/stdcopy" + "github.com/moby/moby/client" ) type logHandler func(timestamp time.Time, text string, stream stdcopy.StdType) (stop bool) // followLogs attaches to container's output func followLogs(ctx context.Context, cli *client.Client, id string, handler logHandler) error { - containerReader, err := cli.ContainerLogs(ctx, id, container.LogsOptions{ + containerReader, err := cli.ContainerLogs(ctx, id, client.ContainerLogsOptions{ ShowStdout: true, ShowStderr: true, Timestamps: true, @@ -27,6 +27,7 @@ func followLogs(ctx context.Context, cli *client.Client, id string, handler logH if err != nil { return err } + defer containerReader.Close() scanner := bufio.NewScanner(containerReader) for scanner.Scan() { @@ -46,12 +47,10 @@ func followLogs(ctx context.Context, cli *client.Client, id string, handler logH stop = handler(t, text, stdcopy.Stdout) } if stop { - _ = containerReader.Close() return nil } } - _ = containerReader.Close() return nil } diff --git a/docker/network.go b/docker/network.go index b3ec88d..06cd5dc 100644 --- a/docker/network.go +++ b/docker/network.go @@ -14,10 +14,9 @@ import ( "strings" "sync" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/client" - "github.com/docker/go-connections/nat" + "github.com/moby/moby/api/types/container" + "github.com/moby/moby/api/types/network" + "github.com/moby/moby/client" ) // Network represents a Docker network. @@ -68,12 +67,12 @@ func (n *Network) NewComponent(config Config) (*Component, error) { } func newClosedNetwork(cli *client.Client, envID, networkIdentifier string, runtimeInfo *RuntimeInfo) (*Network, error) { - networks, err := cli.NetworkList(context.Background(), network.ListOptions{}) + result, err := cli.NetworkList(context.Background(), client.NetworkListOptions{}) if err != nil { return nil, fmt.Errorf("failed to list networks: %w", err) } - nw, err := findNetwork(networks, networkIdentifier) + nw, err := findNetwork(result.Items, networkIdentifier) if err != nil { return nil, fmt.Errorf("failed to find network: %w", err) } @@ -139,16 +138,21 @@ func newOpenNetwork(cli *client.Client, envID string, runtimeInfo *RuntimeInfo) EndpointsConfig: map[string]*network.EndpointSettings{id: {NetworkID: id}}, } runConfig.hostname = runtimeInfo.InternalHostname - runConfig.containerConfig.ExposedPorts = nat.PortSet{} - runConfig.hostConfig.PortBindings = nat.PortMap{} + runConfig.containerConfig.ExposedPorts = make(network.PortSet) + runConfig.hostConfig.PortBindings = make(network.PortMap) for _, port := range config.Ports { protocol := port.Protocol if protocol == "" { protocol = "tcp" } - p := nat.Port(fmt.Sprintf("%s/%s", port.Port, protocol)) + p, err := network.ParsePort(fmt.Sprintf("%s/%s", port.Port, protocol)) + if err != nil { + // Log warning about invalid port but continue with other ports + fmt.Printf("warning: invalid port configuration '%s/%s': %v\n", port.Port, protocol, err) + continue + } runConfig.containerConfig.ExposedPorts[p] = struct{}{} - runConfig.hostConfig.PortBindings[p] = append(runConfig.hostConfig.PortBindings[p], nat.PortBinding{ + runConfig.hostConfig.PortBindings[p] = append(runConfig.hostConfig.PortBindings[p], network.PortBinding{ HostPort: port.Port, }) } @@ -166,7 +170,7 @@ func (n *Network) delete(ctx context.Context, c *Component) error { n.lock.Lock() defer n.lock.Unlock() - err := c.cli.NetworkRemove(ctx, c.envID) + _, err := c.cli.NetworkRemove(ctx, c.envID, client.NetworkRemoveOptions{}) if err != nil && !strings.Contains(err.Error(), "has active endpoints") && !strings.Contains(err.Error(), "not found") { @@ -177,7 +181,7 @@ func (n *Network) delete(ctx context.Context, c *Component) error { } func createNetworkIfNotExist(cli *client.Client, name, driver string) (string, error) { - res, err := cli.NetworkCreate(context.Background(), name, network.CreateOptions{ + res, err := cli.NetworkCreate(context.Background(), name, client.NetworkCreateOptions{ Driver: driver, }) if err != nil { diff --git a/docker/runtime.go b/docker/runtime.go index 2039070..dec34c5 100644 --- a/docker/runtime.go +++ b/docker/runtime.go @@ -6,7 +6,7 @@ import ( "strings" "time" - "github.com/docker/docker/client" + "github.com/moby/moby/client" ) // RuntimeInfo contains information about a runtime type @@ -21,10 +21,11 @@ type RuntimeInfo struct { // ExtractRuntimeInfo detects the Docker daemon implementation for the given client func ExtractRuntimeInfo(ctx context.Context, cli *client.Client) (*RuntimeInfo, error) { - info, err := cli.Info(ctx) + result, err := cli.Info(ctx, client.InfoOptions{}) if err != nil { return nil, fmt.Errorf("failed to get docker info: %w", err) } + info := result.Info name := strings.ToLower(info.Name) serverVersion := strings.ToLower(info.ServerVersion) diff --git a/docker/waiter.go b/docker/waiter.go index def3ae6..716026e 100644 --- a/docker/waiter.go +++ b/docker/waiter.go @@ -7,11 +7,12 @@ package docker import ( "context" "fmt" - "github.com/docker/docker/client" - "github.com/docker/docker/pkg/stdcopy" "regexp" "strings" "time" + + "github.com/moby/moby/api/pkg/stdcopy" + "github.com/moby/moby/client" ) // WaitForLog creates a waiter for waiting until a specific string is found in the container logs. diff --git a/go.mod b/go.mod index 5f9237e..e13825b 100644 --- a/go.mod +++ b/go.mod @@ -1,16 +1,17 @@ module github.com/perimeterx/envite -go 1.23.0 +go 1.24.0 -toolchain go1.23.10 +toolchain go1.24.13 require ( - github.com/docker/docker v28.5.1+incompatible - github.com/docker/go-connections v0.4.0 + github.com/containerd/errdefs v1.0.0 github.com/docker/go-units v0.5.0 github.com/go-redis/redis/v8 v8.11.5 github.com/gorilla/mux v1.8.0 - github.com/opencontainers/image-spec v1.0.2 + github.com/moby/moby/api v1.54.0 + github.com/moby/moby/client v0.3.1-0.20260325154711-f78c987ad371 + github.com/opencontainers/image-spec v1.1.1 github.com/stretchr/testify v1.11.1 go.mongodb.org/mongo-driver v1.12.1 golang.org/x/sync v0.7.0 @@ -18,45 +19,33 @@ require ( ) require ( - github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect - github.com/containerd/log v0.1.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/distribution/reference v0.5.0 // indirect + github.com/distribution/reference v0.6.0 // indirect + github.com/docker/go-connections v0.6.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang/snappy v0.0.1 // indirect github.com/klauspost/compress v1.13.6 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/sys/atomicwriter v0.1.0 // indirect - github.com/moby/term v0.5.0 // indirect github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe // indirect - github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/xdg-go/pbkdf2 v1.0.0 // indirect github.com/xdg-go/scram v1.1.2 // indirect github.com/xdg-go/stringprep v1.0.4 // indirect github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect go.opentelemetry.io/otel v1.38.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1 // indirect go.opentelemetry.io/otel/metric v1.38.0 // indirect - go.opentelemetry.io/otel/sdk v1.23.1 // indirect go.opentelemetry.io/otel/trace v1.38.0 // indirect golang.org/x/crypto v0.22.0 // indirect - golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.24.0 // indirect - golang.org/x/sys v0.24.0 // indirect + golang.org/x/sys v0.33.0 // indirect golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.20.0 // indirect - gotest.tools/v3 v3.5.1 // indirect ) diff --git a/go.sum b/go.sum index a461801..e2c0582 100644 --- a/go.sum +++ b/go.sum @@ -1,29 +1,19 @@ -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= -github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= -github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= -github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v28.5.1+incompatible h1:Bm8DchhSD2J6PsFzxC35TZo4TLGR2PdW/E69rU45NhM= -github.com/docker/docker v28.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= +github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= +github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -42,10 +32,10 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -54,16 +44,12 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= -github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= -github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= -github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= -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/moby/moby/api v1.54.0 h1:7kbUgyiKcoBhm0UrWbdrMs7RX8dnwzURKVbZGy2GnL0= +github.com/moby/moby/api v1.54.0/go.mod h1:8mb+ReTlisw4pS6BRzCMts5M49W5M7bKt1cJy/YbAqc= +github.com/moby/moby/client v0.3.1-0.20260325154711-f78c987ad371 h1:dogzrbxxZ64YNZWLm51FEGOAP6/eRhFoj4j1bp3T4Og= +github.com/moby/moby/client v0.3.1-0.20260325154711-f78c987ad371/go.mod h1:HJgFbJRvogDQjbM8fqc1MCEm4mIAGMLjXbgwoZp6jCQ= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe h1:iruDEfMl2E6fbMZ9s0scYfZQ84/6SPL6zC8ACM2oIL0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= @@ -72,16 +58,12 @@ github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -97,30 +79,24 @@ go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecq go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0 h1:doUP+ExOpH3spVTLS0FcWGLnQrPct/hD/bCPbDRUEAU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.48.0/go.mod h1:rdENBZMT2OE6Ne/KLwpiXudnAsbdrdBaqBvTN8M8BgA= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 h1:o8iWeVFa1BcLtVEV0LzrCxV2/55tB3xLxADr6Kyoey4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1/go.mod h1:SEVfdK4IoBnbT2FXNM/k8yC08MrfbhWk3U4ljM8B3HE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1 h1:cfuy3bXmLJS7M1RZmAL6SuhGtKUp2KEsrm00OlAXkq4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.23.1/go.mod h1:22jr92C6KwlwItJmQzfixzQM3oyyuYLCfHiMY+rpsPU= go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= -go.opentelemetry.io/otel/sdk v1.23.1 h1:O7JmZw0h76if63LQdsBMKQDWNb5oEcOThG9IrxscV+E= -go.opentelemetry.io/otel/sdk v1.23.1/go.mod h1:LzdEVR5am1uKOOwfBWFef2DCi1nu3SA8XQxx2IerWFk= +go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= +go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= +go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= +go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= -go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= -go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= -golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -135,11 +111,10 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -150,23 +125,11 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= -golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917 h1:rcS6EyEaoCO52hQDupoSfrxI3R6C2Tq741is7X8OvnM= -google.golang.org/genproto/googleapis/api v0.0.0-20240102182953-50ed04b92917/go.mod h1:CmlNWB9lSezaYELKS5Ym1r44VrrbPUa7JTvw+6MbpJ0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= -google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= -google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -176,5 +139,7 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= +pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= +pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=