diff --git a/.github/workflows/bin-image.yml b/.github/workflows/bin-image.yml
index 40418f88ca5f2..69be75cce2d66 100644
--- a/.github/workflows/bin-image.yml
+++ b/.github/workflows/bin-image.yml
@@ -19,6 +19,7 @@ on:
branches:
- 'master'
- '[0-9]+.[0-9]+'
+ - '[0-9]+.x'
tags:
- 'v*'
pull_request:
@@ -57,7 +58,7 @@ jobs:
## push semver tag v23.0.0
# moby/moby-bin:23.0.0
# moby/moby-bin:latest
- ## push semver prelease tag v23.0.0-beta.1
+ ## push semver prerelease tag v23.0.0-beta.1
# moby/moby-bin:23.0.0-beta.1
## push on master
# moby/moby-bin:master
diff --git a/.golangci.yml b/.golangci.yml
index 51fc021f627cb..45e6447b4aae0 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -87,7 +87,7 @@ issues:
# (unlike the "include" option), the "exclude" option does not take exclusion
# ID's.
#
- # These exclusion patterns are copied from the default excluses at:
+ # These exclusion patterns are copied from the default excludes at:
# https://github.com/golangci/golangci-lint/blob/v1.46.2/pkg/config/issues.go#L10-L104
# EXC0001
diff --git a/Dockerfile b/Dockerfile
index 6e71e20000de8..622f4b4443cee 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,12 +8,12 @@ ARG XX_VERSION=1.5.0
ARG VPNKIT_VERSION=0.5.0
ARG DOCKERCLI_REPOSITORY="https://github.com/docker/cli.git"
-ARG DOCKERCLI_VERSION=v27.0.2
+ARG DOCKERCLI_VERSION=v27.2.1
# cli version used for integration-cli tests
ARG DOCKERCLI_INTEGRATION_REPOSITORY="https://github.com/docker/cli.git"
ARG DOCKERCLI_INTEGRATION_VERSION=v17.06.2-ce
-ARG BUILDX_VERSION=0.16.1
-ARG COMPOSE_VERSION=v2.29.0
+ARG BUILDX_VERSION=0.17.0
+ARG COMPOSE_VERSION=v2.29.2
ARG SYSTEMD="false"
ARG DOCKER_STATIC=1
@@ -196,7 +196,7 @@ RUN git init . && git remote add origin "https://github.com/containerd/container
# When updating the binary version you may also need to update the vendor
# version to pick up bug fixes or new APIs, however, usually the Go packages
# are built from a commit from the master branch.
-ARG CONTAINERD_VERSION=v1.7.21
+ARG CONTAINERD_VERSION=v1.7.22
RUN git fetch -q --depth 1 origin "${CONTAINERD_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
FROM base AS containerd-build
@@ -356,7 +356,7 @@ FROM base AS rootlesskit-src
WORKDIR /usr/src/rootlesskit
RUN git init . && git remote add origin "https://github.com/rootless-containers/rootlesskit.git"
# When updating, also update vendor.mod and hack/dockerfile/install/rootlesskit.installer accordingly.
-ARG ROOTLESSKIT_VERSION=v2.0.2
+ARG ROOTLESSKIT_VERSION=v2.3.1
RUN git fetch -q --depth 1 origin "${ROOTLESSKIT_VERSION}" +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
FROM base AS rootlesskit-build
diff --git a/Dockerfile.windows b/Dockerfile.windows
index 9d0427fe71ea1..04458863e03c9 100644
--- a/Dockerfile.windows
+++ b/Dockerfile.windows
@@ -164,7 +164,7 @@ SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPref
ARG GO_VERSION=1.22.7
ARG GOTESTSUM_VERSION=v1.8.2
ARG GOWINRES_VERSION=v0.3.1
-ARG CONTAINERD_VERSION=v1.7.21
+ARG CONTAINERD_VERSION=v1.7.22
# Environment variable notes:
# - GO_VERSION must be consistent with 'Dockerfile' used by Linux.
diff --git a/Makefile b/Makefile
index 1b8dd04d1fbe0..155ce10b4b0e0 100644
--- a/Makefile
+++ b/Makefile
@@ -90,7 +90,7 @@ DOCKER_ENVS := \
# note: BINDDIR is supported for backwards-compatibility here
BIND_DIR := $(if $(BINDDIR),$(BINDDIR),$(if $(DOCKER_HOST),,bundles))
-# DOCKER_MOUNT can be overriden, but use at your own risk!
+# DOCKER_MOUNT can be overridden, but use at your own risk!
ifndef DOCKER_MOUNT
DOCKER_MOUNT := $(if $(BIND_DIR),-v "$(CURDIR)/$(BIND_DIR):/go/src/github.com/docker/docker/$(BIND_DIR)")
DOCKER_MOUNT := $(if $(DOCKER_BINDDIR_MOUNT_OPTS),$(DOCKER_MOUNT):$(DOCKER_BINDDIR_MOUNT_OPTS),$(DOCKER_MOUNT))
diff --git a/api/server/router/network/network_routes.go b/api/server/router/network/network_routes.go
index f5e996805a20a..22a0281b6c266 100644
--- a/api/server/router/network/network_routes.go
+++ b/api/server/router/network/network_routes.go
@@ -75,13 +75,13 @@ func (e invalidRequestError) Error() string {
func (e invalidRequestError) InvalidParameter() {}
-type ambigousResultsError string
+type ambiguousResultsError string
-func (e ambigousResultsError) Error() string {
+func (e ambiguousResultsError) Error() string {
return "network " + string(e) + " is ambiguous"
}
-func (ambigousResultsError) InvalidParameter() {}
+func (ambiguousResultsError) InvalidParameter() {}
func (n *networkRouter) getNetwork(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if err := httputils.ParseForm(r); err != nil {
@@ -182,7 +182,7 @@ func (n *networkRouter) getNetwork(ctx context.Context, w http.ResponseWriter, r
}
}
if len(listByFullName) > 1 {
- return errors.Wrapf(ambigousResultsError(term), "%d matches found based on name", len(listByFullName))
+ return errors.Wrapf(ambiguousResultsError(term), "%d matches found based on name", len(listByFullName))
}
// Find based on partial ID, returns true only if no duplicates
@@ -192,7 +192,7 @@ func (n *networkRouter) getNetwork(ctx context.Context, w http.ResponseWriter, r
}
}
if len(listByPartialID) > 1 {
- return errors.Wrapf(ambigousResultsError(term), "%d matches found based on ID prefix", len(listByPartialID))
+ return errors.Wrapf(ambiguousResultsError(term), "%d matches found based on ID prefix", len(listByPartialID))
}
return libnetwork.ErrNoSuchNetwork(term)
diff --git a/api/swagger.yaml b/api/swagger.yaml
index 69ad8a37df6fc..7164e1eba53d5 100644
--- a/api/swagger.yaml
+++ b/api/swagger.yaml
@@ -393,7 +393,7 @@ definitions:
Make the mount non-recursively read-only, but still leave the mount recursive
(unless NonRecursive is set to `true` in conjunction).
- Addded in v1.44, before that version all read-only mounts were
+ Added in v1.44, before that version all read-only mounts were
non-recursive by default. To match the previous behaviour this
will default to `true` for clients on versions prior to v1.44.
type: "boolean"
@@ -1384,7 +1384,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
example: ""
Domainname:
@@ -1394,7 +1394,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
example: ""
User:
@@ -1408,7 +1408,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1419,7 +1419,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1430,7 +1430,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1457,7 +1457,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1468,7 +1468,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1479,7 +1479,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1516,7 +1516,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
default: ""
example: ""
@@ -1555,7 +1555,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1567,7 +1567,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "string"
default: ""
example: ""
@@ -1601,7 +1601,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "integer"
default: 10
x-nullable: true
@@ -2216,7 +2216,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2513,7 +2513,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3736,7 +3736,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7712,7 +7712,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -9226,12 +9226,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/api/types/filters/parse.go b/api/types/filters/parse.go
index 0c39ab5f18b53..0914b2a4410c7 100644
--- a/api/types/filters/parse.go
+++ b/api/types/filters/parse.go
@@ -196,7 +196,7 @@ func (args Args) Match(field, source string) bool {
}
// GetBoolOrDefault returns a boolean value of the key if the key is present
-// and is intepretable as a boolean value. Otherwise the default value is returned.
+// and is interpretable as a boolean value. Otherwise the default value is returned.
// Error is not nil only if the filter values are not valid boolean or are conflicting.
func (args Args) GetBoolOrDefault(key string, defaultValue bool) (bool, error) {
fieldValues, ok := args.fields[key]
diff --git a/api/types/image/summary.go b/api/types/image/summary.go
index c7168fe62eab8..e87e216a28b35 100644
--- a/api/types/image/summary.go
+++ b/api/types/image/summary.go
@@ -12,7 +12,7 @@ type Summary struct {
Containers int64 `json:"Containers"`
// Date and time at which the image was created as a Unix timestamp
- // (number of seconds sinds EPOCH).
+ // (number of seconds since EPOCH).
//
// Required: true
Created int64 `json:"Created"`
diff --git a/api/types/swarm/swarm.go b/api/types/swarm/swarm.go
index 3eae4b9b297d2..1b4be6fffbab6 100644
--- a/api/types/swarm/swarm.go
+++ b/api/types/swarm/swarm.go
@@ -122,7 +122,7 @@ type CAConfig struct {
SigningCAKey string `json:",omitempty"`
// If this value changes, and there is no specified signing cert and key,
- // then the swarm is forced to generate a new root certificate ane key.
+ // then the swarm is forced to generate a new root certificate and key.
ForceRotate uint64 `json:",omitempty"`
}
diff --git a/api/types/volume/cluster_volume.go b/api/types/volume/cluster_volume.go
index bbd9ff0b8f977..618a4816209a7 100644
--- a/api/types/volume/cluster_volume.go
+++ b/api/types/volume/cluster_volume.go
@@ -414,7 +414,7 @@ type Info struct {
// the Volume has not been successfully created yet.
VolumeID string `json:",omitempty"`
- // AccessibleTopolgoy is the topology this volume is actually accessible
+ // AccessibleTopology is the topology this volume is actually accessible
// from.
AccessibleTopology []Topology `json:",omitempty"`
}
diff --git a/builder/builder-next/worker/worker.go b/builder/builder-next/worker/worker.go
index 0ea938367e8e4..7bb25b77820c8 100644
--- a/builder/builder-next/worker/worker.go
+++ b/builder/builder-next/worker/worker.go
@@ -354,13 +354,13 @@ func (w *Worker) GetRemotes(ctx context.Context, ref cache.ImmutableRef, createI
}
// PruneCacheMounts removes the current cache snapshots for specified IDs
-func (w *Worker) PruneCacheMounts(ctx context.Context, ids []string) error {
+func (w *Worker) PruneCacheMounts(ctx context.Context, ids map[string]bool) error {
mu := mounts.CacheMountsLocker()
mu.Lock()
defer mu.Unlock()
- for _, id := range ids {
- mds, err := mounts.SearchCacheDir(ctx, w.CacheManager(), id)
+ for id, nested := range ids {
+ mds, err := mounts.SearchCacheDir(ctx, w.CacheManager(), id, nested)
if err != nil {
return err
}
diff --git a/cmd/dockerd/config.go b/cmd/dockerd/config.go
index 02d606cc1e037..2472e9709c50e 100644
--- a/cmd/dockerd/config.go
+++ b/cmd/dockerd/config.go
@@ -4,6 +4,7 @@ import (
"runtime"
"github.com/docker/docker/daemon/config"
+ dopts "github.com/docker/docker/internal/opts"
"github.com/docker/docker/opts"
"github.com/docker/docker/registry"
"github.com/spf13/pflag"
@@ -28,6 +29,7 @@ func installCommonConfigFlags(conf *config.Config, flags *pflag.FlagSet) error {
flags.StringVar(&conf.ExecRoot, "exec-root", conf.ExecRoot, "Root directory for execution state files")
flags.StringVar(&conf.ContainerdAddr, "containerd", "", "containerd grpc address")
flags.BoolVar(&conf.CriContainerd, "cri-containerd", false, "start containerd with cri")
+ flags.Var(dopts.NewNamedSetOpts("features", conf.Features), "feature", "Enable feature in the daemon")
flags.Var(opts.NewNamedMapMapOpts("default-network-opts", conf.DefaultNetworkOpts, nil), "default-network-opt", "Default network options")
flags.IntVar(&conf.MTU, "mtu", conf.MTU, `Set the MTU for the default "bridge" network`)
diff --git a/cmd/dockerd/daemon.go b/cmd/dockerd/daemon.go
index 6bdf0175eaa8f..2313c5d7f6651 100644
--- a/cmd/dockerd/daemon.go
+++ b/cmd/dockerd/daemon.go
@@ -270,7 +270,7 @@ func (cli *DaemonCli) start(opts *daemonOptions) (err error) {
}
// Note that CDI is not inherently linux-specific, there are some linux-specific assumptions / implementations in the code that
- // queries the properties of device on the host as wel as performs the injection of device nodes and their access permissions into the OCI spec.
+ // queries the properties of device on the host as well as performs the injection of device nodes and their access permissions into the OCI spec.
//
// In order to lift this restriction the following would have to be addressed:
// - Support needs to be added to the cdi package for injecting Windows devices: https://tags.cncf.io/container-device-interface/issues/28
diff --git a/container/container.go b/container/container.go
index 25907e1202ab9..d9c5bb736c9ce 100644
--- a/container/container.go
+++ b/container/container.go
@@ -325,7 +325,7 @@ func (container *Container) SetupWorkingDirectory(rootIdentity idtools.Identity)
}
// GetResourcePath evaluates `path` in the scope of the container's BaseFS, with proper path
-// sanitisation. Symlinks are all scoped to the BaseFS of the container, as
+// sanitization. Symlinks are all scoped to the BaseFS of the container, as
// though the container's BaseFS was `/`.
//
// The BaseFS of a container is the host-facing path which is bind-mounted as
@@ -368,7 +368,7 @@ func cleanScopedPath(path string) string {
}
// GetRootResourcePath evaluates `path` in the scope of the container's root, with proper path
-// sanitisation. Symlinks are all scoped to the root of the container, as
+// sanitization. Symlinks are all scoped to the root of the container, as
// though the container's root was `/`.
//
// The root of a container is the host-facing configuration metadata directory.
diff --git a/daemon/cdi.go b/daemon/cdi.go
index 815e15f641c78..75b59511135a7 100644
--- a/daemon/cdi.go
+++ b/daemon/cdi.go
@@ -34,7 +34,7 @@ func newCDIDeviceDriver(cdiSpecDirs ...string) *deviceDriver {
// We create a spec updater that always returns an error.
// This error will be returned only when a CDI device is requested.
// This ensures that daemon startup is not blocked by a CDI registry initialization failure or being disabled
- // by configuratrion.
+ // by configuration.
errorOnUpdateSpec := func(s *specs.Spec, dev *deviceInstance) error {
return fmt.Errorf("CDI device injection failed: %w", err)
}
diff --git a/daemon/cluster/convert/service_test.go b/daemon/cluster/convert/service_test.go
index 6f058829ee315..29b9d28201f1d 100644
--- a/daemon/cluster/convert/service_test.go
+++ b/daemon/cluster/convert/service_test.go
@@ -396,7 +396,7 @@ func TestServiceConvertFromGRPCCredentialSpec(t *testing.T) {
}
}
-func TestServiceConvertToGRPCNetworkAtachmentRuntime(t *testing.T) {
+func TestServiceConvertToGRPCNetworkAttachmentRuntime(t *testing.T) {
someid := "asfjkl"
s := swarmtypes.ServiceSpec{
TaskTemplate: swarmtypes.TaskSpec{
diff --git a/daemon/cluster/executor/container/adapter_test.go b/daemon/cluster/executor/container/adapter_test.go
index c57d3bfc2abba..03b3b9ab45c9c 100644
--- a/daemon/cluster/executor/container/adapter_test.go
+++ b/daemon/cluster/executor/container/adapter_test.go
@@ -19,7 +19,7 @@ func TestWaitNodeAttachment(t *testing.T) {
// and add some attachments to it
attachmentStore := emptyDaemon.GetAttachmentStore()
- // create a set of attachments to put into the attahcment store
+ // create a set of attachments to put into the attachment store
attachments := map[string]string{
"network1": "10.1.2.3/24",
}
diff --git a/daemon/config/config.go b/daemon/config/config.go
index 04f5ec13856d2..bd72d089beef8 100644
--- a/daemon/config/config.go
+++ b/daemon/config/config.go
@@ -305,6 +305,7 @@ func New() (*Config, error) {
},
ContainerdNamespace: DefaultContainersNamespace,
ContainerdPluginNamespace: DefaultPluginNamespace,
+ Features: make(map[string]bool),
DefaultRuntime: StockRuntimeName,
MinAPIVersion: defaultMinAPIVersion,
},
diff --git a/daemon/config/config_linux_test.go b/daemon/config/config_linux_test.go
index 4b81be30b706f..d3f96b2aed219 100644
--- a/daemon/config/config_linux_test.go
+++ b/daemon/config/config_linux_test.go
@@ -4,6 +4,7 @@ import (
"testing"
"github.com/docker/docker/api/types/container"
+ dopts "github.com/docker/docker/internal/opts"
"github.com/docker/docker/opts"
"github.com/spf13/pflag"
"gotest.tools/v3/assert"
@@ -121,6 +122,72 @@ func TestDaemonConfigurationMergeShmSize(t *testing.T) {
assert.Check(t, is.Equal(int64(expectedValue), cc.ShmSize.Value()))
}
+func TestDaemonConfigurationFeatures(t *testing.T) {
+ tests := []struct {
+ name, config, flags string
+ expectedValue map[string]bool
+ expectedErr string
+ }{
+ {
+ name: "enable from file",
+ config: `{"features": {"containerd-snapshotter": true}}`,
+ expectedValue: map[string]bool{"containerd-snapshotter": true},
+ },
+ {
+ name: "enable from flags",
+ config: `{}`,
+ flags: "containerd-snapshotter=true",
+ expectedValue: map[string]bool{"containerd-snapshotter": true},
+ },
+ {
+ name: "disable from file",
+ config: `{"features": {"containerd-snapshotter": false}}`,
+ expectedValue: map[string]bool{"containerd-snapshotter": false},
+ },
+ {
+ name: "disable from flags",
+ config: `{}`,
+ flags: "containerd-snapshotter=false",
+ expectedValue: map[string]bool{"containerd-snapshotter": false},
+ },
+ {
+ name: "conflict",
+ config: `{"features": {"containerd-snapshotter": true}}`,
+ flags: "containerd-snapshotter=true",
+ expectedErr: `the following directives are specified both as a flag and in the configuration file: features: (from flag: map[containerd-snapshotter:true], from file: map[containerd-snapshotter:true])`,
+ },
+ {
+ name: "invalid config value",
+ config: `{"features": {"containerd-snapshotter": "not-a-boolean"}}`,
+ expectedErr: `json: cannot unmarshal string into Go struct field Config.features of type bool`,
+ },
+ }
+
+ for _, tc := range tests {
+ tc := tc
+
+ t.Run(tc.name, func(t *testing.T) {
+ c, err := New()
+ assert.NilError(t, err)
+
+ configFile := makeConfigFile(t, tc.config)
+ flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
+ flags.Var(dopts.NewNamedSetOpts("features", c.Features), "feature", "Enable feature in the daemon")
+ if tc.flags != "" {
+ err = flags.Set("feature", tc.flags)
+ assert.NilError(t, err)
+ }
+ cc, err := MergeDaemonConfigurations(c, flags, configFile)
+ if tc.expectedErr != "" {
+ assert.Error(t, err, tc.expectedErr)
+ } else {
+ assert.NilError(t, err)
+ assert.Check(t, is.DeepEqual(tc.expectedValue, cc.Features))
+ }
+ })
+ }
+}
+
func TestUnixGetInitPath(t *testing.T) {
testCases := []struct {
config *Config
diff --git a/daemon/containerd/image_import.go b/daemon/containerd/image_import.go
index 4b0c2ebe9dff3..8b37c8a083f9a 100644
--- a/daemon/containerd/image_import.go
+++ b/daemon/containerd/image_import.go
@@ -327,7 +327,7 @@ func (i *ImageService) unpackImage(ctx context.Context, snapshotter string, img
return nil
}
-// detectCompression dectects the reader compression type.
+// detectCompression detects the reader compression type.
func detectCompression(bufRd *bufio.Reader) (archive.Compression, error) {
bs, err := bufRd.Peek(10)
if err != nil && err != io.EOF {
diff --git a/daemon/containerd/image_prune.go b/daemon/containerd/image_prune.go
index 6af2e6deab422..071d651fc8b6a 100644
--- a/daemon/containerd/image_prune.go
+++ b/daemon/containerd/image_prune.go
@@ -2,14 +2,17 @@ package containerd
import (
"context"
+ "sort"
"strings"
containerdimages "github.com/containerd/containerd/images"
+ "github.com/containerd/containerd/tracing"
cerrdefs "github.com/containerd/errdefs"
"github.com/containerd/log"
"github.com/distribution/reference"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/api/types/image"
+ "github.com/docker/docker/container"
"github.com/docker/docker/errdefs"
"github.com/hashicorp/go-multierror"
"github.com/opencontainers/go-digest"
@@ -60,8 +63,23 @@ func (i *ImageService) ImagesPrune(ctx context.Context, fltrs filters.Args) (*im
return i.pruneUnused(ctx, filterFunc, danglingOnly)
}
+// pruneUnused deletes images that are dangling or unused by any container.
+// The behavior is controlled by the danglingOnly parameter.
+// If danglingOnly is true, only dangling images are deleted.
+// Otherwise, all images unused by any container are deleted.
+//
+// Additionally, the filterFunc parameter is used to filter images that should
+// be considered for deletion.
+//
+// Container created with images specified by an ID only (e.g. `docker run 82d1e9d`)
+// will keep at least one image tag with that ID.
+//
+// In case a digested and tagged reference was used (e.g. `docker run alpine:latest@sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1`),
+// the alpine:latest image will be kept.
func (i *ImageService) pruneUnused(ctx context.Context, filterFunc imageFilterFunc, danglingOnly bool) (*image.PruneReport, error) {
- report := image.PruneReport{}
+ ctx, span := tracing.StartSpan(ctx, "ImageService.pruneUnused")
+ span.SetAttributes(tracing.Attribute("danglingOnly", danglingOnly))
+ defer span.End()
allImages, err := i.images.List(ctx)
if err != nil {
@@ -85,16 +103,52 @@ func (i *ImageService) pruneUnused(ctx context.Context, filterFunc imageFilterFu
if canBePruned {
imagesToPrune[img.Name] = img
}
+ }
+ }
+
+ usedDigests := filterImagesUsedByContainers(ctx, i.containers.List(), imagesToPrune)
+
+ // Sort images by name to make the behavior deterministic and consistent with graphdrivers.
+ sorted := make([]string, 0, len(imagesToPrune))
+ for name := range imagesToPrune {
+ sorted = append(sorted, name)
+ }
+ sort.Strings(sorted)
+
+ // Make sure we don't delete the last image of a particular digest used by any container.
+ for _, name := range sorted {
+ img := imagesToPrune[name]
+ dgst := img.Target.Digest
+
+ if digestRefCount[dgst] > 1 {
+ digestRefCount[dgst] -= 1
+ continue
+ }
+ if _, isUsed := usedDigests[dgst]; isUsed {
+ delete(imagesToPrune, name)
}
}
+ return i.pruneAll(ctx, imagesToPrune)
+}
+
+// filterImagesUsedByContainers removes image names that are used by containers
+// and returns a map of used image digests.
+func filterImagesUsedByContainers(ctx context.Context,
+ allContainers []*container.Container,
+ imagesToPrune map[string]containerdimages.Image,
+) (usedDigests map[digest.Digest]struct{}) {
+ ctx, span := tracing.StartSpan(ctx, "filterImagesUsedByContainers")
+ span.SetAttributes(tracing.Attribute("count", len(allContainers)))
+ defer span.End()
+
// Image specified by digests that are used by containers.
- usedDigests := map[digest.Digest]struct{}{}
+ usedDigests = map[digest.Digest]struct{}{}
// Exclude images used by existing containers
- for _, ctr := range i.containers.List() {
- // If the original image was deleted, make sure we don't delete the dangling image
+ for _, ctr := range allContainers {
+ // If the original image was force deleted, make sure we don't delete the dangling image
delete(imagesToPrune, danglingImageName(ctr.ImageID.Digest()))
// Config.Image is the image reference passed by user.
@@ -105,41 +159,48 @@ func (i *ImageService) pruneUnused(ctx context.Context, filterFunc imageFilterFu
// but both will have ImageID="sha256:82d1e9d7ed48a7523bdebc18cf6290bdb97b82302a8a9c27d4fe885949ea94d1"
imageDgst := ctr.ImageID.Digest()
- // If user didn't specify an explicit image, mark the digest as used.
+ // If user used an full or truncated ID instead of an explicit image name, mark the digest as used.
normalizedImageID := "sha256:" + strings.TrimPrefix(ctr.Config.Image, "sha256:")
- if strings.HasPrefix(imageDgst.String(), normalizedImageID) {
+ fullOrTruncatedID := strings.HasPrefix(imageDgst.String(), normalizedImageID)
+ digestedRef := strings.HasSuffix(ctr.Config.Image, "@"+imageDgst.String())
+ if fullOrTruncatedID || digestedRef {
usedDigests[imageDgst] = struct{}{}
- continue
}
ref, err := reference.ParseNormalizedNamed(ctr.Config.Image)
log.G(ctx).WithFields(log.Fields{
"ctr": ctr.ID,
- "image": ref,
+ "imageRef": ref,
+ "imageID": imageDgst,
"nameParseErr": err,
}).Debug("filtering container's image")
-
if err == nil {
// If user provided a specific image name, exclude that image.
name := reference.TagNameOnly(ref)
delete(imagesToPrune, name.String())
- }
- }
-
- // Create dangling images for images that will be deleted but are still in use.
- for _, img := range imagesToPrune {
- dgst := img.Target.Digest
- digestRefCount[dgst] -= 1
- if digestRefCount[dgst] == 0 {
- if _, isUsed := usedDigests[dgst]; isUsed {
- if err := i.ensureDanglingImage(ctx, img); err != nil {
- return &report, errors.Wrapf(err, "failed to create ensure dangling image for %s", img.Name)
- }
+ // Also exclude repo:tag image if repo:tag@sha256:digest reference was used.
+ _, isDigested := name.(reference.Digested)
+ tagged, isTagged := name.(reference.NamedTagged)
+ if isDigested && isTagged {
+ named, _ := reference.ParseNormalizedNamed(tagged.Name())
+ namedTagged, _ := reference.WithTag(named, tagged.Tag())
+ delete(imagesToPrune, namedTagged.String())
}
}
}
+ return usedDigests
+}
+
+// pruneAll deletes all images in the imagesToPrune map.
+func (i *ImageService) pruneAll(ctx context.Context, imagesToPrune map[string]containerdimages.Image) (*image.PruneReport, error) {
+ report := image.PruneReport{}
+
+ ctx, span := tracing.StartSpan(ctx, "ImageService.pruneAll")
+ span.SetAttributes(tracing.Attribute("count", len(imagesToPrune)))
+ defer span.End()
+
possiblyDeletedConfigs := map[digest.Digest]struct{}{}
var errs error
diff --git a/daemon/containerd/image_push_test.go b/daemon/containerd/image_push_test.go
index 38600a2dc54a5..5d996e3c6eab8 100644
--- a/daemon/containerd/image_push_test.go
+++ b/daemon/containerd/image_push_test.go
@@ -7,6 +7,7 @@ import (
"context"
"fmt"
"path/filepath"
+ "slices"
"testing"
containerdimages "github.com/containerd/containerd/images"
@@ -15,7 +16,6 @@ import (
"github.com/docker/docker/errdefs"
"github.com/docker/docker/internal/testutils/specialimage"
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
- "golang.org/x/exp/slices"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
)
diff --git a/daemon/containerd/service.go b/daemon/containerd/service.go
index 4c1f42fbf483a..cad463c7650fb 100644
--- a/daemon/containerd/service.go
+++ b/daemon/containerd/service.go
@@ -125,7 +125,7 @@ func (i *ImageService) LayerStoreStatus() [][2]string {
}
// GetLayerMountID returns the mount ID for a layer
-// called from daemon.go Daemon.Shutdown(), and Daemon.Cleanup() (cleanup is actually continerCleanup)
+// called from daemon.go Daemon.Shutdown(), and Daemon.Cleanup() (cleanup is actually containerCleanup)
// TODO: needs to be refactored to Unmount (see callers), or removed and replaced with GetLayerByID
func (i *ImageService) GetLayerMountID(cid string) (string, error) {
return "", errdefs.NotImplemented(errors.New("not implemented"))
diff --git a/daemon/containerfs_linux.go b/daemon/containerfs_linux.go
index 26b67c017a169..3be6fdbfc5499 100644
--- a/daemon/containerfs_linux.go
+++ b/daemon/containerfs_linux.go
@@ -175,7 +175,7 @@ func (daemon *Daemon) openContainerFS(ctr *container.Container) (_ *containerFSV
return vw, nil
}
-// RunInFS synchronously runs fn in the context of the container filesytem and
+// RunInFS synchronously runs fn in the context of the container filesystem and
// passes through its return value.
//
// The container filesystem is only visible to functions called in the same
diff --git a/daemon/daemon.go b/daemon/daemon.go
index 874df1a0e9c87..ace3c1740f882 100644
--- a/daemon/daemon.go
+++ b/daemon/daemon.go
@@ -267,7 +267,7 @@ func (daemon *Daemon) restore(cfg *configStore) error {
}
// parallelLimit is the maximum number of parallel startup jobs that we
- // allow (this is the limited used for all startup semaphores). The multipler
+ // allow (this is the limited used for all startup semaphores). The multiplier
// (128) was chosen after some fairly significant benchmarking -- don't change
// it unless you've tested it significantly (this value is adjusted if
// RLIMIT_NOFILE is small to avoid EMFILE).
@@ -713,7 +713,7 @@ func (daemon *Daemon) RestartSwarmContainers() {
func (daemon *Daemon) restartSwarmContainers(ctx context.Context, cfg *configStore) {
// parallelLimit is the maximum number of parallel startup jobs that we
- // allow (this is the limited used for all startup semaphores). The multipler
+ // allow (this is the limited used for all startup semaphores). The multiplier
// (128) was chosen after some fairly significant benchmarking -- don't change
// it unless you've tested it significantly (this value is adjusted if
// RLIMIT_NOFILE is small to avoid EMFILE).
diff --git a/daemon/images/service.go b/daemon/images/service.go
index 5bc46fa097bc1..e31af55cd879e 100644
--- a/daemon/images/service.go
+++ b/daemon/images/service.go
@@ -148,7 +148,7 @@ func (i *ImageService) LayerStoreStatus() [][2]string {
}
// GetLayerMountID returns the mount ID for a layer
-// called from daemon.go Daemon.Shutdown(), and Daemon.Cleanup() (cleanup is actually continerCleanup)
+// called from daemon.go Daemon.Shutdown(), and Daemon.Cleanup() (cleanup is actually containerCleanup)
// TODO: needs to be refactored to Unmount (see callers), or removed and replaced with GetLayerByID
func (i *ImageService) GetLayerMountID(cid string) (string, error) {
return i.layerStore.GetMountID(cid)
diff --git a/daemon/images/store.go b/daemon/images/store.go
index ea1dce019e738..98a16240a4ccd 100644
--- a/daemon/images/store.go
+++ b/daemon/images/store.go
@@ -23,7 +23,7 @@ func imageKey(dgst string) string {
}
// imageStoreWithLease wraps the configured image store with one that deletes the lease
-// reigstered for a given image ID, if one exists
+// registered for a given image ID, if one exists
//
// This is used by the main image service to wrap delete calls to the real image store.
type imageStoreWithLease struct {
@@ -43,7 +43,7 @@ func (s *imageStoreWithLease) Delete(id image.ID) ([]layer.Metadata, error) {
return s.Store.Delete(id)
}
-// iamgeStoreForPull is created for each pull It wraps an underlying image store
+// imageStoreForPull is created for each pull It wraps an underlying image store
// to handle registering leases for content fetched in a single image pull.
type imageStoreForPull struct {
distribution.ImageConfigStore
@@ -98,7 +98,7 @@ func (s *imageStoreForPull) updateLease(ctx context.Context, dgst digest.Digest)
// contentStoreForPull is used to wrap the configured content store to
// add lease management for a single `pull`
// It stores all committed digests so that `imageStoreForPull` can add
-// the digsted resources to the lease for an image.
+// the digested resources to the lease for an image.
type contentStoreForPull struct {
distribution.ContentStore
leases leases.Manager
diff --git a/daemon/logger/journald/internal/fake/sender.go b/daemon/logger/journald/internal/fake/sender.go
index 050f1b71ad407..4fa6866f8137a 100644
--- a/daemon/logger/journald/internal/fake/sender.go
+++ b/daemon/logger/journald/internal/fake/sender.go
@@ -66,7 +66,7 @@ type Sender struct {
// specified by the SYSLOG_TIMESTAMP variable value. This is roughly
// analogous to journald receiving the event and assigning it a
// timestamp in zero time after the SYSLOG_TIMESTAMP value was set,
- // which is higly unrealistic in practice.
+ // which is highly unrealistic in practice.
AssignEventTimestampFromSyslogTimestamp bool
// Boot ID for journal entries. Required by systemd-journal-remote as of
// https://github.com/systemd/systemd/commit/1eede158519e4e5ed22738c90cb57a91dbecb7f2
diff --git a/daemon/logger/journald/read.go b/daemon/logger/journald/read.go
index 96e0dea68f195..ed7abcec20a55 100644
--- a/daemon/logger/journald/read.go
+++ b/daemon/logger/journald/read.go
@@ -159,7 +159,7 @@ func (r *reader) initialSeekTail() (bool, error) {
// The (filtered) journal has no entries. The tail is the head: all new
// entries which get written into the journal from this point forward
// should be read from the journal. However the read pointer is
- // positioned at a conceptual position which is not condusive to reading
+ // positioned at a conceptual position which is not conducive to reading
// those entries. The tail of the journal is resolved to the last entry
// in the journal _at the time of the first successful Previous() call_,
// which means that an arbitrary number of journal entries added in the
diff --git a/daemon/logger/local/local_test.go b/daemon/logger/local/local_test.go
index fe24648065974..c059db31efe21 100644
--- a/daemon/logger/local/local_test.go
+++ b/daemon/logger/local/local_test.go
@@ -36,7 +36,7 @@ func TestWriteLog(t *testing.T) {
m2 := logger.Message{Source: "stdout", Timestamp: time.Now().Add(-1 * 20 * time.Minute), Line: []byte("message 2"), PLogMetaData: &backend.PartialLogMetaData{Last: true, ID: "0001", Ordinal: 1}}
m3 := logger.Message{Source: "stderr", Timestamp: time.Now().Add(-1 * 10 * time.Minute), Line: []byte("message 3")}
- // copy the log message because the underying log writer resets the log message and returns it to a buffer pool
+ // copy the log message because the underlying log writer resets the log message and returns it to a buffer pool
err = l.Log(copyLogMessage(&m1))
assert.NilError(t, err)
err = l.Log(copyLogMessage(&m2))
diff --git a/daemon/logger/loggerutils/logfile.go b/daemon/logger/loggerutils/logfile.go
index 61490c8d1a209..17704366dc349 100644
--- a/daemon/logger/loggerutils/logfile.go
+++ b/daemon/logger/loggerutils/logfile.go
@@ -93,7 +93,7 @@ type Decoder interface {
// Reset resets the decoder
// Reset is called for certain events, such as log rotations
Reset(io.Reader)
- // Decode decodes the next log messeage from the stream
+ // Decode decodes the next log message from the stream
Decode() (*logger.Message, error)
// Close signals to the decoder that it can release whatever resources it was using.
Close()
diff --git a/daemon/logger/plugin_unix.go b/daemon/logger/plugin_unix.go
index 7a8c6aebd627b..1951ca88bdeca 100644
--- a/daemon/logger/plugin_unix.go
+++ b/daemon/logger/plugin_unix.go
@@ -12,7 +12,7 @@ import (
)
func openPluginStream(a *pluginAdapter) (io.WriteCloser, error) {
- // Make sure to also open with read (in addition to write) to avoid borken pipe errors on plugin failure.
+ // Make sure to also open with read (in addition to write) to avoid broken pipe errors on plugin failure.
// It is up to the plugin to keep track of pipes that it should re-attach to, however.
// If the plugin doesn't open for reads, then the container will block once the pipe is full.
f, err := fifo.OpenFifo(context.Background(), a.fifoPath, unix.O_RDWR|unix.O_CREAT|unix.O_NONBLOCK, 0o700)
diff --git a/daemon/monitor.go b/daemon/monitor.go
index de15f36c7e9bb..a52c19834b89c 100644
--- a/daemon/monitor.go
+++ b/daemon/monitor.go
@@ -205,7 +205,7 @@ func (daemon *Daemon) ProcessEvent(id string, e libcontainerdtypes.EventType, ei
// with daemon.ContainerExecStart() removing the exec from
// c.ExecCommands. If we win the race, we will find that there is no
// process to clean up. (And ContainerExecStart will clobber the
- // exit code we set.) Prevent a nil-dereferenc panic in that
+ // exit code we set.) Prevent a nil-dereference panic in that
// situation to restore the status quo where this is merely a
// logical race condition.
if execConfig.Process != nil {
diff --git a/daemon/nvidia_linux.go b/daemon/nvidia_linux.go
index 7243b522bcad5..95e48f3324de8 100644
--- a/daemon/nvidia_linux.go
+++ b/daemon/nvidia_linux.go
@@ -51,12 +51,15 @@ func setNvidiaGPUs(s *specs.Spec, dev *deviceInstance) error {
return errConflictCountDeviceIDs
}
- if len(req.DeviceIDs) > 0 {
+ switch {
+ case len(req.DeviceIDs) > 0:
s.Process.Env = append(s.Process.Env, "NVIDIA_VISIBLE_DEVICES="+strings.Join(req.DeviceIDs, ","))
- } else if req.Count > 0 {
+ case req.Count > 0:
s.Process.Env = append(s.Process.Env, "NVIDIA_VISIBLE_DEVICES="+countToDevices(req.Count))
- } else if req.Count < 0 {
+ case req.Count < 0:
s.Process.Env = append(s.Process.Env, "NVIDIA_VISIBLE_DEVICES=all")
+ case req.Count == 0:
+ s.Process.Env = append(s.Process.Env, "NVIDIA_VISIBLE_DEVICES=void")
}
var nvidiaCaps []string
diff --git a/daemon/oci_linux.go b/daemon/oci_linux.go
index 9b3e1eb8d4d6b..713a7bbec4de8 100644
--- a/daemon/oci_linux.go
+++ b/daemon/oci_linux.go
@@ -185,7 +185,7 @@ func WithApparmor(c *container.Container) coci.SpecOpts {
}
}
-// WithCapabilities sets the container's capabilties
+// WithCapabilities sets the container's capabilities
func WithCapabilities(c *container.Container) coci.SpecOpts {
return func(ctx context.Context, _ coci.Client, _ *containers.Container, s *coci.Spec) error {
capabilities, err := caps.TweakCapabilities(
diff --git a/distribution/manifest_test.go b/distribution/manifest_test.go
index 7fb6f8b624bea..2daafbe7d298c 100644
--- a/distribution/manifest_test.go
+++ b/distribution/manifest_test.go
@@ -240,7 +240,7 @@ func TestManifestStore(t *testing.T) {
ref, desc, mg, store, cs, teardown := setupTest(t)
defer teardown(t)
- // first add the manifest to the coontent store
+ // first add the manifest to the content store
writeManifest(t, cs, desc)
// now do the get
diff --git a/docs/api/v1.25.yaml b/docs/api/v1.25.yaml
index 1a8008ab4e94a..fcdf392a909ff 100644
--- a/docs/api/v1.25.yaml
+++ b/docs/api/v1.25.yaml
@@ -78,7 +78,7 @@ info:
# The tags on paths define the menu sections in the ReDoc documentation, so
# the usage of tags must make sense for that:
# - They should be singular, not plural.
-# - There should not be too many tags, or the menu becomes unwieldly. For
+# - There should not be too many tags, or the menu becomes unwieldy. For
# example, it is preferable to add a path to the "System" tag instead of
# creating a tag with a single path in it.
# - The order of tags in this list defines the order in the menu.
@@ -4682,12 +4682,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.26.yaml b/docs/api/v1.26.yaml
index b0a0ba740706c..db036d6b3f377 100644
--- a/docs/api/v1.26.yaml
+++ b/docs/api/v1.26.yaml
@@ -78,7 +78,7 @@ info:
# The tags on paths define the menu sections in the ReDoc documentation, so
# the usage of tags must make sense for that:
# - They should be singular, not plural.
-# - There should not be too many tags, or the menu becomes unwieldly. For
+# - There should not be too many tags, or the menu becomes unwieldy. For
# example, it is preferable to add a path to the "System" tag instead of
# creating a tag with a single path in it.
# - The order of tags in this list defines the order in the menu.
@@ -4690,12 +4690,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.27.yaml b/docs/api/v1.27.yaml
index 738ace56789db..b451131806058 100644
--- a/docs/api/v1.27.yaml
+++ b/docs/api/v1.27.yaml
@@ -78,7 +78,7 @@ info:
# The tags on paths define the menu sections in the ReDoc documentation, so
# the usage of tags must make sense for that:
# - They should be singular, not plural.
-# - There should not be too many tags, or the menu becomes unwieldly. For
+# - There should not be too many tags, or the menu becomes unwieldy. For
# example, it is preferable to add a path to the "System" tag instead of
# creating a tag with a single path in it.
# - The order of tags in this list defines the order in the menu.
@@ -1588,7 +1588,7 @@ definitions:
may not be applied if the version number has changed from the last read. In other words,
if two update requests specify the same base version, only one of the requests can succeed.
As a result, two separate update requests that happen at the same time will not
- unintentially overwrite each other.
+ unintentionally overwrite each other.
type: "object"
properties:
Index:
@@ -4760,12 +4760,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.28.yaml b/docs/api/v1.28.yaml
index 60dcaa267074f..5781053b28d18 100644
--- a/docs/api/v1.28.yaml
+++ b/docs/api/v1.28.yaml
@@ -1626,7 +1626,7 @@ definitions:
may not be applied if the version number has changed from the last read. In other words,
if two update requests specify the same base version, only one of the requests can succeed.
As a result, two separate update requests that happen at the same time will not
- unintentially overwrite each other.
+ unintentionally overwrite each other.
type: "object"
properties:
Index:
@@ -4868,12 +4868,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.29.yaml b/docs/api/v1.29.yaml
index 3b4c67dbad30c..1ab1f00f318ea 100644
--- a/docs/api/v1.29.yaml
+++ b/docs/api/v1.29.yaml
@@ -1647,7 +1647,7 @@ definitions:
may not be applied if the version number has changed from the last read. In other words,
if two update requests specify the same base version, only one of the requests can succeed.
As a result, two separate update requests that happen at the same time will not
- unintentially overwrite each other.
+ unintentionally overwrite each other.
type: "object"
properties:
Index:
@@ -4901,12 +4901,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.30.yaml b/docs/api/v1.30.yaml
index 2e6519d9f1ef2..c182c9149f4de 100644
--- a/docs/api/v1.30.yaml
+++ b/docs/api/v1.30.yaml
@@ -1674,7 +1674,7 @@ definitions:
may not be applied if the version number has changed from the last read. In other words,
if two update requests specify the same base version, only one of the requests can succeed.
As a result, two separate update requests that happen at the same time will not
- unintentially overwrite each other.
+ unintentionally overwrite each other.
type: "object"
properties:
Index:
@@ -5143,12 +5143,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.31.yaml b/docs/api/v1.31.yaml
index 4650c34b7c9ef..05812bfa06f68 100644
--- a/docs/api/v1.31.yaml
+++ b/docs/api/v1.31.yaml
@@ -5233,12 +5233,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.32.yaml b/docs/api/v1.32.yaml
index 7cbe63c1656ba..85b2341f44bd4 100644
--- a/docs/api/v1.32.yaml
+++ b/docs/api/v1.32.yaml
@@ -2395,7 +2395,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6471,12 +6471,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.33.yaml b/docs/api/v1.33.yaml
index 1c611c3ee7eaa..20b0878ea60d9 100644
--- a/docs/api/v1.33.yaml
+++ b/docs/api/v1.33.yaml
@@ -2399,7 +2399,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6475,12 +6475,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.34.yaml b/docs/api/v1.34.yaml
index 97e7454a260c7..4e17b3fbd92c8 100644
--- a/docs/api/v1.34.yaml
+++ b/docs/api/v1.34.yaml
@@ -2409,7 +2409,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6515,12 +6515,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.35.yaml b/docs/api/v1.35.yaml
index cc58e9ff859d5..82aa3cff8baba 100644
--- a/docs/api/v1.35.yaml
+++ b/docs/api/v1.35.yaml
@@ -2406,7 +2406,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6523,12 +6523,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.36.yaml b/docs/api/v1.36.yaml
index 3bb81f0b4e430..0e5e4fe58cfec 100644
--- a/docs/api/v1.36.yaml
+++ b/docs/api/v1.36.yaml
@@ -2419,7 +2419,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6551,12 +6551,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.37.yaml b/docs/api/v1.37.yaml
index 64e12f0bbece1..80cbc2199bdac 100644
--- a/docs/api/v1.37.yaml
+++ b/docs/api/v1.37.yaml
@@ -2422,7 +2422,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6594,12 +6594,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.38.yaml b/docs/api/v1.38.yaml
index 30437fc9e841a..f74d967976773 100644
--- a/docs/api/v1.38.yaml
+++ b/docs/api/v1.38.yaml
@@ -2440,7 +2440,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6665,12 +6665,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.39.yaml b/docs/api/v1.39.yaml
index 2b48fc21a9715..2c7021c02bcd1 100644
--- a/docs/api/v1.39.yaml
+++ b/docs/api/v1.39.yaml
@@ -2043,7 +2043,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -3393,7 +3393,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6497,7 +6497,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -7935,12 +7935,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.40.yaml b/docs/api/v1.40.yaml
index bfe256ffef62f..15bd011876e23 100644
--- a/docs/api/v1.40.yaml
+++ b/docs/api/v1.40.yaml
@@ -2103,7 +2103,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -3472,7 +3472,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -6803,7 +6803,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -8258,12 +8258,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.41.yaml b/docs/api/v1.41.yaml
index 1f76ec9e81acb..2dcae1faf8d27 100644
--- a/docs/api/v1.41.yaml
+++ b/docs/api/v1.41.yaml
@@ -2134,7 +2134,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2420,7 +2420,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3599,7 +3599,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7085,7 +7085,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -8547,12 +8547,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.42.yaml b/docs/api/v1.42.yaml
index 5c12a3489584e..80e24f6c4ecc5 100644
--- a/docs/api/v1.42.yaml
+++ b/docs/api/v1.42.yaml
@@ -2137,7 +2137,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2428,7 +2428,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3618,7 +3618,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7304,7 +7304,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -8812,12 +8812,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.43.yaml b/docs/api/v1.43.yaml
index a575c62fee119..e7a3d5d0278ce 100644
--- a/docs/api/v1.43.yaml
+++ b/docs/api/v1.43.yaml
@@ -2170,7 +2170,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2459,7 +2459,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3649,7 +3649,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7322,7 +7322,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -8830,12 +8830,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.44.yaml b/docs/api/v1.44.yaml
index 419c2cf7a81ee..019ceb8eb7fd3 100644
--- a/docs/api/v1.44.yaml
+++ b/docs/api/v1.44.yaml
@@ -2202,7 +2202,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2486,7 +2486,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3691,7 +3691,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7478,7 +7478,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -8987,12 +8987,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.45.yaml b/docs/api/v1.45.yaml
index e02003fa8542a..c651bfdd5c81d 100644
--- a/docs/api/v1.45.yaml
+++ b/docs/api/v1.45.yaml
@@ -393,7 +393,7 @@ definitions:
Make the mount non-recursively read-only, but still leave the mount recursive
(unless NonRecursive is set to `true` in conjunction).
- Addded in v1.44, before that version all read-only mounts were
+ Added in v1.44, before that version all read-only mounts were
non-recursive by default. To match the previous behaviour this
will default to `true` for clients on versions prior to v1.44.
type: "boolean"
@@ -2188,7 +2188,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2472,7 +2472,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3677,7 +3677,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7464,7 +7464,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -8973,12 +8973,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.46.yaml b/docs/api/v1.46.yaml
index a41906a08bf47..2f714c4ca8d82 100644
--- a/docs/api/v1.46.yaml
+++ b/docs/api/v1.46.yaml
@@ -393,7 +393,7 @@ definitions:
Make the mount non-recursively read-only, but still leave the mount recursive
(unless NonRecursive is set to `true` in conjunction).
- Addded in v1.44, before that version all read-only mounts were
+ Added in v1.44, before that version all read-only mounts were
non-recursive by default. To match the previous behaviour this
will default to `true` for clients on versions prior to v1.44.
type: "boolean"
@@ -1384,7 +1384,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
example: ""
Domainname:
@@ -1394,7 +1394,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
example: ""
User:
@@ -1408,7 +1408,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1419,7 +1419,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1430,7 +1430,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1457,7 +1457,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1468,7 +1468,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1479,7 +1479,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1516,7 +1516,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
default: ""
example: ""
@@ -1555,7 +1555,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1567,7 +1567,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "string"
default: ""
example: ""
@@ -1601,7 +1601,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "integer"
default: 10
x-nullable: true
@@ -2216,7 +2216,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2500,7 +2500,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3723,7 +3723,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7585,7 +7585,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -9094,12 +9094,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/v1.47.yaml b/docs/api/v1.47.yaml
index 1813d56ca5e28..7e87be8298320 100644
--- a/docs/api/v1.47.yaml
+++ b/docs/api/v1.47.yaml
@@ -393,7 +393,7 @@ definitions:
Make the mount non-recursively read-only, but still leave the mount recursive
(unless NonRecursive is set to `true` in conjunction).
- Addded in v1.44, before that version all read-only mounts were
+ Added in v1.44, before that version all read-only mounts were
non-recursive by default. To match the previous behaviour this
will default to `true` for clients on versions prior to v1.44.
type: "boolean"
@@ -1384,7 +1384,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
example: ""
Domainname:
@@ -1394,7 +1394,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
example: ""
User:
@@ -1408,7 +1408,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1419,7 +1419,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1430,7 +1430,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1457,7 +1457,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1468,7 +1468,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1479,7 +1479,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always false. It must not be used, and will be removed in API v1.47.
+ > always false. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1516,7 +1516,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always empty. It must not be used, and will be removed in API v1.47.
+ > always empty. It must not be used, and will be removed in API v1.48.
type: "string"
default: ""
example: ""
@@ -1555,7 +1555,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "boolean"
default: false
example: false
@@ -1567,7 +1567,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "string"
default: ""
example: ""
@@ -1601,7 +1601,7 @@ definitions:
> **Deprecated**: this field is not part of the image specification and is
- > always omitted. It must not be used, and will be removed in API v1.47.
+ > always omitted. It must not be used, and will be removed in API v1.48.
type: "integer"
default: 10
x-nullable: true
@@ -2216,7 +2216,7 @@ definitions:
Created:
description: |
Date and time at which the image was created as a Unix timestamp
- (number of seconds sinds EPOCH).
+ (number of seconds since EPOCH).
type: "integer"
x-nullable: false
example: "1644009612"
@@ -2518,7 +2518,7 @@ definitions:
example: false
Attachable:
description: |
- Wheter a global / swarm scope network is manually attachable by regular
+ Whether a global / swarm scope network is manually attachable by regular
containers from workers in swarm mode.
type: "boolean"
default: false
@@ -3741,7 +3741,7 @@ definitions:
example: "json-file"
Options:
description: |
- Driver-specific options for the selectd log driver, specified
+ Driver-specific options for the selected log driver, specified
as key/value pairs.
type: "object"
additionalProperties:
@@ -7717,7 +7717,7 @@ paths:
* Memory usage % = `(used_memory / available_memory) * 100.0`
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
- * number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
+ * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
operationId: "ContainerStats"
produces: ["application/json"]
@@ -9231,12 +9231,23 @@ paths:
parameters:
- name: "name"
in: "path"
- description: "Image name or ID."
+ description: |
+ Name of the image to push. For example, `registry.example.com/myimage`.
+ The image must be present in the local image store with the same name.
+
+ The name should be provided without tag; if a tag is provided, it
+ is ignored. For example, `registry.example.com/myimage:latest` is
+ considered equivalent to `registry.example.com/myimage`.
+
+ Use the `tag` parameter to specify the tag to push.
type: "string"
required: true
- name: "tag"
in: "query"
- description: "The tag to associate with the image on the registry."
+ description: |
+ Tag of the image to push. For example, `latest`. If no tag is provided,
+ all tags of the given image that are present in the local image store
+ are pushed.
type: "string"
- name: "X-Registry-Auth"
in: "header"
diff --git a/docs/api/version-history.md b/docs/api/version-history.md
index cf7188420b7e8..88f27bebec280 100644
--- a/docs/api/version-history.md
+++ b/docs/api/version-history.md
@@ -139,7 +139,7 @@ are not part of the underlying image's Config, and deprecated:
interval for health checks during the start period.
* `GET /info` now includes a `CDISpecDirs` field indicating the configured CDI
specifications directories. The use of the applied setting requires the daemon
- to have expermental enabled, and for non-experimental daemons an empty list is
+ to have experimental enabled, and for non-experimental daemons an empty list is
always returned.
* `POST /networks/create` now returns a 400 if the `IPAMConfig` has invalid
values. Note that this change is _unversioned_ and applied to all API
@@ -425,7 +425,7 @@ are not part of the underlying image's Config, and deprecated:
to return those without the specified labels.
* `POST /containers/create` now accepts a `fluentd-async` option in `HostConfig.LogConfig.Config`
when using the Fluentd logging driver. This option deprecates the `fluentd-async-connect`
- option, which remains funtional, but will be removed in a future release. Users
+ option, which remains functional, but will be removed in a future release. Users
are encouraged to use the `fluentd-async` option going forward. This change is
not versioned, and affects all API versions if the daemon has this patch.
* `POST /containers/create` now accepts a `fluentd-request-ack` option in
diff --git a/hack/dockerfile/install/containerd.installer b/hack/dockerfile/install/containerd.installer
index a549bd317c0a6..cc6b6b0d68ea5 100755
--- a/hack/dockerfile/install/containerd.installer
+++ b/hack/dockerfile/install/containerd.installer
@@ -15,7 +15,7 @@ set -e
# the binary version you may also need to update the vendor version to pick up
# bug fixes or new APIs, however, usually the Go packages are built from a
# commit from the master branch.
-: "${CONTAINERD_VERSION:=v1.7.21}"
+: "${CONTAINERD_VERSION:=v1.7.22}"
install_containerd() (
echo "Install containerd version $CONTAINERD_VERSION"
diff --git a/hack/dockerfile/install/rootlesskit.installer b/hack/dockerfile/install/rootlesskit.installer
index de6846ae17fa2..3c3e96189b499 100755
--- a/hack/dockerfile/install/rootlesskit.installer
+++ b/hack/dockerfile/install/rootlesskit.installer
@@ -1,7 +1,7 @@
#!/bin/sh
# When updating, also update vendor.mod and Dockerfile accordingly.
-: "${ROOTLESSKIT_VERSION:=v2.0.2}"
+: "${ROOTLESSKIT_VERSION:=v2.3.1}"
install_rootlesskit() {
case "$1" in
diff --git a/integration-cli/docker_api_attach_test.go b/integration-cli/docker_api_attach_test.go
index 7dedb738a9181..1ada5ba8dca9c 100644
--- a/integration-cli/docker_api_attach_test.go
+++ b/integration-cli/docker_api_attach_test.go
@@ -224,7 +224,7 @@ func (s *DockerAPISuite) TestPostContainersAttach(c *testing.T) {
assert.Equal(c, outBuf.String(), "hello\nsuccess")
}
-// requestHijack create a http requst to specified host with `Upgrade` header (with method
+// requestHijack create a http request to specified host with `Upgrade` header (with method
// , contenttype, …), if receive a successful "101 Switching Protocols" response return
// a `io.WriteCloser` and `bufio.Reader`
func requestHijack(method, endpoint string, data io.Reader, ct, daemon string, modifiers ...func(*http.Request)) (io.WriteCloser, *bufio.Reader, error) {
diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go
index 66e30e296bccb..0dbfaab7d03e6 100644
--- a/integration-cli/docker_cli_build_test.go
+++ b/integration-cli/docker_cli_build_test.go
@@ -3521,7 +3521,7 @@ func (s *DockerCLIBuildSuite) TestBuildNotVerboseFailureRemote(c *testing.T) {
// An error message should contain name server IP and port, like this:
// "dial tcp: lookup something.invalid on 172.29.128.11:53: no such host"
- // The IP:port need to be removed in order to not trigger a test failur
+ // The IP:port need to be removed in order to not trigger a test failure
// when more than one nameserver is configured.
// While at it, also strip excessive newlines.
normalize := func(msg string) string {
diff --git a/integration-cli/docker_cli_plugins_test.go b/integration-cli/docker_cli_plugins_test.go
index f3be79fbdd25b..162000dfbe5d2 100644
--- a/integration-cli/docker_cli_plugins_test.go
+++ b/integration-cli/docker_cli_plugins_test.go
@@ -468,7 +468,7 @@ func (s *DockerCLIPluginsSuite) TestPluginMetricsCollector(c *testing.T) {
r := cli.Docker(cli.Args("plugin", "install", "--grant-all-permissions", name), cli.Daemon(d))
assert.Assert(c, r.Error == nil, r.Combined())
- // plugin lisens on localhost:19393 and proxies the metrics
+ // plugin listens on localhost:19393 and proxies the metrics
resp, err := http.Get("http://localhost:19393/metrics")
assert.NilError(c, err)
defer resp.Body.Close()
diff --git a/integration-cli/docker_cli_port_test.go b/integration-cli/docker_cli_port_test.go
index 96b38e0216bb7..5c145bc3bcdb2 100644
--- a/integration-cli/docker_cli_port_test.go
+++ b/integration-cli/docker_cli_port_test.go
@@ -166,7 +166,7 @@ func (s *DockerCLIPortSuite) TestPortList(c *testing.T) {
func assertPortList(c *testing.T, out string, expected []string) {
c.Helper()
lines := strings.Split(strings.Trim(out, "\n "), "\n")
- assert.Assert(c, is.Len(lines, len(expected)), "exepcted: %s", strings.Join(expected, ", "))
+ assert.Assert(c, is.Len(lines, len(expected)), "expected: %s", strings.Join(expected, ", "))
sort.Strings(lines)
sort.Strings(expected)
diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go
index 8ddce7b4aa23a..2c7a07e846e65 100644
--- a/integration-cli/docker_cli_run_test.go
+++ b/integration-cli/docker_cli_run_test.go
@@ -1440,7 +1440,7 @@ func (s *DockerCLIRunSuite) TestRunResolvconfUpdate(c *testing.T) {
}
// This test case is meant to test monitoring resolv.conf when it is
- // a regular file not a bind mounc. So we unmount resolv.conf and replace
+ // a regular file not a bind mount. So we unmount resolv.conf and replace
// it with a file containing the original settings.
mounted, err := mountinfo.Mounted("/etc/resolv.conf")
if err != nil {
@@ -2089,7 +2089,7 @@ func (s *DockerCLIRunSuite) TestRunMountOrdering(c *testing.T) {
}
defer os.RemoveAll(tmpDir2)
- // Create a temporary tmpfs mounc.
+ // Create a temporary tmpfs mount.
fooDir := filepath.Join(tmpDir, "foo")
if err := os.MkdirAll(filepath.Join(tmpDir, "foo"), 0o755); err != nil {
c.Fatalf("failed to mkdir at %s - %s", fooDir, err)
diff --git a/integration-cli/docker_utils_test.go b/integration-cli/docker_utils_test.go
index 80045bf366b88..1b7ec97c64026 100644
--- a/integration-cli/docker_utils_test.go
+++ b/integration-cli/docker_utils_test.go
@@ -399,7 +399,7 @@ func checkGoroutineCount(ctx context.Context, apiClient client.APIClient, expect
t.Log("Waiting for goroutines to stabilize")
first = false
}
- return poll.Continue("exepcted %d goroutines, got %d", expected, n)
+ return poll.Continue("expected %d goroutines, got %d", expected, n)
}
return poll.Success()
}
diff --git a/integration/build/build_session_test.go b/integration/build/build_session_test.go
index 6c655c46a36fc..ea2473e5c0693 100644
--- a/integration/build/build_session_test.go
+++ b/integration/build/build_session_test.go
@@ -93,7 +93,7 @@ func TestBuildWithSession(t *testing.T) {
//nolint:unused // false positive: linter detects this as "unused"
func testBuildWithSession(ctx context.Context, t *testing.T, client dclient.APIClient, daemonHost string, dir, dockerfile string) (outStr string) {
- sess, err := session.NewSession(ctx, "foo1", "foo")
+ sess, err := session.NewSession(ctx, "foo")
assert.Check(t, err)
fs, err := fsutil.NewFS(dir)
diff --git a/integration/container/create_test.go b/integration/container/create_test.go
index bed416e3fdd65..9e12f42d8ff42 100644
--- a/integration/container/create_test.go
+++ b/integration/container/create_test.go
@@ -702,7 +702,7 @@ func TestContainerdContainerImageInfo(t *testing.T) {
if testEnv.UsingSnapshotter() {
assert.Equal(t, ctr.Image, "docker.io/library/busybox:latest")
} else {
- // This field is not set when not using contianerd backed storage.
+ // This field is not set when not using containerd backed storage.
assert.Equal(t, ctr.Image, "")
}
}
diff --git a/integration/container/daemon_linux_test.go b/integration/container/daemon_linux_test.go
index 292e3591dc89b..0f4c59e07d1af 100644
--- a/integration/container/daemon_linux_test.go
+++ b/integration/container/daemon_linux_test.go
@@ -182,7 +182,7 @@ func TestDaemonHostGatewayIP(t *testing.T) {
// In this test we'll change the container state to "restarting".
// This means that the container will not be 'alive' when we attempt to restore in on daemon startup.
//
-// We could do the same with `docker run -d --resetart=always busybox:latest exit 1`, and then
+// We could do the same with `docker run -d --restart=always busybox:latest exit 1`, and then
// `kill -9` dockerd while the container is in "restarting" state. This is difficult to reproduce reliably
// in an automated test, so we manipulate on disk state instead.
func TestRestartDaemonWithRestartingContainer(t *testing.T) {
diff --git a/integration/daemon/daemon_test.go b/integration/daemon/daemon_test.go
index 275a7b3010367..64589c38b619c 100644
--- a/integration/daemon/daemon_test.go
+++ b/integration/daemon/daemon_test.go
@@ -179,6 +179,74 @@ func TestConfigDaemonSeccompProfiles(t *testing.T) {
}
}
+func TestDaemonConfigFeatures(t *testing.T) {
+ skip.If(t, runtime.GOOS == "windows")
+ ctx := testutil.StartSpan(baseContext, t)
+
+ d := daemon.New(t)
+ dockerBinary, err := d.BinaryPath()
+ assert.NilError(t, err)
+ params := []string{"--validate", "--config-file"}
+
+ dest := os.Getenv("DOCKER_INTEGRATION_DAEMON_DEST")
+ if dest == "" {
+ dest = os.Getenv("DEST")
+ }
+ testdata := filepath.Join(dest, "..", "..", "integration", "daemon", "testdata")
+
+ const (
+ validOut = "configuration OK"
+ failedOut = "unable to configure the Docker daemon with file"
+ )
+
+ tests := []struct {
+ name string
+ args []string
+ expectedOut string
+ }{
+ {
+ name: "config with no content",
+ args: append(params, filepath.Join(testdata, "empty-config-1.json")),
+ expectedOut: validOut,
+ },
+ {
+ name: "config with {}",
+ args: append(params, filepath.Join(testdata, "empty-config-2.json")),
+ expectedOut: validOut,
+ },
+ {
+ name: "invalid config",
+ args: append(params, filepath.Join(testdata, "invalid-config-1.json")),
+ expectedOut: failedOut,
+ },
+ {
+ name: "malformed config",
+ args: append(params, filepath.Join(testdata, "malformed-config.json")),
+ expectedOut: failedOut,
+ },
+ {
+ name: "valid config",
+ args: append(params, filepath.Join(testdata, "valid-config-1.json")),
+ expectedOut: validOut,
+ },
+ }
+ for _, tc := range tests {
+ tc := tc
+ t.Run(tc.name, func(t *testing.T) {
+ t.Parallel()
+ _ = testutil.StartSpan(ctx, t)
+ cmd := exec.Command(dockerBinary, tc.args...)
+ out, err := cmd.CombinedOutput()
+ assert.Check(t, is.Contains(string(out), tc.expectedOut))
+ if tc.expectedOut == failedOut {
+ assert.ErrorContains(t, err, "", "expected an error, but got none")
+ } else {
+ assert.NilError(t, err)
+ }
+ })
+ }
+}
+
func TestDaemonProxy(t *testing.T) {
skip.If(t, runtime.GOOS == "windows", "cannot start multiple daemons on windows")
skip.If(t, os.Getenv("DOCKER_ROOTLESS") != "", "cannot connect to localhost proxy in rootless environment")
diff --git a/integration/image/prune_test.go b/integration/image/prune_test.go
index 2ad524086b71a..1b781123324f8 100644
--- a/integration/image/prune_test.go
+++ b/integration/image/prune_test.go
@@ -4,11 +4,17 @@ import (
"strings"
"testing"
+ "github.com/docker/docker/api/types"
+ containertypes "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/integration/internal/container"
"github.com/docker/docker/internal/testutils/specialimage"
+ "github.com/docker/docker/testutil"
"github.com/docker/docker/testutil/daemon"
"gotest.tools/v3/assert"
+ is "gotest.tools/v3/assert/cmp"
"gotest.tools/v3/skip"
)
@@ -47,3 +53,178 @@ func TestPruneDontDeleteUsedDangling(t *testing.T) {
_, _, err = client.ImageInspectWithRaw(ctx, danglingID)
assert.NilError(t, err, "Test dangling image should still exist")
}
+
+func TestPruneLexographicalOrder(t *testing.T) {
+ skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot start multiple daemons on windows")
+ skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
+
+ ctx := setupTest(t)
+
+ d := daemon.New(t)
+ d.Start(t)
+ defer d.Stop(t)
+
+ apiClient := d.NewClientT(t)
+ defer apiClient.Close()
+
+ d.LoadBusybox(ctx, t)
+
+ inspect, _, err := apiClient.ImageInspectWithRaw(ctx, "busybox:latest")
+ assert.NilError(t, err)
+
+ id := inspect.ID
+
+ var tags = []string{"h", "a", "j", "o", "s", "q", "w", "e", "r", "t"}
+ for _, tag := range tags {
+ err = apiClient.ImageTag(ctx, id, "busybox:"+tag)
+ assert.NilError(t, err)
+ }
+ err = apiClient.ImageTag(ctx, id, "busybox:z")
+ assert.NilError(t, err)
+
+ _, err = apiClient.ImageRemove(ctx, "busybox:latest", image.RemoveOptions{Force: true})
+ assert.NilError(t, err)
+
+ // run container
+ cid := container.Create(ctx, t, apiClient, container.WithImage(id))
+ defer container.Remove(ctx, t, apiClient, cid, containertypes.RemoveOptions{Force: true})
+
+ pruned, err := apiClient.ImagesPrune(ctx, filters.NewArgs(filters.Arg("dangling", "false")))
+ assert.NilError(t, err)
+
+ assert.Check(t, is.Len(pruned.ImagesDeleted, len(tags)))
+ for _, p := range pruned.ImagesDeleted {
+ assert.Check(t, is.Equal(p.Deleted, ""))
+ assert.Check(t, p.Untagged != "busybox:z")
+ }
+}
+
+// Regression test for https://github.com/moby/moby/issues/48063
+func TestPruneDontDeleteUsedImage(t *testing.T) {
+ skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot start multiple daemons on windows")
+ skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
+
+ ctx := setupTest(t)
+
+ for _, env := range []struct {
+ name string
+ prepare func(t *testing.T, client *daemon.Daemon, apiClient *client.Client) error
+ check func(t *testing.T, apiClient *client.Client, pruned image.PruneReport)
+ }{
+ {
+ // Container uses the busybox:latest image and it's the only image
+ // tag with the same target.
+ name: "single tag",
+ check: func(t *testing.T, apiClient *client.Client, pruned image.PruneReport) {
+ assert.Check(t, is.Len(pruned.ImagesDeleted, 0))
+
+ _, _, err := apiClient.ImageInspectWithRaw(ctx, "busybox:latest")
+ assert.NilError(t, err, "Busybox image should still exist")
+ },
+ },
+ {
+ // Container uses the busybox:latest image and there's also a second
+ // busybox:other tag pointing to the same image.
+ name: "two tags",
+ prepare: func(t *testing.T, d *daemon.Daemon, apiClient *client.Client) error {
+ return apiClient.ImageTag(ctx, "busybox:latest", "busybox:a")
+ },
+ check: func(t *testing.T, apiClient *client.Client, pruned image.PruneReport) {
+ if assert.Check(t, is.Len(pruned.ImagesDeleted, 1)) {
+ assert.Check(t, is.Equal(pruned.ImagesDeleted[0].Deleted, ""))
+ assert.Check(t, is.Equal(pruned.ImagesDeleted[0].Untagged, "busybox:a"))
+ }
+
+ _, _, err := apiClient.ImageInspectWithRaw(ctx, "busybox:a")
+ assert.Check(t, err != nil, "Busybox:a image should be deleted")
+
+ _, _, err = apiClient.ImageInspectWithRaw(ctx, "busybox:latest")
+ assert.Check(t, err == nil, "Busybox:latest image should still exist")
+ },
+ },
+ } {
+ for _, tc := range []struct {
+ name string
+ imageID func(t *testing.T, inspect types.ImageInspect) string
+ }{
+ {
+ name: "full id",
+ imageID: func(t *testing.T, inspect types.ImageInspect) string {
+ return inspect.ID
+ },
+ },
+ {
+ name: "full id without sha256 prefix",
+ imageID: func(t *testing.T, inspect types.ImageInspect) string {
+ return strings.TrimPrefix(inspect.ID, "sha256:")
+ },
+ },
+ {
+ name: "truncated id (without sha256 prefix)",
+ imageID: func(t *testing.T, inspect types.ImageInspect) string {
+ return strings.TrimPrefix(inspect.ID, "sha256:")[:8]
+ },
+ },
+ {
+ name: "repo and digest without tag",
+ imageID: func(t *testing.T, inspect types.ImageInspect) string {
+ skip.If(t, !testEnv.UsingSnapshotter())
+
+ return "busybox@" + inspect.ID
+ },
+ },
+ {
+ name: "tagged and digested",
+ imageID: func(t *testing.T, inspect types.ImageInspect) string {
+ skip.If(t, !testEnv.UsingSnapshotter())
+
+ return "busybox:latest@" + inspect.ID
+ },
+ },
+ {
+ name: "repo digest",
+ imageID: func(t *testing.T, inspect types.ImageInspect) string {
+ // graphdriver won't have a repo digest
+ skip.If(t, len(inspect.RepoDigests) == 0, "no repo digest")
+
+ return inspect.RepoDigests[0]
+ },
+ },
+ } {
+ tc := tc
+ t.Run(env.name+"/"+tc.name, func(t *testing.T) {
+ ctx := testutil.StartSpan(ctx, t)
+ d := daemon.New(t)
+ d.Start(t)
+ defer d.Stop(t)
+
+ apiClient := d.NewClientT(t)
+ defer apiClient.Close()
+
+ d.LoadBusybox(ctx, t)
+
+ if env.prepare != nil {
+ err := env.prepare(t, d, apiClient)
+ assert.NilError(t, err, "prepare failed")
+ }
+
+ inspect, _, err := apiClient.ImageInspectWithRaw(ctx, "busybox:latest")
+ assert.NilError(t, err)
+
+ image := tc.imageID(t, inspect)
+ t.Log(image)
+
+ cid := container.Run(ctx, t, apiClient,
+ container.WithImage(image),
+ container.WithCmd("sleep", "60"))
+ defer container.Remove(ctx, t, apiClient, cid, containertypes.RemoveOptions{Force: true})
+
+ // dangling=false also prunes unused images
+ pruned, err := apiClient.ImagesPrune(ctx, filters.NewArgs(filters.Arg("dangling", "false")))
+ assert.NilError(t, err)
+
+ env.check(t, apiClient, pruned)
+ })
+ }
+ }
+}
diff --git a/integration/internal/container/ops.go b/integration/internal/container/ops.go
index a874b0672da7c..3e0bbaa41049f 100644
--- a/integration/internal/container/ops.go
+++ b/integration/internal/container/ops.go
@@ -34,7 +34,7 @@ func WithImage(image string) func(*TestContainerConfig) {
}
}
-// WithCmd sets the comannds of the container
+// WithCmd sets the commands of the container
func WithCmd(cmds ...string) func(*TestContainerConfig) {
return func(c *TestContainerConfig) {
c.Config.Cmd = strslice.StrSlice(cmds)
diff --git a/integration/internal/system/goroutines.go b/integration/internal/system/goroutines.go
index 09f2ddb47842a..9d8d1f4e4e5ca 100644
--- a/integration/internal/system/goroutines.go
+++ b/integration/internal/system/goroutines.go
@@ -63,7 +63,7 @@ func CheckGoroutineCount(ctx context.Context, apiClient client.SystemAPIClient,
t.Log("Waiting for goroutines to stabilize")
first = false
}
- return poll.Continue("exepcted %d goroutines, got %d", expected, n)
+ return poll.Continue("expected %d goroutines, got %d", expected, n)
}
return poll.Success()
}
diff --git a/integration/network/bridge_test.go b/integration/network/bridge_test.go
index e0c45ad67e625..d3849349f5e74 100644
--- a/integration/network/bridge_test.go
+++ b/integration/network/bridge_test.go
@@ -193,7 +193,7 @@ func TestIPRangeAt64BitLimit(t *testing.T) {
err := c.ContainerStart(ctx, id, containertypes.StartOptions{})
if tc.expCtrFail {
assert.Assert(t, err != nil)
- t.Skipf("XFAIL: Container startup failed with error: %v", err)
+ t.Skipf("XFAIL Container startup failed with error: %v", err)
} else {
assert.NilError(t, err)
}
diff --git a/integration/network/ipvlan/ipvlan_test.go b/integration/network/ipvlan/ipvlan_test.go
index fe077c951c72a..08689b4e01fc1 100644
--- a/integration/network/ipvlan/ipvlan_test.go
+++ b/integration/network/ipvlan/ipvlan_test.go
@@ -21,7 +21,7 @@ import (
"gotest.tools/v3/skip"
)
-func TestDockerNetworkIpvlanPersistance(t *testing.T) {
+func TestDockerNetworkIpvlanPersistence(t *testing.T) {
// verify the driver automatically provisions the 802.1q link (di-dummy0.70)
skip.If(t, testEnv.IsRemoteDaemon)
skip.If(t, testEnv.IsRootless, "rootless mode has different view of network")
diff --git a/integration/network/macvlan/macvlan_test.go b/integration/network/macvlan/macvlan_test.go
index 929f785505007..3f84866b08546 100644
--- a/integration/network/macvlan/macvlan_test.go
+++ b/integration/network/macvlan/macvlan_test.go
@@ -20,7 +20,7 @@ import (
"gotest.tools/v3/skip"
)
-func TestDockerNetworkMacvlanPersistance(t *testing.T) {
+func TestDockerNetworkMacvlanPersistence(t *testing.T) {
// verify the driver automatically provisions the 802.1q link (dm-dummy0.60)
skip.If(t, testEnv.IsRemoteDaemon)
skip.If(t, testEnv.IsRootless, "rootless mode has different view of network")
diff --git a/integration/plugin/logging/cmd/close_on_start/main.go b/integration/plugin/logging/cmd/close_on_start/main.go
index 6398397712b8a..a8b230fd58d48 100644
--- a/integration/plugin/logging/cmd/close_on_start/main.go
+++ b/integration/plugin/logging/cmd/close_on_start/main.go
@@ -43,7 +43,7 @@ func main() {
server := http.Server{
Addr: l.Addr().String(),
Handler: mux,
- ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to statisfy gosec (G112: Potential Slowloris Attack)
+ ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to satisfy gosec (G112: Potential Slowloris Attack)
}
server.Serve(l)
diff --git a/integration/plugin/logging/cmd/discard/main.go b/integration/plugin/logging/cmd/discard/main.go
index 3a7f2a88c1aa8..89ef5e2584fa3 100644
--- a/integration/plugin/logging/cmd/discard/main.go
+++ b/integration/plugin/logging/cmd/discard/main.go
@@ -18,7 +18,7 @@ func main() {
server := http.Server{
Addr: l.Addr().String(),
Handler: mux,
- ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to statisfy gosec (G112: Potential Slowloris Attack)
+ ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to satisfy gosec (G112: Potential Slowloris Attack)
}
server.Serve(l)
}
diff --git a/integration/plugin/logging/cmd/dummy/main.go b/integration/plugin/logging/cmd/dummy/main.go
index f2c81229a323c..b413ba455dfb4 100644
--- a/integration/plugin/logging/cmd/dummy/main.go
+++ b/integration/plugin/logging/cmd/dummy/main.go
@@ -15,7 +15,7 @@ func main() {
server := http.Server{
Addr: l.Addr().String(),
Handler: http.NewServeMux(),
- ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to statisfy gosec (G112: Potential Slowloris Attack)
+ ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to satisfy gosec (G112: Potential Slowloris Attack)
}
server.Serve(l)
}
diff --git a/integration/plugin/volumes/cmd/dummy/main.go b/integration/plugin/volumes/cmd/dummy/main.go
index f2c81229a323c..b413ba455dfb4 100644
--- a/integration/plugin/volumes/cmd/dummy/main.go
+++ b/integration/plugin/volumes/cmd/dummy/main.go
@@ -15,7 +15,7 @@ func main() {
server := http.Server{
Addr: l.Addr().String(),
Handler: http.NewServeMux(),
- ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to statisfy gosec (G112: Potential Slowloris Attack)
+ ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to satisfy gosec (G112: Potential Slowloris Attack)
}
server.Serve(l)
}
diff --git a/integration/service/create_test.go b/integration/service/create_test.go
index aff1a29a42684..1500e50d5865d 100644
--- a/integration/service/create_test.go
+++ b/integration/service/create_test.go
@@ -120,7 +120,7 @@ func TestCreateServiceMultipleTimes(t *testing.T) {
// we can't just wait on no tasks for the service, counter-intuitively.
// Tasks may briefly exist but not show up, if they are in the process
// of being deallocated. To avoid this case, we should retry network remove
- // a few times, to give tasks time to be deallcoated
+ // a few times, to give tasks time to be deallocated
poll.WaitOn(t, swarm.NoTasksForService(ctx, client, serviceID2), swarm.ServicePoll)
for retry := 0; retry < 5; retry++ {
@@ -336,7 +336,7 @@ func TestCreateServiceSysctls(t *testing.T) {
client := d.NewClientT(t)
defer client.Close()
- // run thie block twice, so that no matter what the default value of
+ // run this block twice, so that no matter what the default value of
// net.ipv4.ip_nonlocal_bind is, we can verify that setting the sysctl
// options works
for _, expected := range []string{"0", "1"} {
diff --git a/internal/opts/opts.go b/internal/opts/opts.go
new file mode 100644
index 0000000000000..71a01731201ae
--- /dev/null
+++ b/internal/opts/opts.go
@@ -0,0 +1,80 @@
+package opts
+
+import (
+ "fmt"
+ "strconv"
+ "strings"
+
+ "github.com/docker/docker/opts"
+)
+
+// SetOpts holds a map of values and a validation function.
+type SetOpts struct {
+ values map[string]bool
+}
+
+// Set validates if needed the input value and add it to the
+// internal map, by splitting on '='.
+func (opts *SetOpts) Set(value string) error {
+ k, v, found := strings.Cut(value, "=")
+ var isSet bool
+ if !found {
+ isSet = true
+ k = value
+ } else {
+ var err error
+ isSet, err = strconv.ParseBool(v)
+ if err != nil {
+ return err
+ }
+ }
+ opts.values[k] = isSet
+ return nil
+}
+
+// GetAll returns the values of SetOpts as a map.
+func (opts *SetOpts) GetAll() map[string]bool {
+ return opts.values
+}
+
+func (opts *SetOpts) String() string {
+ return fmt.Sprintf("%v", opts.values)
+}
+
+// Type returns a string name for this Option type
+func (opts *SetOpts) Type() string {
+ return "map"
+}
+
+// NewSetOpts creates a new SetOpts with the specified set of values as a map of string to bool.
+func NewSetOpts(values map[string]bool) *SetOpts {
+ if values == nil {
+ values = make(map[string]bool)
+ }
+ return &SetOpts{
+ values: values,
+ }
+}
+
+// NamedSetOpts is a SetOpts struct with a configuration name.
+// This struct is useful to keep reference to the assigned
+// field name in the internal configuration struct.
+type NamedSetOpts struct {
+ SetOpts
+ name string
+}
+
+var _ opts.NamedOption = &NamedSetOpts{}
+
+// NewNamedSetOpts creates a reference to a new NamedSetOpts struct.
+func NewNamedSetOpts(name string, values map[string]bool) *NamedSetOpts {
+ return &NamedSetOpts{
+ SetOpts: *NewSetOpts(values),
+ name: name,
+ }
+}
+
+// Name returns the name of the NamedSetOpts in the configuration.
+func (o *NamedSetOpts) Name() string {
+ return o.name
+}
diff --git a/internal/opts/opts_test.go b/internal/opts/opts_test.go
new file mode 100644
index 0000000000000..954c5baab3b5e
--- /dev/null
+++ b/internal/opts/opts_test.go
@@ -0,0 +1,46 @@
+package opts
+
+import (
+ "testing"
+
+ "gotest.tools/v3/assert"
+ is "gotest.tools/v3/assert/cmp"
+)
+
+func TestSetOpts(t *testing.T) {
+ tmpMap := make(map[string]bool)
+ o := NewSetOpts(tmpMap)
+ assert.NilError(t, o.Set("feature-a=1"))
+ assert.NilError(t, o.Set("feature-b=true"))
+ assert.NilError(t, o.Set("feature-c=0"))
+ assert.NilError(t, o.Set("feature-d=false"))
+
+ expected := "map[feature-a:true feature-b:true feature-c:false feature-d:false]"
+ assert.Check(t, is.Equal(expected, o.String()))
+
+ expectedValue := map[string]bool{"feature-a": true, "feature-b": true, "feature-c": false, "feature-d": false}
+ assert.Check(t, is.DeepEqual(expectedValue, o.GetAll()))
+
+ err := o.Set("feature=not-a-bool")
+ assert.Check(t, is.Error(err, `strconv.ParseBool: parsing "not-a-bool": invalid syntax`))
+}
+
+func TestNamedSetOpts(t *testing.T) {
+ tmpMap := make(map[string]bool)
+ o := NewNamedSetOpts("features", tmpMap)
+ assert.Check(t, is.Equal("features", o.Name()))
+
+ assert.NilError(t, o.Set("feature-a=1"))
+ assert.NilError(t, o.Set("feature-b=true"))
+ assert.NilError(t, o.Set("feature-c=0"))
+ assert.NilError(t, o.Set("feature-d=false"))
+
+ expected := "map[feature-a:true feature-b:true feature-c:false feature-d:false]"
+ assert.Check(t, is.Equal(expected, o.String()))
+
+ expectedValue := map[string]bool{"feature-a": true, "feature-b": true, "feature-c": false, "feature-d": false}
+ assert.Check(t, is.DeepEqual(expectedValue, o.GetAll()))
+
+ err := o.Set("feature=not-a-bool")
+ assert.Check(t, is.Error(err, `strconv.ParseBool: parsing "not-a-bool": invalid syntax`))
+}
diff --git a/internal/rootless/specconv/specconv_linux.go b/internal/rootless/specconv/specconv_linux.go
index e5c85c4439e65..365b946bf0cb4 100644
--- a/internal/rootless/specconv/specconv_linux.go
+++ b/internal/rootless/specconv/specconv_linux.go
@@ -16,7 +16,7 @@ import (
// ToRootfulInRootless is used for "rootful-in-rootless" dind;
// the daemon is running in UserNS but has no access to RootlessKit API socket, host filesystem, etc.
//
-// This fuction does:
+// This function does:
// * Fix up OOMScoreAdj (needed since systemd v250: https://github.com/moby/moby/issues/46563)
func ToRootfulInRootless(spec *specs.Spec) {
if spec.Process == nil || spec.Process.OOMScoreAdj == nil {
diff --git a/internal/safepath/join_test.go b/internal/safepath/join_test.go
index 8d447ae030b7f..c1e5b93886f73 100644
--- a/internal/safepath/join_test.go
+++ b/internal/safepath/join_test.go
@@ -112,7 +112,7 @@ func TestJoinWithSymlinkReplace(t *testing.T) {
// On Linux we can delete it just fine.
assert.NilError(t, err, "failed to remove symlink")
- // Replace target with a symlink to /etc/paswd
+ // Replace target with a symlink to /etc/passwd
err = os.Symlink("/etc/passwd", target)
assert.NilError(t, err, "failed to create symlink")
}
diff --git a/libnetwork/agent.go b/libnetwork/agent.go
index 501889ab2ed74..440f82cd39969 100644
--- a/libnetwork/agent.go
+++ b/libnetwork/agent.go
@@ -689,7 +689,7 @@ func (ep *Endpoint) deleteServiceInfoFromCluster(sb *Sandbox, fullRemove bool, m
log.G(context.TODO()).Debugf("deleteServiceInfoFromCluster from %s START for %s %s", method, ep.svcName, ep.ID())
// Avoid a race w/ with a container that aborts preemptively. This would
- // get caught in disableServceInNetworkDB, but we check here to make the
+ // get caught in disableServiceInNetworkDB, but we check here to make the
// nature of the condition more clear.
// See comment in addServiceInfoToCluster()
if err := sb.GetEndpoint(ep.ID()); err == nil {
@@ -779,7 +779,7 @@ func (n *Network) addDriverWatches() {
go c.handleTableEvents(ch, n.handleDriverTableEvent)
d, err := n.driver(false)
if err != nil {
- log.G(context.TODO()).Errorf("Could not resolve driver %s while walking driver tabl: %v", n.networkType, err)
+ log.G(context.TODO()).Errorf("Could not resolve driver %s while walking driver table: %v", n.networkType, err)
return
}
diff --git a/libnetwork/agent.pb.go b/libnetwork/agent.pb.go
index f543d3e0c40a1..144c160bb2205 100644
--- a/libnetwork/agent.pb.go
+++ b/libnetwork/agent.pb.go
@@ -72,7 +72,7 @@ type EndpointRecord struct {
Aliases []string `protobuf:"bytes,7,rep,name=aliases,proto3" json:"aliases,omitempty"`
// List of aliases task specific aliases
TaskAliases []string `protobuf:"bytes,8,rep,name=task_aliases,json=taskAliases,proto3" json:"task_aliases,omitempty"`
- // Whether this enpoint's service has been disabled
+ // Whether this endpoint's service has been disabled
ServiceDisabled bool `protobuf:"varint,9,opt,name=service_disabled,json=serviceDisabled,proto3" json:"service_disabled,omitempty"`
}
diff --git a/libnetwork/agent.proto b/libnetwork/agent.proto
index 05c6419c14b41..0fb04731c3ea9 100644
--- a/libnetwork/agent.proto
+++ b/libnetwork/agent.proto
@@ -38,7 +38,7 @@ message EndpointRecord {
// List of aliases task specific aliases
repeated string task_aliases = 8;
- // Whether this enpoint's service has been disabled
+ // Whether this endpoint's service has been disabled
bool service_disabled = 9;
}
diff --git a/libnetwork/bitmap/sequence.go b/libnetwork/bitmap/sequence.go
index 2644c5d354cab..203fbaa6b4d98 100644
--- a/libnetwork/bitmap/sequence.go
+++ b/libnetwork/bitmap/sequence.go
@@ -505,7 +505,7 @@ func pushReservation(bytePos, bitPos uint64, head *sequence, release bool) *sequ
return newHead
}
- // Current sequence inevitably looses one block, upadate count
+ // Current sequence inevitably looses one block, update count
current.count--
// Create new sequence
diff --git a/libnetwork/bitmap/sequence_test.go b/libnetwork/bitmap/sequence_test.go
index f04ff56945bcf..fb3f74c90b699 100644
--- a/libnetwork/bitmap/sequence_test.go
+++ b/libnetwork/bitmap/sequence_test.go
@@ -1109,7 +1109,7 @@ func testSetRollover(t *testing.T, serial bool) {
t.Fatalf("Unexpected failure on allocation %d: %v\nSeed: %d\n%s", i, err, seed, hnd)
}
}
- // Now requesting to allocate the unallocated random bits (qurter of the number of bits) should
+ // Now requesting to allocate the unallocated random bits (quarter of the number of bits) should
// leave no more bits that can be allocated.
if hnd.Unselected() != 0 {
t.Fatalf("Unexpected number of unselected bits %d, Expected %d", hnd.Unselected(), 0)
diff --git a/libnetwork/cmd/networkdb-test/dbclient/ndbClient.go b/libnetwork/cmd/networkdb-test/dbclient/ndbClient.go
index 1c0704ded7d4a..ce1e26571d7a8 100644
--- a/libnetwork/cmd/networkdb-test/dbclient/ndbClient.go
+++ b/libnetwork/cmd/networkdb-test/dbclient/ndbClient.go
@@ -759,7 +759,7 @@ func doWriteWaitLeaveJoin(ips []string, args []string) {
fmt.Fprintf(os.Stderr, "doWriteWaitLeaveJoin succeeded in %d msec", opTime)
}
-var cmdArgChec = map[string]int{
+var cmdArgCheck = map[string]int{
"debug": 0,
"fail": 0,
"ready": 2,
@@ -777,8 +777,8 @@ func Client(args []string) {
log.G(context.TODO()).Infof("[CLIENT] Starting with arguments %v", args)
command := args[0]
- if len(args) < cmdArgChec[command] {
- log.G(context.TODO()).Fatalf("Command %s requires %d arguments, passed %d, aborting...", command, cmdArgChec[command], len(args))
+ if len(args) < cmdArgCheck[command] {
+ log.G(context.TODO()).Fatalf("Command %s requires %d arguments, passed %d, aborting...", command, cmdArgCheck[command], len(args))
}
switch command {
diff --git a/libnetwork/cmd/networkdb-test/dummyclient/dummyClient.go b/libnetwork/cmd/networkdb-test/dummyclient/dummyClient.go
index ab24de8f95eb2..c550ffe1fbec4 100644
--- a/libnetwork/cmd/networkdb-test/dummyclient/dummyClient.go
+++ b/libnetwork/cmd/networkdb-test/dummyclient/dummyClient.go
@@ -95,7 +95,7 @@ func handleTableEvents(tableName string, ch *events.Channel) {
return
case evt := <-ch.C:
- log.G(context.TODO()).Infof("Recevied new event on:%s", tableName)
+ log.G(context.TODO()).Infof("Received new event on:%s", tableName)
switch event := evt.(type) {
case networkdb.CreateEvent:
// nid = event.NetworkID
diff --git a/libnetwork/cnmallocator/networkallocator_test.go b/libnetwork/cnmallocator/networkallocator_test.go
index 71ae50818d241..d1ca16056efd2 100644
--- a/libnetwork/cnmallocator/networkallocator_test.go
+++ b/libnetwork/cnmallocator/networkallocator_test.go
@@ -658,7 +658,7 @@ func TestServiceNetworkUpdate(t *testing.T) {
err = na.Allocate(n2)
assert.Check(t, err)
- // Attach a network to a service spec nd allocate a service
+ // Attach a network to a service spec and allocate a service
s := &api.Service{
ID: "testID1",
Spec: api.ServiceSpec{
diff --git a/libnetwork/diagnostic/server.go b/libnetwork/diagnostic/server.go
index c773b96918f08..e9da6630c8b80 100644
--- a/libnetwork/diagnostic/server.go
+++ b/libnetwork/diagnostic/server.go
@@ -100,7 +100,7 @@ func (s *Server) EnableDiagnostic(ip string, port int) {
}(s)
}
-// DisableDiagnostic stop the dubug and closes the tcp socket
+// DisableDiagnostic stop the debug and closes the tcp socket
func (s *Server) DisableDiagnostic() {
s.mu.Lock()
defer s.mu.Unlock()
diff --git a/libnetwork/docs/network.md b/libnetwork/docs/network.md
index 9f79d9c04592f..2fabd95325abc 100644
--- a/libnetwork/docs/network.md
+++ b/libnetwork/docs/network.md
@@ -115,7 +115,7 @@ This section describes traffic flow of request and reply to/from a service with
4. The request arrives at eth0 of container NS with dstIP=10.255.0.5, dstPort=30000, srcIP=10.255.0.x (eth1 IP in ingress_sbox NS), srcPort=EMPHEMERAL_PORT. Before routing, it?s dstPort is changed to 80 via nat rule in service setup (3), and is allowed to be forwarded to local process by INPUT rule in service setup (2) post routig. The process listening on tcp:80 receives request with dstIP=10.255.0.5, dstPort=80, srcIP=10.255.0.2, , srcPort=EPHEMERAL_PORT.
5. The process replies, The reply has dstIP=10.255.0.2, dstPort=EPHEMERAL_PORT, srcIp=not_known, srcPort=80. It goes through filter rule in OUTPUT chain in service setup(2), which allows it to pass. It goes through routing that determines outbound interface is eth1, and srcIP=10.255.0.5; and it ?un-dnats? srcPort=80 to 30000 via nat table rule in service setup (3).
6. The reply arrives at br0 in ingress NS with dstIP=10.255.0.2, dstPort=EPHEMERAL_PORT, srcIP=10.255.0.5, srcPort=30000, which duly forwarded it to ...
-7. The eh0 interface in sb_ingress NS. The reply first go through ipvs LB that ?un-dnats? srcIP from 10.255.0.5 to 172.18.0.2; then ?un-snats? via nat rule in service setup (8) dstIP from 10.255.0.2 to CLIENT_IP, dstPort from EMPHERAL_PORT to CLIENT_PORT.
+7. The eh0 interface in sb_ingress NS. The reply first go through ipvs LB that ?un-dnats? srcIP from 10.255.0.5 to 172.18.0.2; then ?un-snats? via nat rule in service setup (8) dstIP from 10.255.0.2 to CLIENT_IP, dstPort from EPHEMERAL_PORT to CLIENT_PORT.
8. The reply arrives at docker_gwbridge0 interface of host NS with dstIP=CLIENT_IP, dstPort=CLIENT_PORT, srcIP=172.18.0.2, srcPort=30000. The reply ?un-snats? with nat rule in service setup(6) with srcIP changes to 172.31.2.1. And is then forwarded out of eth0 interface, and complete the traffic flow. From external view, request enters host with dstIP=172.31.2.1, dstPort=30000, srcIP=CLIENT_IP, srcPort=CLIENT_PORT; and reply exits with dstIP=CLIENT_IP, dstPort=CLIENT_PORT, srcIP=172.31.2.1, srcPort=30000.
diff --git a/libnetwork/drivers/bridge/bridge_linux.go b/libnetwork/drivers/bridge/bridge_linux.go
index d0ffa1a809fa3..853a1068ea0ef 100644
--- a/libnetwork/drivers/bridge/bridge_linux.go
+++ b/libnetwork/drivers/bridge/bridge_linux.go
@@ -926,7 +926,7 @@ func (d *driver) deleteNetwork(nid string) error {
config := n.config
n.Unlock()
- // delele endpoints belong to this network
+ // delete endpoints belong to this network
for _, ep := range n.endpoints {
if err := n.releasePorts(ep); err != nil {
log.G(context.TODO()).Warn(err)
diff --git a/libnetwork/drivers/bridge/setup_bridgenetfiltering.go b/libnetwork/drivers/bridge/setup_bridgenetfiltering.go
index be8d56bcbceb2..21719b0beaf8f 100644
--- a/libnetwork/drivers/bridge/setup_bridgenetfiltering.go
+++ b/libnetwork/drivers/bridge/setup_bridgenetfiltering.go
@@ -44,7 +44,7 @@ func setupIPv6BridgeNetFiltering(config *networkConfiguration, _ *bridgeInterfac
return nil
}
-// Enable bridge net filtering if not already enabled. See github issue #11404
+// Enable bridge net filtering if not already enabled. See GitHub issue #11404
func enableBridgeNetFiltering(nfParam string) error {
enabled, err := getKernelBoolParam(nfParam)
if err != nil {
diff --git a/libnetwork/drivers/overlay/peerdb.go b/libnetwork/drivers/overlay/peerdb.go
index 815790ded8590..91c3d07877cfd 100644
--- a/libnetwork/drivers/overlay/peerdb.go
+++ b/libnetwork/drivers/overlay/peerdb.go
@@ -299,7 +299,7 @@ func (d *driver) peerAddOp(nid, eid string, peerIP net.IP, peerIPMask net.IPMask
sbox := n.sandbox()
if sbox == nil {
// We are hitting this case for all the events that are arriving before that the sandbox
- // is being created. The peer got already added into the database and the sanbox init will
+ // is being created. The peer got already added into the database and the sandbox init will
// call the peerDbUpdateSandbox that will configure all these peers from the database
return nil
}
diff --git a/libnetwork/drivers/windows/windows.go b/libnetwork/drivers/windows/windows.go
index 495a8b7fbd618..0c7d78ab82a43 100644
--- a/libnetwork/drivers/windows/windows.go
+++ b/libnetwork/drivers/windows/windows.go
@@ -442,7 +442,7 @@ func (d *driver) DeleteNetwork(nid string) error {
delete(d.networks, nid)
d.Unlock()
- // delele endpoints belong to this network
+ // delete endpoints belong to this network
for _, ep := range n.endpoints {
if err := d.storeDelete(ep); err != nil {
log.G(context.TODO()).Warnf("Failed to remove bridge endpoint %.7s from store: %v", ep.id, err)
diff --git a/libnetwork/endpoint.go b/libnetwork/endpoint.go
index 332f4b3e91ee4..f72007ea4cfb8 100644
--- a/libnetwork/endpoint.go
+++ b/libnetwork/endpoint.go
@@ -776,7 +776,7 @@ func (ep *Endpoint) sbLeave(ctx context.Context, sb *Sandbox, force bool) error
}
// Update the store about the sandbox detach only after we
- // have completed sb.clearNetworkresources above to avoid
+ // have completed sb.clearNetworkResources above to avoid
// spurious logs when cleaning up the sandbox when the daemon
// ungracefully exits and restarts before completing sandbox
// detach but after store has been updated.
diff --git a/libnetwork/internal/kvstore/boltdb/boltdb.go b/libnetwork/internal/kvstore/boltdb/boltdb.go
index 8ca8822e08f26..a311b2fe3b803 100644
--- a/libnetwork/internal/kvstore/boltdb/boltdb.go
+++ b/libnetwork/internal/kvstore/boltdb/boltdb.go
@@ -14,7 +14,7 @@ import (
bolt "go.etcd.io/bbolt"
)
-// ErrBoltBucketOptionMissing is thrown when boltBcuket config option is missing
+// ErrBoltBucketOptionMissing is thrown when boltBucket config option is missing
var ErrBoltBucketOptionMissing = errors.New("boltBucket config option missing")
const filePerm = 0o644
diff --git a/libnetwork/internal/kvstore/kvstore.go b/libnetwork/internal/kvstore/kvstore.go
index 8347b33dad774..84e7300b5c5f6 100644
--- a/libnetwork/internal/kvstore/kvstore.go
+++ b/libnetwork/internal/kvstore/kvstore.go
@@ -59,7 +59,7 @@ type Store interface {
Close()
}
-// KVPair represents {Key, Value, Lastindex} tuple
+// KVPair represents {Key, Value, LastIndex} tuple
type KVPair struct {
Key string
Value []byte
diff --git a/libnetwork/ipamutils/utils.go b/libnetwork/ipamutils/utils.go
index 8454c760871cb..581a8376c6975 100644
--- a/libnetwork/ipamutils/utils.go
+++ b/libnetwork/ipamutils/utils.go
@@ -44,7 +44,7 @@ func (n NetworkToSplit) Overlaps(p netip.Prefix) bool {
return n.Base.Overlaps(p)
}
-// GetGlobalScopeDefaultNetworks returns a copy of the global-sopce network list.
+// GetGlobalScopeDefaultNetworks returns a copy of the global-scope network list.
func GetGlobalScopeDefaultNetworks() []*NetworkToSplit {
return slices.Clone(globalScopeDefaultNetworks)
}
diff --git a/libnetwork/network.go b/libnetwork/network.go
index 42040bf803645..8396792c3edd7 100644
--- a/libnetwork/network.go
+++ b/libnetwork/network.go
@@ -2011,7 +2011,7 @@ func (n *Network) ResolveIP(_ context.Context, ip string) string {
// because of interleave of different events from different sources (local container create vs
// network db notifications)
// In such cases the resolution will be based on the first element of the set, and can vary
- // during the system stabilitation
+ // during the system stabilization
elem := elemSet[0]
if elem.extResolver {
return ""
diff --git a/libnetwork/networkdb/cluster.go b/libnetwork/networkdb/cluster.go
index f04ac7ecc2c6d..b1c4bffe3b7f4 100644
--- a/libnetwork/networkdb/cluster.go
+++ b/libnetwork/networkdb/cluster.go
@@ -294,7 +294,7 @@ func (nDB *NetworkDB) rejoinClusterBootStrap() {
}
bootStrapIPs := make([]string, 0, len(nDB.bootStrapIP))
for _, bootIP := range nDB.bootStrapIP {
- // botostrap IPs are usually IP:port from the Join
+ // bootstrap IPs are usually IP:port from the Join
var bootstrapIP net.IP
ipStr, _, err := net.SplitHostPort(bootIP)
if err != nil {
diff --git a/libnetwork/networkdb/delegate.go b/libnetwork/networkdb/delegate.go
index c891d411fe957..0be1620498d63 100644
--- a/libnetwork/networkdb/delegate.go
+++ b/libnetwork/networkdb/delegate.go
@@ -213,7 +213,7 @@ func (nDB *NetworkDB) handleTableEvent(tEvent *TableEvent, isBulkSync bool) bool
// 2) the residual reapTime is higher than 1/6 of the total reapTime.
// If the residual reapTime is lower or equal to 1/6 of the total reapTime don't bother broadcasting it around
// most likely the cluster is already aware of it
- // This also reduce the possibility that deletion of entries close to their garbage collection ends up circuling around
+ // This also reduce the possibility that deletion of entries close to their garbage collection ends up circling around
// forever
// log.G(ctx).Infof("exiting on delete not knowing the obj with rebroadcast:%t", network.inSync)
return network.inSync && e.reapTime > nDB.config.reapEntryInterval/6
diff --git a/libnetwork/networkdb/networkdb.go b/libnetwork/networkdb/networkdb.go
index 66c0b81744139..1b06bee49d276 100644
--- a/libnetwork/networkdb/networkdb.go
+++ b/libnetwork/networkdb/networkdb.go
@@ -189,7 +189,7 @@ type Config struct {
// reapEntryInterval duration of a deleted entry before being garbage collected
reapEntryInterval time.Duration
- // reapNetworkInterval duration of a delted network before being garbage collected
+ // reapNetworkInterval duration of a deleted network before being garbage collected
// NOTE this MUST always be higher than reapEntryInterval
reapNetworkInterval time.Duration
@@ -724,7 +724,7 @@ func (nDB *NetworkDB) deleteNetworkNode(nid string, nodeName string) {
nDB.networkNodes[nid] = newNodes
}
-// findCommonnetworks find the networks that both this node and the
+// findCommonNetworks find the networks that both this node and the
// passed node have joined.
func (nDB *NetworkDB) findCommonNetworks(nodeName string) []string {
nDB.RLock()
diff --git a/libnetwork/networkdb/networkdb_test.go b/libnetwork/networkdb/networkdb_test.go
index 2f6287f0a9b13..621cf7a44fbf0 100644
--- a/libnetwork/networkdb/networkdb_test.go
+++ b/libnetwork/networkdb/networkdb_test.go
@@ -875,7 +875,7 @@ func TestNetworkDBIslands(t *testing.T) {
// Give some time to let the system propagate the messages and free up the ports
check := func(t poll.LogT) poll.Result {
- // Verify that the nodes are actually all gone and marked appropiately
+ // Verify that the nodes are actually all gone and marked appropriately
for name, db := range checkDBs {
db.RLock()
if (len(db.leftNodes) != 3) || (len(db.failedNodes) != 0) {
diff --git a/libnetwork/resolver.go b/libnetwork/resolver.go
index 322ddb3e3e6e0..70d37c752f446 100644
--- a/libnetwork/resolver.go
+++ b/libnetwork/resolver.go
@@ -91,7 +91,7 @@ type Resolver struct {
logger *log.Entry
fwdSem *semaphore.Weighted // Limit the number of concurrent external DNS requests in-flight
- logInverval rate.Sometimes // Rate-limit logging about hitting the fwdSem limit
+ logInterval rate.Sometimes // Rate-limit logging about hitting the fwdSem limit
}
// NewResolver creates a new instance of the Resolver
@@ -101,7 +101,7 @@ func NewResolver(address string, proxyDNS bool, backend DNSBackend) *Resolver {
err: fmt.Errorf("setup not done yet"),
startCh: make(chan struct{}, 1),
fwdSem: semaphore.NewWeighted(maxConcurrent),
- logInverval: rate.Sometimes{Interval: logInterval},
+ logInterval: rate.Sometimes{Interval: logInterval},
}
r.listenAddress, _ = netip.ParseAddr(address)
r.proxyDNS.Store(proxyDNS)
@@ -559,7 +559,7 @@ func (r *Resolver) forwardExtDNS(ctx context.Context, proto string, remoteAddr n
if err != nil {
if errors.Is(err, context.DeadlineExceeded) {
- r.logInverval.Do(func() {
+ r.logInterval.Do(func() {
r.log(ctx).Errorf("[resolver] more than %v concurrent queries", maxConcurrent)
})
}
@@ -647,7 +647,7 @@ func (r *Resolver) exchange(ctx context.Context, proto string, extDNS extDNSEntr
// truncating them on our end to forward verbatim to the client.
// Some DNS servers (e.g. Mikrotik RouterOS) don't support
// EDNS(0) and may send replies over UDP longer than 512 bytes
- // regardless of what size limit, if any, was advertized in the
+ // regardless of what size limit, if any, was advertised in the
// query message. Note that ExchangeWithConn will override this
// value if it detects an EDNS OPT record in query so only
// oversized replies to non-EDNS queries will benefit.
diff --git a/libnetwork/resolver_unix_test.go b/libnetwork/resolver_unix_test.go
index 7cb578c936491..e0242886b282a 100644
--- a/libnetwork/resolver_unix_test.go
+++ b/libnetwork/resolver_unix_test.go
@@ -56,11 +56,11 @@ func TestDNSIPQuery(t *testing.T) {
t.Fatal(err)
}
- // add service records which are used to resolve names. These are the real targets for the DNS querries
+ // add service records which are used to resolve names. These are the real targets for the DNS queries
n.addSvcRecords("ep1", "name1", "svc1", net.ParseIP("192.168.0.1"), net.IP{}, true, "test")
w := new(tstwriter)
- // the unit tests right now will focus on non-proxyed DNS requests
+ // the unit tests right now will focus on non-proxied DNS requests
r := NewResolver(resolverIPSandbox, false, sb)
// test name1's IP is resolved correctly with the default A type query
@@ -177,7 +177,7 @@ func TestDNSProxyServFail(t *testing.T) {
r.SetExtServers(localDNSEntries)
r.serveDNS(w, q)
if nRequests != 2 {
- t.Fatalf("Expected 2 DNS querries. Found: %d", nRequests)
+ t.Fatalf("Expected 2 DNS queries. Found: %d", nRequests)
}
t.Logf("Expected number of DNS requests generated")
}
diff --git a/libnetwork/sandbox.go b/libnetwork/sandbox.go
index e390e09776bd5..fe47f3c825b3a 100644
--- a/libnetwork/sandbox.go
+++ b/libnetwork/sandbox.go
@@ -161,7 +161,7 @@ func (sb *Sandbox) delete(ctx context.Context, force bool) error {
if ep.endpointInGWNetwork() && !force {
continue
}
- // Retain the sanbdox if we can't obtain the network from store.
+ // Retain the sandbox if we can't obtain the network from store.
if _, err := c.getNetworkFromStore(ep.getNetwork().ID()); err != nil {
if !c.isSwarmNode() {
retain = true
diff --git a/libnetwork/service_common.go b/libnetwork/service_common.go
index 6c97fc8f496bd..38a313db031a5 100644
--- a/libnetwork/service_common.go
+++ b/libnetwork/service_common.go
@@ -216,7 +216,7 @@ func (c *Controller) cleanupServiceBindings(cleanupNID string) {
func makeServiceCleanupFunc(c *Controller, s *service, nID, eID string, vip net.IP, ip net.IP) func() {
// ContainerName and taskAliases are not available here, this is still fine because the Service discovery
// cleanup already happened before. The only thing that rmServiceBinding is still doing here a part from the Load
- // Balancer bookeeping, is to keep consistent the mapping of endpoint to IP.
+ // Balancer bookkeeping, is to keep consistent the mapping of endpoint to IP.
return func() {
if err := c.rmServiceBinding(s.name, s.id, nID, eID, "", vip, s.ingressPorts, s.aliases, []string{}, ip, "cleanupServiceBindings", false, true); err != nil {
log.G(context.TODO()).Errorf("Failed to remove service bindings for service %s network %s endpoint %s while cleanup: %v", s.id, nID, eID, err)
diff --git a/libnetwork/service_linux.go b/libnetwork/service_linux.go
index 79e12255f8376..6d6e716d4f330 100644
--- a/libnetwork/service_linux.go
+++ b/libnetwork/service_linux.go
@@ -77,7 +77,7 @@ func findIfaceDstName(sb *Sandbox, ep *Endpoint) string {
return ""
}
-// Add loadbalancer backend to the loadbalncer sandbox for the network.
+// Add loadbalancer backend to the loadbalancer sandbox for the network.
// If needed add the service as well.
func (n *Network) addLBBackend(ip net.IP, lb *loadBalancer) {
if len(lb.vip) == 0 {
diff --git a/libnetwork/types/types.go b/libnetwork/types/types.go
index f17e3f11c88f4..578d179b13f04 100644
--- a/libnetwork/types/types.go
+++ b/libnetwork/types/types.go
@@ -40,7 +40,7 @@ type TransportPort struct {
Port uint16
}
-// Equal checks if this instance of Transportport is equal to the passed one
+// Equal checks if this instance of TransportPort is equal to the passed one
func (t *TransportPort) Equal(o *TransportPort) bool {
if t == o {
return true
diff --git a/man/dockerd.8.md b/man/dockerd.8.md
index 2a769e5671dc1..47391497c4c16 100644
--- a/man/dockerd.8.md
+++ b/man/dockerd.8.md
@@ -31,6 +31,7 @@ dockerd - Enable daemon mode
[**--exec-opt**[=*[]*]]
[**--exec-root**[=*/var/run/docker*]]
[**--experimental**[=**false**]]
+[**--feature**[=*NAME*=**true**|**false**]
[**--fixed-cidr**[=*FIXED-CIDR*]]
[**--fixed-cidr-v6**[=*FIXED-CIDR-V6*]]
[**-G**|**--group**[=*docker*]]
@@ -222,6 +223,14 @@ $ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-ru
**--experimental**=""
Enable the daemon experimental features.
+**--feature**=*NAME*=**true**|**false**
+ Enable or disable feature feature in the daemon. This option corresponds
+ with the "features" field in the daemon.json configuration file. Using
+ both the command-line option and the "features" field in the configuration
+ file produces an error. The feature option can be specified multiple times
+ to configure multiple features.
+ Usage example: `--feature containerd-snapshotter=true`
+
**--fixed-cidr**=""
IPv4 subnet for fixed IPs (e.g., 10.20.0.0/16); this subnet must be nested in
the bridge subnet (which is defined by \-b or \-\-bip).
diff --git a/oci/caps/utils.go b/oci/caps/utils.go
index c61f6b49e93e5..1cdcf5b7b3998 100644
--- a/oci/caps/utils.go
+++ b/oci/caps/utils.go
@@ -21,7 +21,7 @@ var (
knownCaps map[string]*struct{}
)
-// GetAllCapabilities returns all capabilities that are availeble in the current
+// GetAllCapabilities returns all capabilities that are available in the current
// environment.
func GetAllCapabilities() []string {
initCaps()
diff --git a/opts/opts_test.go b/opts/opts_test.go
index 3f7f33a246649..e9fe09a35d90d 100644
--- a/opts/opts_test.go
+++ b/opts/opts_test.go
@@ -142,7 +142,7 @@ func TestListOptsWithoutValidator(t *testing.T) {
}
func TestListOptsWithValidator(t *testing.T) {
- // Re-using logOptsvalidator (used by MapOpts)
+ // Re-using logOptsValidator (used by MapOpts)
o := NewListOpts(logOptsValidator)
o.Set("foo")
if o.String() != "" {
@@ -233,7 +233,7 @@ func TestValidateLabel(t *testing.T) {
expectedErr string
}{
{
- name: "lable with bad attribute format",
+ name: "label with bad attribute format",
label: "label",
expectedErr: "bad attribute format: label",
},
diff --git a/pkg/chrootarchive/archive.go b/pkg/chrootarchive/archive.go
index 3b6d8a77aa340..07739462e0542 100644
--- a/pkg/chrootarchive/archive.go
+++ b/pkg/chrootarchive/archive.go
@@ -36,7 +36,7 @@ func Untar(tarArchive io.Reader, dest string, options *archive.TarOptions) error
// This should be used to prevent a potential attacker from manipulating `dest`
// such that it would provide access to files outside of `dest` through things
// like symlinks. Normally `ResolveSymlinksInScope` would handle this, however
-// sanitizing symlinks in this manner is inherrently racey:
+// sanitizing symlinks in this manner is inherently racey:
// ref: CVE-2018-15664
func UntarWithRoot(tarArchive io.Reader, dest string, options *archive.TarOptions, root string) error {
return untarHandler(tarArchive, dest, options, true, root)
diff --git a/pkg/jsonmessage/jsonmessage.go b/pkg/jsonmessage/jsonmessage.go
index 035160c834e4d..8d2c8857fb03a 100644
--- a/pkg/jsonmessage/jsonmessage.go
+++ b/pkg/jsonmessage/jsonmessage.go
@@ -290,7 +290,7 @@ func DisplayJSONMessagesStream(in io.Reader, out io.Writer, terminalFd uintptr,
}
// Stream is an io.Writer for output with utilities to get the output's file
-// descriptor and to detect wether it's a terminal.
+// descriptor and to detect whether it's a terminal.
//
// it is subset of the streams.Out type in
// https://pkg.go.dev/github.com/docker/cli@v20.10.17+incompatible/cli/streams#Out
diff --git a/pkg/meminfo/meminfo.go b/pkg/meminfo/meminfo.go
index 4f33ad26bf5ab..3d095579e5ead 100644
--- a/pkg/meminfo/meminfo.go
+++ b/pkg/meminfo/meminfo.go
@@ -1,4 +1,4 @@
-// Package meminfo provides utilites to retrieve memory statistics of
+// Package meminfo provides utilities to retrieve memory statistics of
// the host system.
package meminfo
diff --git a/pkg/pools/pools.go b/pkg/pools/pools.go
index 3792c67a9e454..3ea3012b188ba 100644
--- a/pkg/pools/pools.go
+++ b/pkg/pools/pools.go
@@ -124,7 +124,7 @@ func (bufPool *BufioWriterPool) Put(b *bufio.Writer) {
}
// NewWriteCloserWrapper returns a wrapper which puts the bufio.Writer back
-// into the pool and closes the writer if it's an io.Writecloser.
+// into the pool and closes the writer if it's an io.WriteCloser.
func (bufPool *BufioWriterPool) NewWriteCloserWrapper(buf *bufio.Writer, w io.Writer) io.WriteCloser {
return ioutils.NewWriteCloserWrapper(w, func() error {
buf.Flush()
diff --git a/pkg/pools/pools_test.go b/pkg/pools/pools_test.go
index 6d1ca0598a1ea..0a8e92a3b09a7 100644
--- a/pkg/pools/pools_test.go
+++ b/pkg/pools/pools_test.go
@@ -116,7 +116,7 @@ func TestBufioWriterPoolPutAndGet(t *testing.T) {
// recover it
defer func() {
if r := recover(); r == nil {
- t.Fatal("Trying to flush the writter should have 'paniced', did not.")
+ t.Fatal("Trying to flush the writter should have 'panicked', did not.")
}
}()
writer.Flush()
diff --git a/pkg/system/xattrs_linux.go b/pkg/system/xattrs_linux.go
index facfbb3126f15..b877ecc5a9425 100644
--- a/pkg/system/xattrs_linux.go
+++ b/pkg/system/xattrs_linux.go
@@ -6,7 +6,7 @@ import (
// Lgetxattr retrieves the value of the extended attribute identified by attr
// and associated with the given path in the file system.
-// It will returns a nil slice and nil error if the xattr is not set.
+// It returns a nil slice and nil error if the xattr is not set.
func Lgetxattr(path string, attr string) ([]byte, error) {
sysErr := func(err error) ([]byte, error) {
return nil, &XattrError{Op: "lgetxattr", Attr: attr, Path: path, Err: err}
diff --git a/plugin/store_test.go b/plugin/store_test.go
index 47b4bd7d4ddd6..e68172257e3e3 100644
--- a/plugin/store_test.go
+++ b/plugin/store_test.go
@@ -46,7 +46,7 @@ func TestStoreGetPluginNotMatchCapRefs(t *testing.T) {
}
if _, err := s.Get("test", "volumedriver", plugingetter.Acquire); err == nil {
- t.Fatal("exepcted error when getting plugin that doesn't match the passed in capability")
+ t.Fatal("expected error when getting plugin that doesn't match the passed in capability")
}
if refs := p.GetRefCount(); refs != 0 {
@@ -55,7 +55,7 @@ func TestStoreGetPluginNotMatchCapRefs(t *testing.T) {
p.PluginObj.Enabled = true
if _, err := s.Get("test", "volumedriver", plugingetter.Acquire); err == nil {
- t.Fatal("exepcted error when getting plugin that doesn't match the passed in capability")
+ t.Fatal("expected error when getting plugin that doesn't match the passed in capability")
}
if refs := p.GetRefCount(); refs != 0 {
diff --git a/profiles/seccomp/seccomp_linux.go b/profiles/seccomp/seccomp_linux.go
index 4d8fed68c6a19..17ee350e274ae 100644
--- a/profiles/seccomp/seccomp_linux.go
+++ b/profiles/seccomp/seccomp_linux.go
@@ -39,6 +39,7 @@ var nativeToSeccomp = map[string]specs.Arch{
"ppc": specs.ArchPPC,
"ppc64": specs.ArchPPC64,
"ppc64le": specs.ArchPPC64LE,
+ "riscv64": specs.ArchRISCV64,
"s390": specs.ArchS390,
"s390x": specs.ArchS390X,
}
@@ -57,6 +58,7 @@ var goToNative = map[string]string{
"ppc": "ppc",
"ppc64": "ppc64",
"ppc64le": "ppc64le",
+ "riscv64": "riscv64",
"s390": "s390",
"s390x": "s390x",
}
diff --git a/registry/config.go b/registry/config.go
index 84b0a63ad25b5..e1b0a0ca14c62 100644
--- a/registry/config.go
+++ b/registry/config.go
@@ -359,7 +359,7 @@ func hasScheme(reposName string) bool {
}
func validateHostPort(s string) error {
- // Split host and port, and in case s can not be splitted, assume host only
+ // Split host and port, and in case s can not be split, assume host only
host, port, err := net.SplitHostPort(s)
if err != nil {
host = s
diff --git a/reports/2017-06-12.md b/reports/2017-06-12.md
index 8aef38c6b03c8..5264c9d89fca9 100644
--- a/reports/2017-06-12.md
+++ b/reports/2017-06-12.md
@@ -13,8 +13,8 @@ Man pages, docs and completion scripts will be removed next week thanks to @tibo
### Find a good and non-confusing home for the remaining monolith
-Lot's of dicussion happened on the [forums](https://forums.mobyproject.org/t/topic-find-a-good-an-non-confusing-home-for-the-remaining-monolith)
-We should expect to do those changes after the moby summit. We contacted github to work with them so we have a smooth move.
+Lots of discussion happened on the [forums](https://forums.mobyproject.org/t/topic-find-a-good-an-non-confusing-home-for-the-remaining-monolith)
+We should expect to do those changes after the moby summit. We contacted GitHub to work with them so we have a smooth move.
### Moby tool
diff --git a/testutil/fixtures/plugin/basic/basic.go b/testutil/fixtures/plugin/basic/basic.go
index 2eebe249fc514..401bccafd493d 100644
--- a/testutil/fixtures/plugin/basic/basic.go
+++ b/testutil/fixtures/plugin/basic/basic.go
@@ -26,7 +26,7 @@ func main() {
server := http.Server{
Addr: l.Addr().String(),
Handler: http.NewServeMux(),
- ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to statisfy gosec (G112: Potential Slowloris Attack)
+ ReadHeaderTimeout: 2 * time.Second, // This server is not for production code; picked an arbitrary timeout to satisfy gosec (G112: Potential Slowloris Attack)
}
mux.HandleFunc("/Plugin.Activate", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/vnd.docker.plugins.v1.1+json")
diff --git a/vendor.mod b/vendor.mod
index 2ed8475f6a179..3c7441b504166 100644
--- a/vendor.mod
+++ b/vendor.mod
@@ -25,14 +25,14 @@ require (
github.com/aws/smithy-go v1.19.0
github.com/cloudflare/cfssl v1.6.4
github.com/containerd/cgroups/v3 v3.0.3
- github.com/containerd/containerd v1.7.21
+ github.com/containerd/containerd v1.7.22
github.com/containerd/containerd/api v1.7.19
github.com/containerd/continuity v0.4.3
github.com/containerd/errdefs v0.1.0
github.com/containerd/fifo v1.1.0
github.com/containerd/log v0.1.0
github.com/containerd/platforms v0.2.1
- github.com/containerd/typeurl/v2 v2.1.1
+ github.com/containerd/typeurl/v2 v2.2.0
github.com/coreos/go-systemd/v22 v22.5.0
github.com/cpuguy83/tar2go v0.3.1
github.com/creack/pty v1.1.21
@@ -62,18 +62,18 @@ require (
github.com/miekg/dns v1.1.57
github.com/mistifyio/go-zfs/v3 v3.0.1
github.com/mitchellh/copystructure v1.2.0
- github.com/moby/buildkit v0.15.2
+ github.com/moby/buildkit v0.16.0
github.com/moby/docker-image-spec v1.3.1
github.com/moby/ipvs v1.1.0
github.com/moby/locker v1.0.1
github.com/moby/patternmatcher v0.6.0
github.com/moby/pubsub v1.0.0
github.com/moby/swarmkit/v2 v2.0.0-20240611172349-ea1a7cec35cb
- github.com/moby/sys/mount v0.3.3
- github.com/moby/sys/mountinfo v0.7.1
- github.com/moby/sys/sequential v0.5.0
- github.com/moby/sys/signal v0.7.0
- github.com/moby/sys/symlink v0.2.0
+ github.com/moby/sys/mount v0.3.4
+ github.com/moby/sys/mountinfo v0.7.2
+ github.com/moby/sys/sequential v0.6.0
+ github.com/moby/sys/signal v0.7.1
+ github.com/moby/sys/symlink v0.3.0
github.com/moby/sys/user v0.3.0
github.com/moby/sys/userns v0.1.0
github.com/moby/term v0.5.0
@@ -102,15 +102,14 @@ require (
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0
go.opentelemetry.io/otel/sdk v1.21.0
go.opentelemetry.io/otel/trace v1.21.0
- golang.org/x/exp v0.0.0-20231006140011-7918f672742d
- golang.org/x/mod v0.17.0
- golang.org/x/net v0.25.0
- golang.org/x/sync v0.7.0
- golang.org/x/sys v0.22.0
- golang.org/x/text v0.15.0
- golang.org/x/time v0.3.0
- google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f
- google.golang.org/grpc v1.59.0
+ golang.org/x/mod v0.20.0
+ golang.org/x/net v0.28.0
+ golang.org/x/sync v0.8.0
+ golang.org/x/sys v0.24.0
+ golang.org/x/text v0.17.0
+ golang.org/x/time v0.6.0
+ google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80
+ google.golang.org/grpc v1.62.0
google.golang.org/protobuf v1.33.0
gotest.tools/v3 v3.5.1
resenje.org/singleflight v0.4.1
@@ -118,7 +117,7 @@ require (
)
require (
- cloud.google.com/go v0.110.10 // indirect
+ cloud.google.com/go v0.112.0 // indirect
cloud.google.com/go/longrunning v0.5.4 // indirect
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 // indirect
github.com/agext/levenshtein v1.2.3 // indirect
@@ -145,7 +144,7 @@ require (
github.com/containerd/console v1.0.4 // indirect
github.com/containerd/go-cni v1.1.10 // indirect
github.com/containerd/go-runc v1.1.0 // indirect
- github.com/containerd/nydus-snapshotter v0.13.7 // indirect
+ github.com/containerd/nydus-snapshotter v0.14.0 // indirect
github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect
github.com/containerd/ttrpc v1.2.5 // indirect
github.com/containernetworking/cni v1.2.2 // indirect
@@ -210,9 +209,8 @@ require (
go.etcd.io/etcd/server/v3 v3.5.6 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.46.1 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.42.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.42.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.42.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 // indirect
go.opentelemetry.io/otel/metric v1.21.0 // indirect
@@ -221,12 +219,13 @@ require (
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.8.0 // indirect
go.uber.org/zap v1.21.0 // indirect
- golang.org/x/crypto v0.23.0 // indirect
- golang.org/x/oauth2 v0.21.0 // indirect
- golang.org/x/tools v0.21.0 // indirect
- google.golang.org/api v0.149.0 // indirect
- google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect
+ golang.org/x/crypto v0.26.0 // indirect
+ golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect
+ golang.org/x/oauth2 v0.22.0 // indirect
+ golang.org/x/tools v0.24.0 // indirect
+ google.golang.org/api v0.155.0 // indirect
+ google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/klog/v2 v2.90.1 // indirect
diff --git a/vendor.sum b/vendor.sum
index 481a35067058b..22ac2d37c704b 100644
--- a/vendor.sum
+++ b/vendor.sum
@@ -5,8 +5,8 @@ cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6A
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
-cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
+cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
+cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
@@ -130,8 +130,8 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5 h1:xD/lrqdvwsc+O2bjSSi3YqY73Ke3LAiSCx49aCesA0E=
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
github.com/cockroachdb/errors v1.2.4 h1:Lap807SXTH5tri2TivECb/4abUkMZC9zRoLarvcKDqs=
@@ -148,8 +148,8 @@ github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGD
github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
-github.com/containerd/containerd v1.7.21 h1:USGXRK1eOC/SX0L195YgxTHb0a00anxajOzgfN0qrCA=
-github.com/containerd/containerd v1.7.21/go.mod h1:e3Jz1rYRUZ2Lt51YrH9Rz0zPyJBOlSvB3ghr2jbVD8g=
+github.com/containerd/containerd v1.7.22 h1:nZuNnNRA6T6jB975rx2RRNqqH2k6ELYKDZfqTHqwyy0=
+github.com/containerd/containerd v1.7.22/go.mod h1:e3Jz1rYRUZ2Lt51YrH9Rz0zPyJBOlSvB3ghr2jbVD8g=
github.com/containerd/containerd/api v1.7.19 h1:VWbJL+8Ap4Ju2mx9c9qS1uFSB1OVYr5JJrW2yT5vFoA=
github.com/containerd/containerd/api v1.7.19/go.mod h1:fwGavl3LNwAV5ilJ0sbrABL44AQxmNjDRcwheXDb6Ig=
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
@@ -164,16 +164,16 @@ github.com/containerd/go-runc v1.1.0 h1:OX4f+/i2y5sUT7LhmcJH7GYrjjhHa1QI4e8yO0gG
github.com/containerd/go-runc v1.1.0/go.mod h1:xJv2hFF7GvHtTJd9JqTS2UVxMkULUYw4JN5XAUZqH5U=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-github.com/containerd/nydus-snapshotter v0.13.7 h1:x7DHvGnzJOu1ZPwPYkeOPk5MjZZYbdddygEjaSDoFTk=
-github.com/containerd/nydus-snapshotter v0.13.7/go.mod h1:VPVKQ3jmHFIcUIV2yiQ1kImZuBFS3GXDohKs9mRABVE=
+github.com/containerd/nydus-snapshotter v0.14.0 h1:6/eAi6d7MjaeLLuMO8Udfe5GVsDudmrDNO4SGETMBco=
+github.com/containerd/nydus-snapshotter v0.14.0/go.mod h1:TT4jv2SnIDxEBu4H2YOvWQHPOap031ydTaHTuvc5VQk=
github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A=
github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw=
github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU=
github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk=
github.com/containerd/ttrpc v1.2.5 h1:IFckT1EFQoFBMG4c3sMdT8EP3/aKfumK1msY+Ze4oLU=
github.com/containerd/ttrpc v1.2.5/go.mod h1:YCXHsb32f+Sq5/72xHubdiJRQY9inL4a4ZQrAbN1q9o=
-github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4=
-github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0=
+github.com/containerd/typeurl/v2 v2.2.0 h1:6NBDbQzr7I5LHgp34xAXYF5DOTQDn05X58lsPEmzLso=
+github.com/containerd/typeurl/v2 v2.2.0/go.mod h1:8XOOxnyatxSWuG8OfsZXVnAF4iZfedjS/8UHSPJnX4g=
github.com/containernetworking/cni v1.2.2 h1:9IbP6KJQQxVKo4hhnm8r50YcVKrJbJu3Dqw+Rbt1vYk=
github.com/containernetworking/cni v1.2.2/go.mod h1:DuLgF+aPd3DzcTQTtp/Nvl1Kim23oFKdm2okJzBQA5M=
github.com/containernetworking/plugins v1.4.0 h1:+w22VPYgk7nQHw7KT92lsRmuToHvb7wwSv9iTbXzzic=
@@ -230,8 +230,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
-github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
@@ -283,8 +283,8 @@ github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w
github.com/golang/gddo v0.0.0-20190904175337-72a348e765d2 h1:xisWqjiKEff2B0KfFYGpCqc3M3zdTz+OHQHRc09FeYk=
github.com/golang/gddo v0.0.0-20190904175337-72a348e765d2/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo=
-github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
+github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
+github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
@@ -476,8 +476,8 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/mndrix/tap-go v0.0.0-20171203230836-629fa407e90b/go.mod h1:pzzDgJWZ34fGzaAZGFW22KVZDfyrYW+QABMrWnJBnSs=
-github.com/moby/buildkit v0.15.2 h1:DnONr0AoceTWyv+plsQ7IhkSaj+6o0WyoaxYPyTFIxs=
-github.com/moby/buildkit v0.15.2/go.mod h1:Yis8ZMUJTHX9XhH9zVyK2igqSHV3sxi3UN0uztZocZk=
+github.com/moby/buildkit v0.16.0 h1:wOVBj1o5YNVad/txPQNXUXdelm7Hs/i0PUFjzbK0VKE=
+github.com/moby/buildkit v0.16.0/go.mod h1:Xqx/5GlrqE1yIRORk0NSCVDFpQAU1WjlT6KHYZdisIQ=
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/ipvs v1.1.0 h1:ONN4pGaZQgAx+1Scz5RvWV4Q7Gb+mvfRh3NsPS+1XQQ=
@@ -490,17 +490,16 @@ github.com/moby/pubsub v1.0.0 h1:jkp/imWsmJz2f6LyFsk7EkVeN2HxR/HTTOY8kHrsxfA=
github.com/moby/pubsub v1.0.0/go.mod h1:bXSO+3h5MNXXCaEG+6/NlAIk7MMZbySZlnB+cUQhKKc=
github.com/moby/swarmkit/v2 v2.0.0-20240611172349-ea1a7cec35cb h1:1UTTg2EgO3nuyV03wREDzldqqePzQ4+0a5G1C1y1bIo=
github.com/moby/swarmkit/v2 v2.0.0-20240611172349-ea1a7cec35cb/go.mod h1:kNy225f/gWAnF8wPftteMc5nbAHhrH+HUfvyjmhFjeQ=
-github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs=
-github.com/moby/sys/mount v0.3.3/go.mod h1:PBaEorSNTLG5t/+4EgukEQVlAvVEc6ZjTySwKdqp5K0=
-github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
-github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g=
-github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
-github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
-github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
-github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI=
-github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
-github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc=
-github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
+github.com/moby/sys/mount v0.3.4 h1:yn5jq4STPztkkzSKpZkLcmjue+bZJ0u2AuQY1iNI1Ww=
+github.com/moby/sys/mount v0.3.4/go.mod h1:KcQJMbQdJHPlq5lcYT+/CjatWM4PuxKe+XLSVS4J6Os=
+github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
+github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
+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/sys/signal v0.7.1 h1:PrQxdvxcGijdo6UXXo/lU/TvHUWyPhj7UOpSo8tuvk0=
+github.com/moby/sys/signal v0.7.1/go.mod h1:Se1VGehYokAkrSQwL4tDzHvETwUZlnY7S5XtQ50mQp8=
+github.com/moby/sys/symlink v0.3.0 h1:GZX89mEZ9u53f97npBy4Rc3vJKj7JBDj/PN2I22GrNU=
+github.com/moby/sys/symlink v0.3.0/go.mod h1:3eNdhduHmYPcgsJtZXW1W4XUJdZGBIkttZ8xKqPUJq0=
github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
@@ -600,8 +599,8 @@ github.com/rexray/gocsi v1.2.2/go.mod h1:X9oJHHpIVGmfKdK8e+JuCXafggk7HxL9mWQOgrs
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rootless-containers/rootlesskit/v2 v2.0.2 h1:wztWcDYFlk+EVAUuPJwlNMFXZIk1G14T45lv47WWGuA=
github.com/rootless-containers/rootlesskit/v2 v2.0.2/go.mod h1:hE+ztevrQxNi+tdZyPKumzDk7VKDAf0E4seOzlOyBsY=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
@@ -739,12 +738,10 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:
go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU=
go.opentelemetry.io/otel v1.21.0 h1:hzLeKBZEL7Okw2mGzZ0cc4k/A7Fta0uoPgaJCr8fsFc=
go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.42.0 h1:ZtfnDL+tUrs1F0Pzfwbg2d59Gru9NCH3bgSHBM6LDwU=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.42.0/go.mod h1:hG4Fj/y8TR/tlEDREo8tWstl9fO9gcFkn4xrx0Io8xU=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.42.0 h1:NmnYCiR0qNufkldjVvyQfZTHSdzeHoZ41zggMsdMcLM=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.42.0/go.mod h1:UVAO61+umUsHLtYb8KXXRoHtxUkdOPkYidzW3gipRLQ=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.42.0 h1:wNMDy/LVGLj2h3p6zg4d0gypKfWKSWI14E1C4smOgl8=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.42.0/go.mod h1:YfbDdXAAkemWJK3H/DshvlrxqFB2rtW4rY6ky/3x/H0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 h1:jd0+5t/YynESZqsSyPz+7PAFdEop0dlN0+PkyHYo8oI=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0/go.mod h1:U707O40ee1FpQGyhvqnzmCJm1Wh6OX6GGBVn0E6Uyyk=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 h1:bflGWrfYyuulcdxf14V6n9+CoQcu5SAAdHmDPAJnlps=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0/go.mod h1:qcTO4xHAxZLaLxPd60TdE88rxtItPHgHWqOhOGRr0as=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.1/go.mod h1:Kv8liBeVNFkkkbilbgWRpV+wWuu+H5xdOT6HAgd30iw=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0 h1:cl5P5/GIfFh4t6xyruOgJP5QiA1pw4fYYdv6nc6CBWw=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.21.0/go.mod h1:zgBdWWAu7oEEMC06MMKc5NLbA/1YDXV1sMpSqEeLQLg=
@@ -793,15 +790,15 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
-golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
+golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
+golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
-golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
+golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA=
+golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -822,8 +819,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-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/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
+golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -852,14 +849,14 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
-golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
-golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
+golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
+golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
-golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
+golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
+golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -871,8 +868,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
-golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
+golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -912,7 +909,6 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
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-20211025201205-69cdffdb9359/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-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -920,14 +916,14 @@ golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
-golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+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/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
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/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
-golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
-golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
+golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
+golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
@@ -937,13 +933,13 @@ golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
-golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
+golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-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/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
+golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -972,8 +968,8 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ=
-golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw=
-golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
+golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
+golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
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=
@@ -983,8 +979,8 @@ google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.149.0 h1:b2CqT6kG+zqJIVKRQ3ELJVLN1PwHZ6DJ3dW8yl82rgY=
-google.golang.org/api v0.149.0/go.mod h1:Mwn1B7JTXrzXtnvmzQE2BD6bYZQ8DShKZDZbeN9I7qI=
+google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA=
+google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1002,12 +998,12 @@ google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfG
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg=
-google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic=
-google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY=
-google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -1023,8 +1019,8 @@ google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQ
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk=
+google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
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=
diff --git a/vendor/cloud.google.com/go/.release-please-manifest-individual.json b/vendor/cloud.google.com/go/.release-please-manifest-individual.json
index 38a67bae445bd..bcbd757af9619 100644
--- a/vendor/cloud.google.com/go/.release-please-manifest-individual.json
+++ b/vendor/cloud.google.com/go/.release-please-manifest-individual.json
@@ -1,15 +1,16 @@
{
"auth": "0.1.0",
"auth/oauth2adapt": "0.1.0",
- "bigquery": "1.57.0",
- "bigtable": "1.20.0",
+ "bigquery": "1.57.1",
+ "bigtable": "1.21.0",
"datastore": "1.15.0",
"errorreporting": "0.3.0",
"firestore": "1.14.0",
- "logging": "1.8.1",
+ "logging": "1.9.0",
"profiler": "0.4.0",
"pubsub": "1.33.0",
"pubsublite": "1.8.1",
- "spanner": "1.51.0",
- "storage": "1.34.0"
+ "spanner": "1.55.0",
+ "storage": "1.36.0",
+ "vertexai": "0.6.0"
}
diff --git a/vendor/cloud.google.com/go/.release-please-manifest-submodules.json b/vendor/cloud.google.com/go/.release-please-manifest-submodules.json
index 12fed1bc181e0..b761f5a7fcfee 100644
--- a/vendor/cloud.google.com/go/.release-please-manifest-submodules.json
+++ b/vendor/cloud.google.com/go/.release-please-manifest-submodules.json
@@ -1,131 +1,137 @@
{
- "accessapproval": "1.7.3",
- "accesscontextmanager": "1.8.3",
- "advisorynotifications": "1.2.2",
- "ai": "0.1.3",
- "aiplatform": "1.51.2",
- "alloydb": "1.6.2",
- "analytics": "0.21.5",
- "apigateway": "1.6.3",
- "apigeeconnect": "1.6.3",
- "apigeeregistry": "0.8.1",
- "apikeys": "1.1.3",
- "appengine": "1.8.3",
- "area120": "0.8.3",
- "artifactregistry": "1.14.5",
- "asset": "1.15.2",
- "assuredworkloads": "1.11.3",
- "automl": "1.13.3",
- "baremetalsolution": "1.2.2",
- "batch": "1.6.2",
- "beyondcorp": "1.0.2",
- "billing": "1.17.3",
- "binaryauthorization": "1.7.2",
- "certificatemanager": "1.7.3",
- "channel": "1.17.2",
- "cloudbuild": "1.14.2",
- "clouddms": "1.7.2",
- "cloudtasks": "1.12.3",
- "commerce": "0.1.2",
- "compute": "1.23.2",
+ "accessapproval": "1.7.4",
+ "accesscontextmanager": "1.8.4",
+ "advisorynotifications": "1.3.0",
+ "ai": "0.3.0",
+ "aiplatform": "1.58.0",
+ "alloydb": "1.8.0",
+ "analytics": "0.22.0",
+ "apigateway": "1.6.4",
+ "apigeeconnect": "1.6.4",
+ "apigeeregistry": "0.8.2",
+ "apikeys": "1.1.4",
+ "appengine": "1.8.4",
+ "apps": "0.2.0",
+ "area120": "0.8.4",
+ "artifactregistry": "1.14.6",
+ "asset": "1.17.0",
+ "assuredworkloads": "1.11.4",
+ "automl": "1.13.4",
+ "baremetalsolution": "1.2.3",
+ "batch": "1.7.0",
+ "beyondcorp": "1.0.3",
+ "billing": "1.18.0",
+ "binaryauthorization": "1.8.0",
+ "certificatemanager": "1.7.4",
+ "channel": "1.17.4",
+ "cloudbuild": "1.15.0",
+ "clouddms": "1.7.3",
+ "cloudprofiler": "0.2.0",
+ "cloudquotas": "0.1.0",
+ "cloudtasks": "1.12.4",
+ "commerce": "0.1.3",
+ "compute": "1.23.3",
"compute/metadata": "0.2.3",
- "confidentialcomputing": "1.3.2",
- "config": "0.1.3",
- "contactcenterinsights": "1.11.2",
- "container": "1.27.0",
- "containeranalysis": "0.11.2",
- "datacatalog": "1.18.2",
- "dataflow": "0.9.3",
- "dataform": "0.9.0",
- "datafusion": "1.7.3",
- "datalabeling": "0.8.3",
- "dataplex": "1.11.0",
- "dataproc": "2.2.2",
- "dataqna": "0.8.3",
- "datastream": "1.10.2",
- "deploy": "1.14.1",
- "dialogflow": "1.44.2",
- "discoveryengine": "1.2.2",
- "dlp": "1.11.0",
- "documentai": "1.23.4",
- "domains": "0.9.3",
- "edgecontainer": "1.1.3",
- "essentialcontacts": "1.6.4",
- "eventarc": "1.13.2",
- "filestore": "1.7.3",
- "functions": "1.15.3",
- "gkebackup": "1.3.3",
- "gkeconnect": "0.8.3",
- "gkehub": "0.14.3",
- "gkemulticloud": "1.0.2",
- "grafeas": "0.3.3",
- "gsuiteaddons": "1.6.3",
- "iam": "1.1.4",
- "iap": "1.9.2",
- "ids": "1.4.3",
- "iot": "1.7.3",
- "kms": "1.15.4",
- "language": "1.12.1",
- "lifesciences": "0.9.3",
- "longrunning": "0.5.3",
- "managedidentities": "1.6.3",
- "maps": "1.6.0",
- "mediatranslation": "0.8.3",
- "memcache": "1.10.3",
- "metastore": "1.13.2",
- "migrationcenter": "0.2.2",
- "monitoring": "1.16.2",
- "netapp": "0.2.2",
- "networkconnectivity": "1.14.2",
- "networkmanagement": "1.9.2",
- "networksecurity": "0.9.3",
- "notebooks": "1.11.1",
- "optimization": "1.6.1",
- "orchestration": "1.8.3",
- "orgpolicy": "1.11.3",
- "osconfig": "1.12.3",
- "oslogin": "1.12.1",
- "phishingprotection": "0.8.3",
- "policysimulator": "0.2.1",
- "policytroubleshooter": "1.10.1",
- "privatecatalog": "0.9.3",
- "rapidmigrationassessment": "1.0.3",
- "recaptchaenterprise": "2.8.2",
- "recommendationengine": "0.8.3",
- "recommender": "1.11.2",
- "redis": "1.14.0",
- "resourcemanager": "1.9.3",
- "resourcesettings": "1.6.3",
- "retail": "1.14.3",
- "run": "1.3.2",
- "scheduler": "1.10.3",
- "secretmanager": "1.11.3",
- "securesourcemanager": "0.1.1",
- "security": "1.15.3",
- "securitycenter": "1.24.1",
- "servicecontrol": "1.12.3",
- "servicedirectory": "1.11.2",
- "servicemanagement": "1.9.4",
- "serviceusage": "1.8.2",
- "shell": "1.7.3",
- "shopping": "0.2.1",
- "speech": "1.20.0",
- "storageinsights": "1.0.3",
- "storagetransfer": "1.10.2",
- "support": "1.0.2",
- "talent": "1.6.4",
- "texttospeech": "1.7.3",
- "tpu": "1.6.3",
- "trace": "1.10.3",
- "translate": "1.9.2",
- "video": "1.20.2",
- "videointelligence": "1.11.3",
- "vision": "2.7.4",
- "vmmigration": "1.7.3",
- "vmwareengine": "1.0.2",
- "vpcaccess": "1.7.3",
- "webrisk": "1.9.3",
- "websecurityscanner": "1.6.3",
- "workflows": "1.12.2",
- "workstations": "0.5.2"
+ "confidentialcomputing": "1.4.0",
+ "config": "0.1.4",
+ "contactcenterinsights": "1.12.1",
+ "container": "1.29.0",
+ "containeranalysis": "0.11.3",
+ "datacatalog": "1.19.1",
+ "dataflow": "0.9.4",
+ "dataform": "0.9.1",
+ "datafusion": "1.7.4",
+ "datalabeling": "0.8.4",
+ "dataplex": "1.14.0",
+ "dataproc": "2.3.0",
+ "dataqna": "0.8.4",
+ "datastream": "1.10.3",
+ "deploy": "1.17.0",
+ "dialogflow": "1.48.0",
+ "discoveryengine": "1.4.0",
+ "dlp": "1.11.1",
+ "documentai": "1.23.7",
+ "domains": "0.9.4",
+ "edgecontainer": "1.1.4",
+ "edgenetwork": "0.1.0",
+ "essentialcontacts": "1.6.5",
+ "eventarc": "1.13.3",
+ "filestore": "1.8.0",
+ "functions": "1.15.4",
+ "gkebackup": "1.3.4",
+ "gkeconnect": "0.8.4",
+ "gkehub": "0.14.4",
+ "gkemulticloud": "1.1.0",
+ "grafeas": "0.3.4",
+ "gsuiteaddons": "1.6.4",
+ "iam": "1.1.5",
+ "iap": "1.9.3",
+ "ids": "1.4.4",
+ "iot": "1.7.4",
+ "kms": "1.15.5",
+ "language": "1.12.2",
+ "lifesciences": "0.9.4",
+ "longrunning": "0.5.4",
+ "managedidentities": "1.6.4",
+ "maps": "1.6.2",
+ "mediatranslation": "0.8.4",
+ "memcache": "1.10.4",
+ "metastore": "1.13.3",
+ "migrationcenter": "0.2.3",
+ "monitoring": "1.17.0",
+ "netapp": "0.2.3",
+ "networkconnectivity": "1.14.3",
+ "networkmanagement": "1.9.3",
+ "networksecurity": "0.9.4",
+ "notebooks": "1.11.2",
+ "optimization": "1.6.2",
+ "orchestration": "1.8.4",
+ "orgpolicy": "1.12.0",
+ "osconfig": "1.12.4",
+ "oslogin": "1.12.2",
+ "phishingprotection": "0.8.4",
+ "policysimulator": "0.2.2",
+ "policytroubleshooter": "1.10.2",
+ "privatecatalog": "0.9.4",
+ "rapidmigrationassessment": "1.0.4",
+ "recaptchaenterprise": "2.9.0",
+ "recommendationengine": "0.8.4",
+ "recommender": "1.12.0",
+ "redis": "1.14.1",
+ "resourcemanager": "1.9.4",
+ "resourcesettings": "1.6.4",
+ "retail": "1.14.4",
+ "run": "1.3.3",
+ "scheduler": "1.10.5",
+ "secretmanager": "1.11.4",
+ "securesourcemanager": "0.1.2",
+ "security": "1.15.4",
+ "securitycenter": "1.24.3",
+ "securitycentermanagement": "0.1.1",
+ "servicecontrol": "1.12.4",
+ "servicedirectory": "1.11.3",
+ "servicemanagement": "1.9.5",
+ "serviceusage": "1.8.3",
+ "shell": "1.7.4",
+ "shopping": "0.3.0",
+ "speech": "1.21.0",
+ "storageinsights": "1.0.4",
+ "storagetransfer": "1.10.3",
+ "support": "1.0.3",
+ "talent": "1.6.5",
+ "telcoautomation": "0.1.1",
+ "texttospeech": "1.7.4",
+ "tpu": "1.6.4",
+ "trace": "1.10.4",
+ "translate": "1.10.0",
+ "video": "1.20.3",
+ "videointelligence": "1.11.4",
+ "vision": "2.7.5",
+ "vmmigration": "1.7.4",
+ "vmwareengine": "1.0.3",
+ "vpcaccess": "1.7.4",
+ "webrisk": "1.9.4",
+ "websecurityscanner": "1.6.4",
+ "workflows": "1.12.3",
+ "workstations": "0.5.3"
}
diff --git a/vendor/cloud.google.com/go/.release-please-manifest.json b/vendor/cloud.google.com/go/.release-please-manifest.json
index f1afd6591f971..333e70a10a79a 100644
--- a/vendor/cloud.google.com/go/.release-please-manifest.json
+++ b/vendor/cloud.google.com/go/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.110.10"
+ ".": "0.112.0"
}
diff --git a/vendor/cloud.google.com/go/CHANGES.md b/vendor/cloud.google.com/go/CHANGES.md
index a418e2ee1cfb7..2a2b4cbb43fcb 100644
--- a/vendor/cloud.google.com/go/CHANGES.md
+++ b/vendor/cloud.google.com/go/CHANGES.md
@@ -1,5 +1,29 @@
# Changes
+## [0.112.0](https://github.com/googleapis/google-cloud-go/compare/v0.111.0...v0.112.0) (2024-01-11)
+
+
+### Features
+
+* **internal/trace:** Export internal/trace package constants and vars ([#9242](https://github.com/googleapis/google-cloud-go/issues/9242)) ([941c16f](https://github.com/googleapis/google-cloud-go/commit/941c16f3a2602e9bdc737b139060a7dd8318f9dd))
+
+
+### Documentation
+
+* **main:** Add telemetry discussion to debug.md ([#9074](https://github.com/googleapis/google-cloud-go/issues/9074)) ([90ed12e](https://github.com/googleapis/google-cloud-go/commit/90ed12e1dffe722b42f58556f0e17b808da9714d)), refs [#8655](https://github.com/googleapis/google-cloud-go/issues/8655)
+
+## [0.111.0](https://github.com/googleapis/google-cloud-go/compare/v0.110.10...v0.111.0) (2023-11-29)
+
+
+### Features
+
+* **internal/trace:** Add OpenTelemetry support ([#8655](https://github.com/googleapis/google-cloud-go/issues/8655)) ([7a46b54](https://github.com/googleapis/google-cloud-go/commit/7a46b5428f239871993d66be2c7c667121f60a6f)), refs [#2205](https://github.com/googleapis/google-cloud-go/issues/2205)
+
+
+### Bug Fixes
+
+* **all:** Bump google.golang.org/api to v0.149.0 ([#8959](https://github.com/googleapis/google-cloud-go/issues/8959)) ([8d2ab9f](https://github.com/googleapis/google-cloud-go/commit/8d2ab9f320a86c1c0fab90513fc05861561d0880))
+
## [0.110.10](https://github.com/googleapis/google-cloud-go/compare/v0.110.9...v0.110.10) (2023-10-31)
diff --git a/vendor/cloud.google.com/go/CONTRIBUTING.md b/vendor/cloud.google.com/go/CONTRIBUTING.md
index 18f175dac99be..d07f81f1797f1 100644
--- a/vendor/cloud.google.com/go/CONTRIBUTING.md
+++ b/vendor/cloud.google.com/go/CONTRIBUTING.md
@@ -62,10 +62,14 @@ intend only to run integration tests on a single package.
#### GCP Setup
-To run the integrations tests, creation and configuration of two projects in
+To run the integrations tests, creation and configuration of three projects in
the Google Developers Console is required: one specifically for Firestore
-integration tests, and another for all other integration tests. We'll refer to
-these projects as "general project" and "Firestore project".
+integration tests, one specifically for Bigtable integration tests, and another
+for all other integration tests. We'll refer to these projects as
+"Firestore project", "Bigtable project" and "general project".
+
+Note: You can skip setting up Bigtable project if you do not plan working on or running a few Bigtable
+tests that require a secondary project
After creating each project, you must [create a service account](https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount)
for each project. Ensure the project-level **Owner**
@@ -118,7 +122,7 @@ Finally, in the general project, create an API key for the translate API:
#### Local Setup
-Once the two projects are created and configured, set the following environment
+Once the three projects are created and configured, set the following environment
variables:
- `GCLOUD_TESTS_GOLANG_PROJECT_ID`: Developers Console project's ID (e.g.
@@ -132,6 +136,7 @@ project's service account.
- `GCLOUD_TESTS_GOLANG_FIRESTORE_KEY`: The path to the JSON key file of the
Firestore project's service account.
- `GCLOUD_TESTS_API_KEY`: API key for using the Translate API created above.
+- `GCLOUD_TESTS_GOLANG_SECONDARY_BIGTABLE_PROJECT_ID`: Developers Console project's ID (e.g. doorway-cliff-677) for Bigtable optional secondary project. This can be same as Firestore project or any project other than the general project.
As part of the setup that follows, the following variables will be configured:
@@ -219,6 +224,9 @@ For instance, in `.zshrc`:
# Developers Console project's ID (e.g. bamboo-shift-455) for the general project.
export GCLOUD_TESTS_GOLANG_PROJECT_ID=your-project
+# Developers Console project's ID (e.g. bamboo-shift-455) for the Bigtable project.
+export GCLOUD_TESTS_GOLANG_SECONDARY_BIGTABLE_PROJECT_ID=your-bigtable-optional-secondary-project
+
# The path to the JSON key file of the general project's service account.
export GCLOUD_TESTS_GOLANG_KEY=~/directory/your-project-abcd1234.json
diff --git a/vendor/cloud.google.com/go/debug.md b/vendor/cloud.google.com/go/debug.md
index f2a608ce24d77..0c9826544c929 100644
--- a/vendor/cloud.google.com/go/debug.md
+++ b/vendor/cloud.google.com/go/debug.md
@@ -1,21 +1,37 @@
-# Debugging tips and tricks
+# Logging, Debugging and Telemetry
+
+**Warning:The OpenCensus project is obsolete and was archived on July 31st,
+2023.** This means that any security vulnerabilities that are found will not be
+patched. We recommend that you begin migrating to OpenCensus tracing to
+OpenTelemetry, the successor project. See [OpenCensus](#opencensus) below for
+details.
+
+Logging, debugging and telemetry all capture data that can be used for
+troubleshooting. Logging records specific events and transactions. Debugging
+exposes values for immediate analysis. Telemetry is suitable for production use
+and can serve both logging and monitoring purposes. Telemetry tracing follows
+requests through a system to provide a view of component interactions. Telemetry
+metrics collects data for significant performance indicators, offering insights
+into a system's health.
+
+## Logging and debugging
While working with the Go Client libraries you may run into some situations
where you need a deeper level of understanding about what is going on in order
to solve your problem. Here are some tips and tricks that you can use in these
-cases. *Note* that many of the tips in this document will have a performance
+cases. *Note* that many of the tips in this section will have a performance
impact and are therefore not recommended for sustained production use. Use these
tips locally or in production for a *limited time* to help get a better
understanding of what is going on.
-## HTTP based clients
+### HTTP based clients
All of our auto-generated clients have a constructor to create a client that
uses HTTP/JSON instead of gRPC. Additionally a couple of our hand-written
clients like Storage and Bigquery are also HTTP based. Here are some tips for
debugging these clients.
-### Try setting Go's HTTP debug variable
+#### Try setting Go's HTTP debug variable
Try setting the following environment variable for verbose Go HTTP logging:
GODEBUG=http2debug=1. To read more about this feature please see the godoc for
@@ -24,7 +40,7 @@ GODEBUG=http2debug=1. To read more about this feature please see the godoc for
*WARNING*: Enabling this debug variable will log headers and payloads which may
contain private information.
-### Add in your own logging with an HTTP middleware
+#### Add in your own logging with an HTTP middleware
You may want to add in your own logging around HTTP requests. One way to do this
is to register a custom HTTP client with a logging transport built in. Here is
@@ -92,16 +108,16 @@ func main() {
}
```
-## gRPC based clients
+### gRPC based clients
-### Try setting grpc-go's debug variables
+#### Try setting grpc-go's debug variables
Try setting the following environment variables for grpc-go:
`GRPC_GO_LOG_VERBOSITY_LEVEL=99` `GRPC_GO_LOG_SEVERITY_LEVEL=info`. These are
good for diagnosing connection level failures. For more information please see
[grpc-go's debug documentation](https://pkg.go.dev/google.golang.org/grpc/examples/features/debugging#section-readme).
-### Add in your own logging with a gRPC interceptors
+#### Add in your own logging with a gRPC interceptors
You may want to add in your own logging around gRPC requests. One way to do this
is to register a custom interceptor that adds logging. Here is
@@ -160,3 +176,220 @@ func main() {
// Use the client
}
```
+
+## Telemetry
+
+**Warning:The OpenCensus project is obsolete and was archived on July 31st,
+2023.** This means that any security vulnerabilities that are found will not be
+patched. We recommend that you begin migrating to OpenCensus tracing to
+OpenTelemetry, the successor project. See [OpenCensus](#opencensus) below for
+details.
+
+The Google Cloud client libraries for Go still use the OpenCensus project by
+default. However, opt-in support for
+[OpenTelemetry](https://opentelemetry.io/docs/what-is-opentelemetry/) is now
+available. The transition from OpenCensus to OpenTelemetry is covered in the
+following sections.
+
+### Tracing (experimental)
+
+Apart from spans created by underlying libraries such as gRPC, Google Cloud Go
+generated clients do not create spans. Only the spans created by following
+hand-written clients are in scope for the discussion in this section:
+
+* [cloud.google.com/go/bigquery](https://pkg.go.dev/cloud.google.com/go/bigquery)
+* [cloud.google.com/go/bigtable](https://pkg.go.dev/cloud.google.com/go/bigtable)
+* [cloud.google.com/go/datastore](https://pkg.go.dev/cloud.google.com/go/datastore)
+* [cloud.google.com/go/firestore](https://pkg.go.dev/cloud.google.com/go/firestore)
+* [cloud.google.com/go/spanner](https://pkg.go.dev/cloud.google.com/go/spanner)
+* [cloud.google.com/go/storage](https://pkg.go.dev/cloud.google.com/go/storage)
+
+Currently, the spans created by these clients are for OpenCensus. However,
+OpenCensus users are urged to transition to OpenTelemetry as soon as possible,
+as explained in the next section. OpenTelemetry users can opt-in to experimental
+OpenTelemetry support via an environment variable, as described below.
+
+#### OpenCensus
+
+**Warning:The OpenCensus project is obsolete and was archived on July 31st,
+2023.** This means that any security vulnerabilities that are found will not be
+patched. We recommend that you begin migrating to OpenCensus tracing to
+OpenTelemetry, the successor project.
+
+Using the [OpenTelemetry-Go - OpenCensus Bridge](https://pkg.go.dev/go.opentelemetry.io/otel/bridge/opencensus), you can immediately begin exporting your traces with OpenTelemetry, even while
+dependencies of your application remain instrumented with OpenCensus. If you do
+not use the bridge, you will need to migrate your entire application and all of
+its instrumented dependencies at once. For simple applications, this may be
+possible, but we expect the bridge to be helpful if multiple libraries with
+instrumentation are used.
+
+On May 29, 2024, six months after the
+[release](https://github.com/googleapis/google-cloud-go/releases/tag/v0.111.0)
+of experimental, opt-in support for OpenTelemetry tracing, the default tracing
+support in the clients above will change from OpenCensus to OpenTelemetry, and
+the experimental OpenCensus support will be marked as deprecated. To continue
+using the OpenCensus support after this change, set the environment variable
+`GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING` to the case-insensitive
+value `opencensus` before loading the client library.
+
+```sh
+export GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING=opencensus
+```
+
+On December 2nd, 2024, one year after the release of OpenTelemetry support, the
+experimental and deprecated support for OpenCensus tracing will be removed.
+
+Please note that all Google Cloud Go clients currently provide experimental
+support for the propagation of both OpenCensus and OpenTelemetry trace context
+to their receiving endpoints. The experimental support for OpenCensus trace
+context propagation will be removed at the same time as the experimental
+OpenCensus tracing support.
+
+Please refer to the following resources:
+
+* [Sunsetting OpenCensus](https://opentelemetry.io/blog/2023/sunsetting-opencensus/)
+* [OpenTelemetry-Go - OpenCensus Bridge](https://pkg.go.dev/go.opentelemetry.io/otel/bridge/opencensus)
+
+#### OpenTelemetry
+
+To opt-in to experimental OpenTelemetry tracing currently available in the
+clients listed above, set the environment variable
+`GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING` to the case-insensitive
+value `opentelemetry` before loading the client library.
+
+```sh
+export GOOGLE_API_GO_EXPERIMENTAL_TELEMETRY_PLATFORM_TRACING=opentelemetry
+```
+
+On May 29, 2024, the default tracing support will change from OpenCensus to
+OpenTelemetry, and this environment variable will no longer be needed.
+
+Please refer to the following resources:
+
+* [What is OpenTelemetry?](https://opentelemetry.io/docs/what-is-opentelemetry/)
+* [Cloud Trace - Go and OpenTelemetry](https://cloud.google.com/trace/docs/setup/go-ot)
+* On GCE, [use Ops Agent and OpenTelemetry](https://cloud.google.com/trace/docs/otlp)
+
+##### Configuring the OpenTelemetry-Go - OpenCensus Bridge
+
+To configure the OpenCensus bridge with OpenTelemetry and Cloud Trace:
+
+```go
+import (
+ "context"
+ "log"
+ "os"
+ texporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace"
+ octrace "go.opencensus.io/trace"
+ "go.opentelemetry.io/contrib/detectors/gcp"
+ "go.opentelemetry.io/otel"
+ "go.opentelemetry.io/otel/bridge/opencensus"
+ "go.opentelemetry.io/otel/sdk/resource"
+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
+ semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
+)
+
+func main() {
+ // Create exporter.
+ ctx := context.Background()
+ projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
+ exporter, err := texporter.New(texporter.WithProjectID(projectID))
+ if err != nil {
+ log.Fatalf("texporter.New: %v", err)
+ }
+ // Identify your application using resource detection
+ res, err := resource.New(ctx,
+ // Use the GCP resource detector to detect information about the GCP platform
+ resource.WithDetectors(gcp.NewDetector()),
+ // Keep the default detectors
+ resource.WithTelemetrySDK(),
+ // Add your own custom attributes to identify your application
+ resource.WithAttributes(
+ semconv.ServiceNameKey.String("my-application"),
+ ),
+ )
+ if err != nil {
+ log.Fatalf("resource.New: %v", err)
+ }
+ // Create trace provider with the exporter.
+ //
+ // By default it uses AlwaysSample() which samples all traces.
+ // In a production environment or high QPS setup please use
+ // probabilistic sampling.
+ // Example:
+ // tp := sdktrace.NewTracerProvider(sdktrace.WithSampler(sdktrace.TraceIDRatioBased(0.0001)), ...)
+ tp := sdktrace.NewTracerProvider(
+ sdktrace.WithBatcher(exporter),
+ sdktrace.WithResource(res),
+ )
+ defer tp.Shutdown(ctx) // flushes any pending spans, and closes connections.
+ otel.SetTracerProvider(tp)
+ tracer := otel.GetTracerProvider().Tracer("example.com/trace")
+ // Configure the OpenCensus tracer to use the bridge.
+ octrace.DefaultTracer = opencensus.NewTracer(tracer)
+ // Use otel tracer to create spans...
+}
+
+```
+
+
+##### Configuring context propagation
+
+In order to pass options to OpenTelemetry trace context propagation, follow the
+appropriate example for the client's underlying transport.
+
+###### Passing options in HTTP-based clients
+
+```go
+ctx := context.Background()
+trans, err := htransport.NewTransport(ctx,
+ http.DefaultTransport,
+ option.WithScopes(storage.ScopeFullControl),
+)
+if err != nil {
+ log.Fatal(err)
+}
+// An example of passing options to the otelhttp.Transport.
+otelOpts := otelhttp.WithFilter(func(r *http.Request) bool {
+ return r.URL.Path != "/ping"
+})
+hc := &http.Client{
+ Transport: otelhttp.NewTransport(trans, otelOpts),
+}
+client, err := storage.NewClient(ctx, option.WithHTTPClient(hc))
+```
+
+Note that scopes must be set manually in this user-configured solution.
+
+###### Passing options in gRPC-based clients
+
+```go
+projectID := "..."
+ctx := context.Background()
+
+// An example of passing options to grpc.WithStatsHandler.
+otelOpts := otelgrpc.WithMessageEvents(otelgrpc.ReceivedEvents)
+dialOpts := grpc.WithStatsHandler(otelgrpc.NewClientHandler(otelOpts))
+
+ctx := context.Background()
+c, err := datastore.NewClient(ctx, projectID, option.WithGRPCDialOption(dialOpts))
+if err != nil {
+ log.Fatal(err)
+}
+defer c.Close()
+```
+
+
+### Metrics (experimental)
+
+The generated clients do not create metrics. Only the following hand-written
+clients create experimental OpenCensus metrics:
+
+* [cloud.google.com/go/bigquery](https://pkg.go.dev/cloud.google.com/go/bigquery)
+* [cloud.google.com/go/pubsub](https://pkg.go.dev/cloud.google.com/go/pubsub)
+* [cloud.google.com/go/spanner](https://pkg.go.dev/cloud.google.com/go/spanner)
+
+#### OpenTelemetry
+
+The transition of the experimental metrics in the clients above from OpenCensus
+to OpenTelemetry is still TBD.
\ No newline at end of file
diff --git a/vendor/cloud.google.com/go/doc.go b/vendor/cloud.google.com/go/doc.go
index d15db660e6a24..a90d072f0f056 100644
--- a/vendor/cloud.google.com/go/doc.go
+++ b/vendor/cloud.google.com/go/doc.go
@@ -250,7 +250,7 @@ situations, including:
[testing against fake servers]: https://github.com/googleapis/google-cloud-go/blob/main/testing.md#testing-grpc-services-using-fakes
[Vertex AI - Locations]: https://cloud.google.com/vertex-ai/docs/general/locations
[Google Application Default Credentials]: https://cloud.google.com/docs/authentication/external/set-up-adc
-[Debugging Guide]: https://github.com/googleapis/google-cloud-go/blob/main/debug.md
+[Logging, Debugging and Telemetry Guide]: https://github.com/googleapis/google-cloud-go/blob/main/debug.md
[Testing Guide]: https://github.com/googleapis/google-cloud-go/blob/main/testing.md
*/
package cloud // import "cloud.google.com/go"
diff --git a/vendor/cloud.google.com/go/go.work b/vendor/cloud.google.com/go/go.work
index 09b4ea64a2285..88670504dc242 100644
--- a/vendor/cloud.google.com/go/go.work
+++ b/vendor/cloud.google.com/go/go.work
@@ -14,6 +14,7 @@ use (
./apigeeregistry
./apikeys
./appengine
+ ./apps
./area120
./artifactregistry
./asset
@@ -32,6 +33,8 @@ use (
./channel
./cloudbuild
./clouddms
+ ./cloudprofiler
+ ./cloudquotas
./cloudtasks
./commerce
./compute
@@ -58,6 +61,7 @@ use (
./documentai
./domains
./edgecontainer
+ ./edgenetwork
./errorreporting
./essentialcontacts
./eventarc
@@ -127,6 +131,7 @@ use (
./securesourcemanager
./security
./securitycenter
+ ./securitycentermanagement
./servicecontrol
./servicedirectory
./servicemanagement
@@ -141,10 +146,12 @@ use (
./storagetransfer
./support
./talent
+ ./telcoautomation
./texttospeech
./tpu
./trace
./translate
+ ./vertexai
./video
./videointelligence
./vision
diff --git a/vendor/cloud.google.com/go/go.work.sum b/vendor/cloud.google.com/go/go.work.sum
index 1d48c1d9edb62..b7500f493a0d5 100644
--- a/vendor/cloud.google.com/go/go.work.sum
+++ b/vendor/cloud.google.com/go/go.work.sum
@@ -1,10 +1,10 @@
cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.18.0 h1:ugYJK/neZQtQeh2jc5xNoDFiMQojlAkoqJMRb7vTu1U=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.18.0/go.mod h1:Xx0VKh7GJ4si3rmElbh19Mejxz68ibWg/J30ZOMrqzU=
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
-github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
-github.com/cloudprober/cloudprober v0.12.8/go.mod h1:RBgsmwfacACvW/VX6/iNVEK+WnNXDhj/5WvII8N76KQ=
github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM=
github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4=
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo=
@@ -12,29 +12,17 @@ github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkj
github.com/googleapis/gax-go/v2 v2.9.1/go.mod h1:4FG3gMrVZlyMp5itSYKMU9z/lBE7+SbnUOvzH2HqbEY=
github.com/ianlancetaylor/demangle v0.0.0-20230524184225-eabc099b10ab/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM=
+github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU=
-golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg=
-google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0=
-google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
-google.golang.org/genproto v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:CCviP9RmpZ1mxVr8MUjCnSiY09IbAXZxhLE6EhHIdPU=
-google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk=
-google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE=
-google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
-google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
-google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0=
-google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww=
-google.golang.org/genproto/googleapis/bytestream v0.0.0-20230629202037-9506855d4529/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA=
-google.golang.org/genproto/googleapis/bytestream v0.0.0-20230911183012-2d3300fd4832/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c=
-google.golang.org/genproto/googleapis/bytestream v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:qDbnxtViX5J6CvFbxeNUSzKgVlDLJ/6L+caxye9+Flo=
-google.golang.org/genproto/googleapis/bytestream v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:itlFWGBbEyD32PUeJsTG8h8Wz7iJXfVK4gt1EJ+pAG0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230807174057-1744710a1577/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:KSqppvjFjtoCI+KGd4PELB0qLNxdJHRGqRI09mB6pQA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0=
-google.golang.org/grpc v1.58.2/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
-google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
+google.golang.org/genproto/googleapis/api v0.0.0-20231212172506-995d672761c0/go.mod h1:CAny0tYF+0/9rmDB9fahA9YLzX3+AEVl1qXbv5hhj6c=
+google.golang.org/genproto/googleapis/bytestream v0.0.0-20231120223509-83a465c0220f/go.mod h1:iIgEblxoG4klcXsG0d9cpoxJ4xndv6+1FkDROCHhPRI=
+google.golang.org/genproto/googleapis/bytestream v0.0.0-20231212172506-995d672761c0/go.mod h1:guYXGPwC6jwxgWKW5Y405fKWOFNwlvUlUnzyp9i0uqo=
diff --git a/vendor/cloud.google.com/go/release-please-config-individual.json b/vendor/cloud.google.com/go/release-please-config-individual.json
index fd6db8b96122d..529f7db353a04 100644
--- a/vendor/cloud.google.com/go/release-please-config-individual.json
+++ b/vendor/cloud.google.com/go/release-please-config-individual.json
@@ -43,6 +43,9 @@
},
"storage": {
"component": "storage"
+ },
+ "vertexai": {
+ "component": "vertexai"
}
},
"plugins": [
diff --git a/vendor/cloud.google.com/go/release-please-config-yoshi-submodules.json b/vendor/cloud.google.com/go/release-please-config-yoshi-submodules.json
index d2bd9b417b30a..e6a2b0ed66cca 100644
--- a/vendor/cloud.google.com/go/release-please-config-yoshi-submodules.json
+++ b/vendor/cloud.google.com/go/release-please-config-yoshi-submodules.json
@@ -39,6 +39,9 @@
"appengine": {
"component": "appengine"
},
+ "apps": {
+ "component": "apps"
+ },
"area120": {
"component": "area120"
},
@@ -81,6 +84,12 @@
"clouddms": {
"component": "clouddms"
},
+ "cloudprofiler": {
+ "component": "cloudprofiler"
+ },
+ "cloudquotas": {
+ "component": "cloudquotas"
+ },
"cloudtasks": {
"component": "cloudtasks"
},
@@ -156,6 +165,9 @@
"edgecontainer": {
"component": "edgecontainer"
},
+ "edgenetwork": {
+ "component": "edgenetwork"
+ },
"essentialcontacts": {
"component": "essentialcontacts"
},
@@ -315,6 +327,9 @@
"securitycenter": {
"component": "securitycenter"
},
+ "securitycentermanagement": {
+ "component": "securitycentermanagement"
+ },
"servicecontrol": {
"component": "servicecontrol"
},
@@ -348,6 +363,9 @@
"talent": {
"component": "talent"
},
+ "telcoautomation": {
+ "component": "telcoautomation"
+ },
"texttospeech": {
"component": "texttospeech"
},
diff --git a/vendor/github.com/containerd/containerd/Vagrantfile b/vendor/github.com/containerd/containerd/Vagrantfile
index 401f7198f0a2a..a428145d8682d 100644
--- a/vendor/github.com/containerd/containerd/Vagrantfile
+++ b/vendor/github.com/containerd/containerd/Vagrantfile
@@ -104,7 +104,7 @@ EOF
config.vm.provision "install-golang", type: "shell", run: "once" do |sh|
sh.upload_path = "/tmp/vagrant-install-golang"
sh.env = {
- 'GO_VERSION': ENV['GO_VERSION'] || "1.22.6",
+ 'GO_VERSION': ENV['GO_VERSION'] || "1.22.7",
}
sh.inline = <<~SHELL
#!/usr/bin/env bash
diff --git a/vendor/github.com/containerd/containerd/pkg/userns/userns_deprecated.go b/vendor/github.com/containerd/containerd/pkg/userns/userns_deprecated.go
deleted file mode 100644
index 79d22a5d1d611..0000000000000
--- a/vendor/github.com/containerd/containerd/pkg/userns/userns_deprecated.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- Copyright The containerd Authors.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-// Deprecated: use github.com/moby/sys/userns
-package userns
-
-import "github.com/moby/sys/userns"
-
-// RunningInUserNS detects whether we are currently running in a Linux
-// user namespace and memoizes the result. It returns false on non-Linux
-// platforms.
-//
-// Deprecated: use [userns.RunningInUserNS].
-func RunningInUserNS() bool {
- return userns.RunningInUserNS()
-}
diff --git a/vendor/github.com/containerd/containerd/version/version.go b/vendor/github.com/containerd/containerd/version/version.go
index 315867d21f5a4..4546b9445d83b 100644
--- a/vendor/github.com/containerd/containerd/version/version.go
+++ b/vendor/github.com/containerd/containerd/version/version.go
@@ -23,7 +23,7 @@ var (
Package = "github.com/containerd/containerd"
// Version holds the complete version number. Filled in at linking time.
- Version = "1.7.21+unknown"
+ Version = "1.7.22+unknown"
// Revision is filled with the VCS (e.g. git) revision being used to build
// the program at linking time.
diff --git a/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/convert_unix.go b/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/convert_unix.go
index 9cbc2a90363a5..c892c685117b6 100644
--- a/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/convert_unix.go
+++ b/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/convert_unix.go
@@ -25,10 +25,11 @@ import (
"github.com/containerd/containerd/archive"
"github.com/containerd/containerd/archive/compression"
"github.com/containerd/containerd/content"
- "github.com/containerd/containerd/errdefs"
+ "github.com/containerd/containerd/content/local"
"github.com/containerd/containerd/images"
"github.com/containerd/containerd/images/converter"
"github.com/containerd/containerd/labels"
+ "github.com/containerd/errdefs"
"github.com/containerd/fifo"
"github.com/klauspost/compress/zstd"
"github.com/opencontainers/go-digest"
@@ -108,7 +109,7 @@ func unpackOciTar(ctx context.Context, dst string, reader io.Reader) error {
ctx,
dst,
ds,
- archive.WithConvertWhiteout(func(hdr *tar.Header, file string) (bool, error) {
+ archive.WithConvertWhiteout(func(_ *tar.Header, _ string) (bool, error) {
// Keep to extract all whiteout files.
return true, nil
}),
@@ -624,13 +625,23 @@ func Merge(ctx context.Context, layers []Layer, dest io.Writer, opt MergeOption)
return nil, errors.Wrap(err, "merge bootstrap")
}
+ bootstrapRa, err := local.OpenReader(targetBootstrapPath)
+ if err != nil {
+ return nil, errors.Wrap(err, "open bootstrap reader")
+ }
+ defer bootstrapRa.Close()
+
+ files := append([]File{
+ {
+ Name: EntryBootstrap,
+ Reader: content.NewReader(bootstrapRa),
+ Size: bootstrapRa.Size(),
+ },
+ }, opt.AppendFiles...)
var rc io.ReadCloser
if opt.WithTar {
- rc, err = packToTar(targetBootstrapPath, fmt.Sprintf("image/%s", EntryBootstrap), false)
- if err != nil {
- return nil, errors.Wrap(err, "pack bootstrap to tar")
- }
+ rc = packToTar(files, false)
} else {
rc, err = os.Open(targetBootstrapPath)
if err != nil {
diff --git a/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/types.go b/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/types.go
index 94a68041a171f..6bd54a6afc445 100644
--- a/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/types.go
+++ b/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/types.go
@@ -125,6 +125,8 @@ type MergeOption struct {
Timeout *time.Duration
// Encrypt encrypts the bootstrap layer if it's specified.
Encrypt Encrypter
+ // AppendFiles specifies the files that need to be appended to the bootstrap layer.
+ AppendFiles []File
}
type UnpackOption struct {
diff --git a/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/utils.go b/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/utils.go
index b0b04d8b5fc09..7c09f76d0b20b 100644
--- a/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/utils.go
+++ b/vendor/github.com/containerd/nydus-snapshotter/pkg/converter/utils.go
@@ -14,7 +14,6 @@ import (
"encoding/json"
"fmt"
"io"
- "os"
"path/filepath"
"github.com/containerd/containerd/content"
@@ -22,6 +21,12 @@ import (
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
)
+type File struct {
+ Name string
+ Reader io.Reader
+ Size int64
+}
+
type writeCloser struct {
closed bool
io.WriteCloser
@@ -83,39 +88,27 @@ func newSeekReader(ra io.ReaderAt) *seekReader {
}
}
-// packToTar makes .tar(.gz) stream of file named `name` and return reader.
-func packToTar(src string, name string, compress bool) (io.ReadCloser, error) {
- fi, err := os.Stat(src)
- if err != nil {
- return nil, err
- }
-
+// packToTar packs files to .tar(.gz) stream then return reader.
+func packToTar(files []File, compress bool) io.ReadCloser {
dirHdr := &tar.Header{
- Name: filepath.Dir(name),
+ Name: "image",
Mode: 0755,
Typeflag: tar.TypeDir,
}
- hdr := &tar.Header{
- Name: name,
- Mode: 0444,
- Size: fi.Size(),
- }
-
- reader, writer := io.Pipe()
+ pr, pw := io.Pipe()
go func() {
// Prepare targz writer
var tw *tar.Writer
var gw *gzip.Writer
var err error
- var file *os.File
if compress {
- gw = gzip.NewWriter(writer)
+ gw = gzip.NewWriter(pw)
tw = tar.NewWriter(gw)
} else {
- tw = tar.NewWriter(writer)
+ tw = tar.NewWriter(pw)
}
defer func() {
@@ -137,30 +130,30 @@ func packToTar(src string, name string, compress bool) (io.ReadCloser, error) {
finalErr = err2
}
- writer.CloseWithError(finalErr)
+ pw.CloseWithError(finalErr)
}()
- file, err = os.Open(src)
- if err != nil {
- return
- }
- defer file.Close()
-
// Write targz stream
if err = tw.WriteHeader(dirHdr); err != nil {
return
}
- if err = tw.WriteHeader(hdr); err != nil {
- return
- }
-
- if _, err = io.Copy(tw, file); err != nil {
- return
+ for _, file := range files {
+ hdr := tar.Header{
+ Name: filepath.Join("image", file.Name),
+ Mode: 0444,
+ Size: file.Size,
+ }
+ if err = tw.WriteHeader(&hdr); err != nil {
+ return
+ }
+ if _, err = io.Copy(tw, file.Reader); err != nil {
+ return
+ }
}
}()
- return reader, nil
+ return pr
}
// Copied from containerd/containerd project, copyright The containerd Authors.
diff --git a/vendor/github.com/containerd/typeurl/v2/README.md b/vendor/github.com/containerd/typeurl/v2/README.md
index e3d0742f456c3..8d86600a40b36 100644
--- a/vendor/github.com/containerd/typeurl/v2/README.md
+++ b/vendor/github.com/containerd/typeurl/v2/README.md
@@ -2,7 +2,7 @@
[](https://pkg.go.dev/github.com/containerd/typeurl)
[](https://github.com/containerd/typeurl/actions?query=workflow%3ACI)
-[](https://codecov.io/gh/containerd/typeurl)
+[](https://codecov.io/gh/containerd/typeurl)
[](https://goreportcard.com/report/github.com/containerd/typeurl)
A Go package for managing the registration, marshaling, and unmarshaling of encoded types.
@@ -13,8 +13,8 @@ This package helps when types are sent over a ttrpc/GRPC API and marshaled as a
**typeurl** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE).
As a containerd sub-project, you will find the:
- * [Project governance](https://github.com/containerd/project/blob/master/GOVERNANCE.md),
- * [Maintainers](https://github.com/containerd/project/blob/master/MAINTAINERS),
- * and [Contributing guidelines](https://github.com/containerd/project/blob/master/CONTRIBUTING.md)
+ * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md),
+ * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS),
+ * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md)
information in our [`containerd/project`](https://github.com/containerd/project) repository.
diff --git a/vendor/github.com/containerd/typeurl/v2/types.go b/vendor/github.com/containerd/typeurl/v2/types.go
index 8d6665bb5ba76..78817b701e3ad 100644
--- a/vendor/github.com/containerd/typeurl/v2/types.go
+++ b/vendor/github.com/containerd/typeurl/v2/types.go
@@ -27,6 +27,7 @@ import (
gogoproto "github.com/gogo/protobuf/proto"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoregistry"
+ "google.golang.org/protobuf/types/known/anypb"
)
var (
@@ -122,6 +123,9 @@ func TypeURL(v interface{}) (string, error) {
// Is returns true if the type of the Any is the same as v.
func Is(any Any, v interface{}) bool {
+ if any == nil {
+ return false
+ }
// call to check that v is a pointer
tryDereference(v)
url, err := TypeURL(v)
@@ -193,6 +197,31 @@ func UnmarshalToByTypeURL(typeURL string, value []byte, out interface{}) error {
return err
}
+// MarshalProto converts typeurl.Any to google.golang.org/protobuf/types/known/anypb.Any.
+func MarshalProto(from Any) *anypb.Any {
+ if from == nil {
+ return nil
+ }
+
+ if pbany, ok := from.(*anypb.Any); ok {
+ return pbany
+ }
+
+ return &anypb.Any{
+ TypeUrl: from.GetTypeUrl(),
+ Value: from.GetValue(),
+ }
+}
+
+// MarshalAnyToProto converts an arbitrary interface to google.golang.org/protobuf/types/known/anypb.Any.
+func MarshalAnyToProto(from interface{}) (*anypb.Any, error) {
+ anyType, err := MarshalAny(from)
+ if err != nil {
+ return nil, err
+ }
+ return MarshalProto(anyType), nil
+}
+
func unmarshal(typeURL string, value []byte, v interface{}) (interface{}, error) {
t, err := getTypeByUrl(typeURL)
if err != nil {
diff --git a/vendor/github.com/moby/buildkit/AUTHORS b/vendor/github.com/moby/buildkit/AUTHORS
index c5ae03bfcb8d6..7a9966ff25185 100644
--- a/vendor/github.com/moby/buildkit/AUTHORS
+++ b/vendor/github.com/moby/buildkit/AUTHORS
@@ -6,11 +6,16 @@ Aaron L. Xu
Aaron Lehmann
Aaron Lehmann
Abdur Rehman
+adamperlin
Addam Hardy
Adrian Plata
+Adrien Delorme
+Ahmon Dancy
Aidan Hobson Sayers
Akihiro Suda
Alan Fregtman <941331+darkvertex@users.noreply.github.com>
+Alano Terblanche <18033717+Benehiko@users.noreply.github.com>
+Aleksa Sarai
Alex Couture-Beil
Alex Mayer
Alex Suraci
@@ -29,17 +34,27 @@ Andrey Smirnov
Andy Alt
Andy Caldwell
Ankush Agarwal
+Anthony Nandaa
Anthony Sottile
Anurag Goel
Anusha Ragunathan
+Arkadiusz Drabczyk
+Arnaldo Garcia Rincon
Arnaud Bailly
+Artem Khramov
+Austin Vazquez
Avi Deitcher
Bastiaan Bakker
Ben Longo
Bertrand Paquet
+Billy Owire
Bin Liu
+Bjorn Neergaard
Brandon Mitchell
+Brennan Kinney <5098581+polarathene@users.noreply.github.com>
Brian Goff
+Bunyamin Dokmetas <19335284+ztzxt@users.noreply.github.com>
+Burt Holzman
Ce Gao
Chaerim Yeo
Changwei Ge
@@ -60,8 +75,10 @@ Corey Larson
Cory Bennett
Cory Snider
coryb
+Craig Andrews
CrazyMax
Csaba Apagyi
+cuiyourong
Dan Duvall
Daniel Cassidy
Daniel Nephin
@@ -74,9 +91,11 @@ David Dooling
David Gageot
David Karlsson
Davis Schirmer
+Debosmit Ray
Dennis Chen
+Dennis Haney
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
-Derek McGowan
+Derek McGowan
Dharmit Shah
Ding Fei
dito
@@ -86,16 +105,21 @@ Eli Uriegas
Elias Faxö
Eng Zer Jun
Eric Engestrom
+Erik McKelvey
Erik Sipsma
eyherabh
f0
+fanjiyun.fjy
+Felix Fontein
Fernando Miguel
Fiona Klute
Foysal Iqbal
+Frank Villaro-Dixon
+frankyang
Fred Cox
Frieder Bluemle
-Gabriel
-Gabriel Adrian Samfira
+Félix Mattrat
+Gabriel-Adrian Samfira
Gaetan de Villele
Gahl Saraf
genglu.gl
@@ -103,7 +127,10 @@ George
ggjulio
Govind Rai
Grant Reaber
-Guilhem C
+Grégoire Payen de La Garanderie
+guangwu
+Guilhem Charles
+guoguangwu
Hans van den Bogert
Hao Hu
Hector S
@@ -112,13 +139,19 @@ Himanshu Pandey
Hiromu Nakamura
HowJMay
Hugo Santos
+Höhl, Lukas
Ian Campbell
+Ian King'ori
+Ignas Mikalajūnas
Ilya Dmitrichenko
Iskander (Alex) Sharipov
Jacob Gillespie
Jacob MacElroy
+Jakub Ciolek
+James Carnegie
Jean-Pierre Huynh
Jeffrey Huang
+Jesper Noordsij
Jesse Rittner
Jessica Frazelle
jgeiger
@@ -130,6 +163,7 @@ John Maguire
John Mulhausen
John Tims
Jon Zeolla
+Jonathan A. Sternberg
Jonathan Azoff
Jonathan Giannuzzi
Jonathan Stoppani
@@ -142,11 +176,14 @@ Justin Chadwell
Justin Cormack
Justin Garrison
Jörg Franke <359489+NewJorg@users.noreply.github.com>
+Kai Takac
Kang, Matthew
+Kazuyoshi Kato
Kees Cook
Kevin Burke
kevinmeredith
Kir Kolyshkin
+Kirill A. Korinsky
Kohei Tokunaga
Koichi Shiraishi
Kris-Mikael Krister
@@ -155,7 +192,9 @@ Kyle
l00397676
Lajos Papp
lalyos
+Leandro Santiago
Levi Harrison
+liulanzheng
liwenqi
lixiaobing10051267
lomot
@@ -164,8 +203,10 @@ Luca Visentin
Maciej Kalisz
Madhav Puri
Manu Gupta
+Marat Radchenko
Marcus Comstedt
Mark Gordon
+Mark Yen
Marko Kohtala
Mary Anthony
masibw
@@ -181,19 +222,26 @@ Mihai Borobocea
Mike Brown
mikelinjie <294893458@qq.com>
Mikhail Vasin
+Milas Bowman
Misty Stanley-Jones
+Mitsuru Kariya
Miyachi Katsuya
Morgan Bauer
+Moritz "WanzenBug" Wanzenböck
Morlay
msg
Nao YONASHIRO
Natasha Jarus
Nathan Sullivan
+Nguyễn Đức Chiến
Nick Miyake
Nick Santos
Nikhil Pandeti
+njucjc
+Nobi
Noel Georgi <18496730+frezbo@users.noreply.github.com>
Oliver Bristow
+omahs <73983677+omahs@users.noreply.github.com>
Omer Duchovne <79370724+od-cyera@users.noreply.github.com>
Omer Mizrahi
Ondrej Fabry
@@ -206,6 +254,7 @@ Paul "TBBle" Hampson
Paweł Gronowski
Peter Dave Hello
Petr Fedchenkov
+Petteri Räty
Phil Estes
Pierre Fenoll
pieterdd
@@ -213,18 +262,24 @@ Pranav Pandit
Pratik Raj
Prayag Verma
Qiang Huang
+racequite
Remy Suen
+Reshen
+retornam
Ri Xu
Rob Taylor
Robert Estelle
Rubens Figueiredo
+Salim B
Sam Whited
+Sascha Hemleb
Sascha Schwarze
Sean P. Kane
Sebastiaan van Stijn
Seiya Miyata
Serhat Gülçiçek
Sertac Ozercan
+Shaun Thompson
Shev Yan
Shijiang Wei
Shingo Omura
@@ -239,10 +294,13 @@ Stefan Scherer
Stefan Weil
StefanSchoof
Stepan Blyshchak
+Stephen Day
Steve Lohr
sunchunming
Sven Dowideit
+Swagat Bora
Takuya Noguchi
+Talon Bowler
Thomas Leonard
Thomas Riccardi
Thomas Shaw
@@ -256,6 +314,7 @@ Tobias Klauser
Tomas Tomecek
Tomasz Kopczynski
Tomohiro Kusumoto
+Tristan Stenner
Troels Liebe Bentsen
Tõnis Tiigi
Valentin Lorentz
@@ -269,16 +328,21 @@ Wang Yumu <37442693@qq.com>
Wei Fu
Wei Zhang
wingkwong
+x893675
Xiaofan Zhang
Ximo Guanter
Yamazaki Masashi
Yan Song
Yong Tang
Yuichiro Kaneko
+yumemio <59369226+yumemio@users.noreply.github.com>
Yurii Rashkovskii
+yzewei
Zach Badgett