Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package docker-compose for openSUSE:Factory checked in at 2023-04-21 14:17:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/docker-compose (Old) and /work/SRC/openSUSE:Factory/.docker-compose.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "docker-compose" Fri Apr 21 14:17:00 2023 rev:20 rq:1080914 version:2.17.3 Changes: -------- --- /work/SRC/openSUSE:Factory/docker-compose/docker-compose.changes 2023-03-27 18:17:46.795581409 +0200 +++ /work/SRC/openSUSE:Factory/.docker-compose.new.1533/docker-compose.changes 2023-04-21 14:17:11.646642100 +0200 @@ -1,0 +2,30 @@ +Thu Apr 20 14:26:37 UTC 2023 - ka...@b1-systems.de + +- Update to version 2.17.3: + * bump compose-go to v1.13.4 + * build(deps): bump github.com/docker/docker + * build(deps): bump github.com/docker/cli + * bump compose-go + * Remove redundant goroutine while removing containers (#10449) + * log: fix race on container kill (#10459) + * Don't use "info.IndexServerAddress" for authentication + * go.mod: fix grouping of dependencies, and tidy + * build(deps): bump github.com/opencontainers/runc from 1.1.3 to + 1.1.5 + * add dry-run support to down command + * fix gocyclo lint error which currently block Compose CI + * can't watch a service without a build section + * ansi=auto|never|always + * bump docker version to 23.0.3 (CVE-2023-28840) + * better support NO_COLOR by disabling colors, not ANSI TUI + (#10434) + * ci: bump Go to 1.20.3 and various dependencies + * restore `--timeout` flag renamed by mistake + * prevent panic using classic builder + * add dry-run support to create command + * build(deps): bump github.com/docker/cli + * build(deps): bump github.com/docker/docker + * workaround race condition in ContainerList + * add dry-run support to run command + +------------------------------------------------------------------- Old: ---- compose-2.17.2.obscpio New: ---- compose-2.17.3.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ docker-compose.spec ++++++ --- /var/tmp/diff_new_pack.hJkKiC/_old 2023-04-21 14:17:12.518646990 +0200 +++ /var/tmp/diff_new_pack.hJkKiC/_new 2023-04-21 14:17:12.526647034 +0200 @@ -19,7 +19,7 @@ %define __arch_install_post export NO_BRP_STRIP_DEBUG=true Name: docker-compose -Version: 2.17.2 +Version: 2.17.3 Release: 0 Summary: Define and run multi-container applications with Docker License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.hJkKiC/_old 2023-04-21 14:17:12.582647348 +0200 +++ /var/tmp/diff_new_pack.hJkKiC/_new 2023-04-21 14:17:12.586647371 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/docker/compose</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v2.17.2</param> + <param name="revision">v2.17.3</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> @@ -17,7 +17,7 @@ <param name="compression">gz</param> </service> <service name="go_modules" mode="disabled"> - <param name="archive">compose-2.17.2.obscpio</param> + <param name="archive">compose-2.17.3.obscpio</param> </service> </services> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.hJkKiC/_old 2023-04-21 14:17:12.618647550 +0200 +++ /var/tmp/diff_new_pack.hJkKiC/_new 2023-04-21 14:17:12.622647573 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/docker/compose</param> - <param name="changesrevision">0b6133f75b1678413a588a80440a3b239e686467</param></service></servicedata> + <param name="changesrevision">7b0ed13209894b5981608f7d9e329a3a58af957d</param></service></servicedata> (No newline at EOF) ++++++ compose-2.17.2.obscpio -> compose-2.17.3.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/Dockerfile new/compose-2.17.3/Dockerfile --- old/compose-2.17.2/Dockerfile 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/Dockerfile 2023-04-20 11:12:07.000000000 +0200 @@ -15,9 +15,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -ARG GO_VERSION=1.20.2 -ARG XX_VERSION=1.1.2 -ARG GOLANGCI_LINT_VERSION=v1.52.0 +ARG GO_VERSION=1.20.3 +ARG XX_VERSION=1.2.1 +ARG GOLANGCI_LINT_VERSION=v1.52.2 ARG ADDLICENSE_VERSION=v1.0.0 ARG BUILD_TAGS="e2e" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/cmd/compose/compose.go new/compose-2.17.3/cmd/compose/compose.go --- old/compose-2.17.2/cmd/compose/compose.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/cmd/compose/compose.go 2023-04-20 11:12:07.000000000 +0200 @@ -305,15 +305,17 @@ logrus.SetLevel(logrus.TraceLevel) } - if noColor, ok := os.LookupEnv("NO_COLOR"); ok && noColor != "" && !cmd.Flags().Changed("ansi") { - ansi = "never" + formatter.SetANSIMode(streams, ansi) + + if noColor, ok := os.LookupEnv("NO_COLOR"); ok && noColor != "" { + progress.NoColor() + formatter.SetANSIMode(streams, formatter.Never) } - formatter.SetANSIMode(streams, ansi) switch ansi { case "never": progress.Mode = progress.ModePlain - case "tty": + case "always": progress.Mode = progress.ModeTTY } if opts.WorkDir != "" { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/cmd/compose/remove.go new/compose-2.17.3/cmd/compose/remove.go --- old/compose-2.17.2/cmd/compose/remove.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/cmd/compose/remove.go 2023-04-20 11:12:07.000000000 +0200 @@ -64,16 +64,6 @@ return err } - if opts.stop { - err := backend.Stop(ctx, name, api.StopOptions{ - Services: services, - Project: project, - }) - if err != nil { - return err - } - } - return backend.Remove(ctx, name, api.RemoveOptions{ Services: services, Force: opts.force, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/cmd/compose/up.go new/compose-2.17.3/cmd/compose/up.go --- old/compose-2.17.2/cmd/compose/up.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/cmd/compose/up.go 2023-04-20 11:12:07.000000000 +0200 @@ -104,7 +104,7 @@ flags.BoolVar(&up.noStart, "no-start", false, "Don't start the services after creating them.") flags.BoolVar(&up.cascadeStop, "abort-on-container-exit", false, "Stops all containers if any container was stopped. Incompatible with -d") flags.StringVar(&up.exitCodeFrom, "exit-code-from", "", "Return the exit code of the selected service container. Implies --abort-on-container-exit") - flags.IntVarP(&create.timeout, "waitTimeout", "t", 10, "Use this waitTimeout in seconds for container shutdown when attached or when containers are already running.") + flags.IntVarP(&create.timeout, "timeout", "t", 10, "Use this timeout in seconds for container shutdown when attached or when containers are already running.") flags.BoolVar(&up.timestamp, "timestamps", false, "Show timestamps.") flags.BoolVar(&up.noDeps, "no-deps", false, "Don't start linked services.") flags.BoolVar(&create.recreateDeps, "always-recreate-deps", false, "Recreate dependent containers. Incompatible with --no-recreate.") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/docs/reference/compose_up.md new/compose-2.17.3/docs/reference/compose_up.md --- old/compose-2.17.2/docs/reference/compose_up.md 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/docs/reference/compose_up.md 2023-04-20 11:12:07.000000000 +0200 @@ -5,32 +5,32 @@ ### Options -| Name | Type | Default | Description | -|:-----------------------------|:--------------|:----------|:-------------------------------------------------------------------------------------------------------------| -| `--abort-on-container-exit` | | | Stops all containers if any container was stopped. Incompatible with -d | -| `--always-recreate-deps` | | | Recreate dependent containers. Incompatible with --no-recreate. | -| `--attach` | `stringArray` | | Attach to service output. | -| `--attach-dependencies` | | | Attach to dependent containers. | -| `--build` | | | Build images before starting containers. | -| `-d`, `--detach` | | | Detached mode: Run containers in the background | -| `--exit-code-from` | `string` | | Return the exit code of the selected service container. Implies --abort-on-container-exit | -| `--force-recreate` | | | Recreate containers even if their configuration and image haven't changed. | -| `--no-attach` | `stringArray` | | Don't attach to specified service. | -| `--no-build` | | | Don't build an image, even if it's missing. | -| `--no-color` | | | Produce monochrome output. | -| `--no-deps` | | | Don't start linked services. | -| `--no-log-prefix` | | | Don't print prefix in logs. | -| `--no-recreate` | | | If containers already exist, don't recreate them. Incompatible with --force-recreate. | -| `--no-start` | | | Don't start the services after creating them. | -| `--pull` | `string` | `missing` | Pull image before running ("always"\|"missing"\|"never") | -| `--quiet-pull` | | | Pull without printing progress information. | -| `--remove-orphans` | | | Remove containers for services not defined in the Compose file. | -| `-V`, `--renew-anon-volumes` | | | Recreate anonymous volumes instead of retrieving data from the previous containers. | -| `--scale` | `stringArray` | | Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present. | -| `--timestamps` | | | Show timestamps. | -| `--wait` | | | Wait for services to be running\|healthy. Implies detached mode. | -| `--wait-timeout` | `int` | `0` | timeout waiting for application to be running\|healthy. | -| `-t`, `--waitTimeout` | `int` | `10` | Use this waitTimeout in seconds for container shutdown when attached or when containers are already running. | +| Name | Type | Default | Description | +|:-----------------------------|:--------------|:----------|:---------------------------------------------------------------------------------------------------------| +| `--abort-on-container-exit` | | | Stops all containers if any container was stopped. Incompatible with -d | +| `--always-recreate-deps` | | | Recreate dependent containers. Incompatible with --no-recreate. | +| `--attach` | `stringArray` | | Attach to service output. | +| `--attach-dependencies` | | | Attach to dependent containers. | +| `--build` | | | Build images before starting containers. | +| `-d`, `--detach` | | | Detached mode: Run containers in the background | +| `--exit-code-from` | `string` | | Return the exit code of the selected service container. Implies --abort-on-container-exit | +| `--force-recreate` | | | Recreate containers even if their configuration and image haven't changed. | +| `--no-attach` | `stringArray` | | Don't attach to specified service. | +| `--no-build` | | | Don't build an image, even if it's missing. | +| `--no-color` | | | Produce monochrome output. | +| `--no-deps` | | | Don't start linked services. | +| `--no-log-prefix` | | | Don't print prefix in logs. | +| `--no-recreate` | | | If containers already exist, don't recreate them. Incompatible with --force-recreate. | +| `--no-start` | | | Don't start the services after creating them. | +| `--pull` | `string` | `missing` | Pull image before running ("always"\|"missing"\|"never") | +| `--quiet-pull` | | | Pull without printing progress information. | +| `--remove-orphans` | | | Remove containers for services not defined in the Compose file. | +| `-V`, `--renew-anon-volumes` | | | Recreate anonymous volumes instead of retrieving data from the previous containers. | +| `--scale` | `stringArray` | | Scale SERVICE to NUM instances. Overrides the `scale` setting in the Compose file if present. | +| `-t`, `--timeout` | `int` | `10` | Use this timeout in seconds for container shutdown when attached or when containers are already running. | +| `--timestamps` | | | Show timestamps. | +| `--wait` | | | Wait for services to be running\|healthy. Implies detached mode. | +| `--wait-timeout` | `int` | `0` | timeout waiting for application to be running\|healthy. | <!---MARKER_GEN_END--> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/docs/reference/docker_compose_up.yaml new/compose-2.17.3/docs/reference/docker_compose_up.yaml --- old/compose-2.17.2/docs/reference/docker_compose_up.yaml 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/docs/reference/docker_compose_up.yaml 2023-04-20 11:12:07.000000000 +0200 @@ -231,6 +231,18 @@ experimentalcli: false kubernetes: false swarm: false + - option: timeout + shorthand: t + value_type: int + default_value: "10" + description: | + Use this timeout in seconds for container shutdown when attached or when containers are already running. + deprecated: false + hidden: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: timestamps value_type: bool default_value: "false" @@ -258,18 +270,6 @@ deprecated: false hidden: false experimental: false - experimentalcli: false - kubernetes: false - swarm: false - - option: waitTimeout - shorthand: t - value_type: int - default_value: "10" - description: | - Use this waitTimeout in seconds for container shutdown when attached or when containers are already running. - deprecated: false - hidden: false - experimental: false experimentalcli: false kubernetes: false swarm: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/go.mod new/compose-2.17.3/go.mod --- old/compose-2.17.2/go.mod 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/go.mod 2023-04-20 11:12:07.000000000 +0200 @@ -5,15 +5,15 @@ require ( github.com/AlecAivazis/survey/v2 v2.3.6 github.com/buger/goterm v1.0.4 - github.com/compose-spec/compose-go v1.13.2 + github.com/compose-spec/compose-go v1.13.4 github.com/containerd/console v1.0.3 github.com/containerd/containerd v1.6.19 - github.com/cucumber/godog v0.0.0-00010101000000-000000000000 - github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 + github.com/cucumber/godog v0.0.0-00010101000000-000000000000 // replaced; see replace for the actual version used + github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 github.com/docker/buildx v0.10.4 - github.com/docker/cli v23.0.1+incompatible + github.com/docker/cli v23.0.4+incompatible github.com/docker/cli-docs-tool v0.5.1 - github.com/docker/docker v23.0.1+incompatible + github.com/docker/docker v23.0.4+incompatible github.com/docker/go-connections v0.4.0 github.com/docker/go-units v0.5.0 github.com/golang/mock v1.6.0 @@ -28,21 +28,32 @@ github.com/opencontainers/image-spec v1.1.0-rc2 github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.9.0 - github.com/spf13/cobra v1.6.1 + github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.8.2 github.com/theupdateframework/notary v0.7.0 github.com/tilt-dev/fsnotify v1.4.8-0.20220602155310-fff9c274a375 go.opentelemetry.io/otel v1.14.0 + go.uber.org/goleak v1.2.1 golang.org/x/sync v0.1.0 gopkg.in/yaml.v2 v2.4.0 gotest.tools/v3 v3.4.0 - k8s.io/client-go v0.24.1 // indirect; replaced; see replace for the actual version used ) require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/aws/aws-sdk-go-v2 v1.16.3 // indirect + github.com/aws/aws-sdk-go-v2/config v1.15.5 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.12.0 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.11 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.16.4 // indirect + github.com/aws/smithy-go v1.11.2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bugsnag/bugsnag-go v1.5.0 // indirect github.com/cenkalti/backoff/v4 v4.1.2 // indirect @@ -60,6 +71,7 @@ github.com/docker/go-metrics v0.0.1 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsevents v0.1.1 + github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/fvbommel/sortorder v1.0.2 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -79,13 +91,15 @@ github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-memdb v1.3.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect - github.com/imdario/mergo v0.3.14 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/imdario/mergo v0.3.15 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jinzhu/gorm v1.9.11 // indirect - github.com/jonboulle/clockwork v0.3.1-0.20230117163003-a89700cec744 + github.com/jonboulle/clockwork v0.4.0 github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/klauspost/compress v1.15.12 // indirect + github.com/magiconair/properties v1.8.6 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.17 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect @@ -95,13 +109,15 @@ github.com/moby/locker v1.0.1 // indirect github.com/moby/patternmatcher v0.5.0 github.com/moby/spdystream v0.2.0 // indirect + github.com/moby/sys/mountinfo v0.6.2 // indirect github.com/moby/sys/sequential v0.5.0 // indirect github.com/moby/sys/signal v0.7.0 // indirect github.com/moby/sys/symlink v0.2.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/opencontainers/runc v1.1.3 // indirect + github.com/opencontainers/runc v1.1.5 // indirect github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect @@ -109,6 +125,10 @@ github.com/prometheus/procfs v0.8.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002 // indirect + github.com/spf13/afero v1.9.2 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/subosito/gotenv v1.4.1 // indirect github.com/tonistiigi/fsutil v0.0.0-20230105215944-fb433841cbfa // indirect github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // indirect github.com/tonistiigi/vt100 v0.0.0-20210615222946-8066bb97264f // indirect @@ -141,41 +161,17 @@ google.golang.org/grpc v1.50.1 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/api v0.24.1 // indirect; replaced; see replace for the actual version used k8s.io/apimachinery v0.24.1 // indirect; replaced; see replace for the actual version used + k8s.io/client-go v0.24.1 // indirect; replaced; see replace for the actual version used k8s.io/klog/v2 v2.60.1 // indirect k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect sigs.k8s.io/yaml v1.2.0 // indirect ) -require go.uber.org/goleak v1.2.1 - -require ( - github.com/aws/aws-sdk-go-v2 v1.16.3 // indirect - github.com/aws/aws-sdk-go-v2/config v1.15.5 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.12.0 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.10 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.3.11 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.11.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.16.4 // indirect - github.com/aws/smithy-go v1.11.2 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/magiconair/properties v1.8.6 // indirect - github.com/moby/sys/mountinfo v0.6.2 // indirect - github.com/pelletier/go-toml/v2 v2.0.5 // indirect - github.com/spf13/afero v1.9.2 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect - github.com/subosito/gotenv v1.4.1 // indirect - gopkg.in/ini.v1 v1.67.0 // indirect -) - replace ( // Override for e2e tests github.com/cucumber/godog => github.com/laurazard/godog v0.0.0-20220922095256-4c4b17abdae7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/go.sum new/compose-2.17.3/go.sum --- old/compose-2.17.2/go.sum 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/go.sum 2023-04-20 11:12:07.000000000 +0200 @@ -165,8 +165,8 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/compose-spec/compose-go v1.13.2 h1:FDfb5ddIpbGbxLRg5qjObOf5CrWbKnuHZ+zvpEdCqKc= -github.com/compose-spec/compose-go v1.13.2/go.mod h1:SQfvBkB9u8bLhrj4RQP4I777SqzNLSl9/fNnfvOOjek= +github.com/compose-spec/compose-go v1.13.4 h1:O6xAsPqaY1s9KXteiO7wRCDTJLahv1XP/z/eUO9EfbI= +github.com/compose-spec/compose-go v1.13.4/go.mod h1:rsiZ8uaOHJYJemDBzTe9UBpaq5ZFVEOO4TxM2G3SJxk= github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= @@ -201,19 +201,19 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/denisenkom/go-mssqldb v0.0.0-20190515213511-eb9f6a1743f3/go.mod h1:zAg7JM8CkOJ43xKXIj7eRO9kmWm/TW578qo+oDO6tuM= github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 h1:OtfRoaZ54jKZ7jl9WuxqekousLR9T63iJf0y2EdC2S4= -github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= +github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2 h1:KTYNpKuqtdZJOobHigxfdikPdsBwddmzeRn3UMocznM= +github.com/distribution/distribution/v3 v3.0.0-20230327091844-0c958010ace2/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= github.com/docker/buildx v0.10.4 h1:qsHwlUZaLu7UQkDhJDSRQ+jrvWf6mqwwtY+gWO3rzuA= github.com/docker/buildx v0.10.4/go.mod h1:2mHDjD0QevclBGYIXDOWY/ZU71JAzx7w4CfgroYbHQw= -github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= -github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v23.0.4+incompatible h1:xClB7PsiATttDHj8ce5qvJcikiApNy7teRR1XkoBZGs= +github.com/docker/cli v23.0.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli-docs-tool v0.5.1 h1:jIk/cCZurZERhALPVKhqlNxTQGxn2kcI+56gE57PQXg= github.com/docker/cli-docs-tool v0.5.1/go.mod h1:zMjqTFCU361PRh8apiXzeAZ1Q/xupbIwTusYpzCXS/o= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.1+incompatible h1:vjgvJZxprTTE1A37nm+CLNAdwu6xZekyoiVlUZEINcY= -github.com/docker/docker v23.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v23.0.4+incompatible h1:Kd3Bh9V/rO+XpTP/BLqM+gx8z7+Yb0AA2Ibj+nNo4ek= +github.com/docker/docker v23.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0= @@ -447,12 +447,12 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.14 h1:fOqeC1+nCuuk6PKQdg9YmosXX7Y7mHX6R/0ZldI9iHo= -github.com/imdario/mergo v0.3.14/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/in-toto/in-toto-golang v0.5.0 h1:hb8bgwr0M2hGdDsLjkJ3ZqJ8JFLL/tgYdAxF/XEFBbY= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jinzhu/gorm v0.0.0-20170222002820-5409931a1bb8/go.mod h1:Vla75njaFJ8clLU1W44h34PjIkijhjHIYnZxMqCdxqo= github.com/jinzhu/gorm v1.9.11 h1:gaHGvE+UnWGlbWG4Y3FUwY1EcZ5n6S9WtqBA/uySMLE= @@ -466,8 +466,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/clock v0.0.0-20160418191101-880ee4c33548/go.mod h1:hGT6jSUVzF6no3QaDSMLGLEHtHSBSefs+MgcDWnmhmo= github.com/jmoiron/sqlx v0.0.0-20180124204410-05cef0741ade/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= -github.com/jonboulle/clockwork v0.3.1-0.20230117163003-a89700cec744 h1:fJ+REXDOpsMqA2spt3wAq3HGJJvWnNitGK2KVZTos+8= -github.com/jonboulle/clockwork v0.3.1-0.20230117163003-a89700cec744/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= +github.com/jonboulle/clockwork v0.4.0 h1:p4Cf1aMWXnXAUh8lVfewRBx1zaTSYKrKMF2g3ST4RZ4= +github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK7fnezOII0kc= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -596,8 +596,8 @@ github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= +github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= +github.com/opencontainers/runc v1.1.5/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= @@ -694,8 +694,8 @@ github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/jwalterweatherman v0.0.0-20141219030609-3d60171a6431/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/api/dryrunclient.go new/compose-2.17.3/pkg/api/dryrunclient.go --- old/compose-2.17.2/pkg/api/dryrunclient.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/api/dryrunclient.go 2023-04-20 11:12:07.000000000 +0200 @@ -24,6 +24,7 @@ "io" "net" "net/http" + "runtime" "strings" "sync" @@ -84,15 +85,36 @@ }, nil } +func getCallingFunction() string { + pc, _, _, _ := runtime.Caller(2) + fullName := runtime.FuncForPC(pc).Name() + return fullName[strings.LastIndex(fullName, ".")+1:] +} + // All methods and functions which need to be overridden for dry run. func (d *DryRunClient) ContainerAttach(ctx context.Context, container string, options moby.ContainerAttachOptions) (moby.HijackedResponse, error) { - return moby.HijackedResponse{}, ErrNotImplemented + return moby.HijackedResponse{}, errors.New("interactive run is not supported in dry-run mode") } func (d *DryRunClient) ContainerCreate(ctx context.Context, config *containerType.Config, hostConfig *containerType.HostConfig, networkingConfig *network.NetworkingConfig, platform *specs.Platform, containerName string) (containerType.CreateResponse, error) { - return containerType.CreateResponse{}, ErrNotImplemented + return containerType.CreateResponse{ID: "dryRunId"}, nil +} + +func (d *DryRunClient) ContainerInspect(ctx context.Context, container string) (moby.ContainerJSON, error) { + containerJSON, err := d.apiClient.ContainerInspect(ctx, container) + if err != nil { + return moby.ContainerJSON{ + ContainerJSONBase: &moby.ContainerJSONBase{ + ID: "dryRunId", + }, + Mounts: nil, + Config: &containerType.Config{}, + NetworkSettings: &moby.NetworkSettings{}, + }, nil + } + return containerJSON, err } func (d *DryRunClient) ContainerKill(ctx context.Context, container, signal string) error { @@ -108,7 +130,7 @@ } func (d *DryRunClient) ContainerRename(ctx context.Context, container, newContainerName string) error { - return ErrNotImplemented + return nil } func (d *DryRunClient) ContainerRestart(ctx context.Context, container string, options containerType.StopOptions) error { @@ -116,7 +138,7 @@ } func (d *DryRunClient) ContainerStart(ctx context.Context, container string, options moby.ContainerStartOptions) error { - return ErrNotImplemented + return nil } func (d *DryRunClient) ContainerStop(ctx context.Context, container string, options containerType.StopOptions) error { @@ -147,7 +169,14 @@ } func (d *DryRunClient) ImageInspectWithRaw(ctx context.Context, imageName string) (moby.ImageInspect, []byte, error) { - return moby.ImageInspect{ID: "dryRunId"}, nil, nil + caller := getCallingFunction() + switch caller { + case "pullServiceImage", "buildContainerVolumes": + return moby.ImageInspect{ID: "dryRunId"}, nil, nil + default: + return d.apiClient.ImageInspectWithRaw(ctx, imageName) + } + } func (d *DryRunClient) ImagePull(ctx context.Context, ref string, options moby.ImagePullOptions) (io.ReadCloser, error) { @@ -181,23 +210,26 @@ } func (d *DryRunClient) ImageRemove(ctx context.Context, imageName string, options moby.ImageRemoveOptions) ([]moby.ImageDeleteResponseItem, error) { - return nil, ErrNotImplemented + return nil, nil } func (d *DryRunClient) NetworkConnect(ctx context.Context, networkName, container string, config *network.EndpointSettings) error { - return ErrNotImplemented + return nil } func (d *DryRunClient) NetworkCreate(ctx context.Context, name string, options moby.NetworkCreate) (moby.NetworkCreateResponse, error) { - return moby.NetworkCreateResponse{}, ErrNotImplemented + return moby.NetworkCreateResponse{ + ID: name, + Warning: "", + }, nil } func (d *DryRunClient) NetworkDisconnect(ctx context.Context, networkName, container string, force bool) error { - return ErrNotImplemented + return nil } func (d *DryRunClient) NetworkRemove(ctx context.Context, networkName string) error { - return ErrNotImplemented + return nil } func (d *DryRunClient) VolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error) { @@ -205,7 +237,7 @@ } func (d *DryRunClient) VolumeRemove(ctx context.Context, volumeID string, force bool) error { - return ErrNotImplemented + return nil } func (d *DryRunClient) ContainerExecCreate(ctx context.Context, container string, config moby.ExecConfig) (moby.IDResponse, error) { @@ -275,10 +307,6 @@ return d.apiClient.ContainerExport(ctx, container) } -func (d *DryRunClient) ContainerInspect(ctx context.Context, container string) (moby.ContainerJSON, error) { - return d.apiClient.ContainerInspect(ctx, container) -} - func (d *DryRunClient) ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (moby.ContainerJSON, []byte, error) { return d.apiClient.ContainerInspectWithRaw(ctx, container, getSize) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/build.go new/compose-2.17.3/pkg/compose/build.go --- old/compose-2.17.2/pkg/compose/build.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/build.go 2023-04-20 11:12:07.000000000 +0200 @@ -53,6 +53,7 @@ }, s.stderr()) } +//nolint:gocyclo func (s *composeService) build(ctx context.Context, project *types.Project, options api.BuildOptions) (map[string]string, error) { args := options.Args.Resolve(envResolver(project.Environment)) @@ -74,8 +75,22 @@ return nil } + //TODO:glours - condition to be removed when dry-run support of build will be implemented. + if s.dryRun { + builder := "buildkit" + if !buildkitEnabled { + builder = "legacy builder" + } + fmt.Printf("%sBuilding image %s with %s\n", api.DRYRUN_PREFIX, service.Image, builder) + return nil + } + if !buildkitEnabled { - service.Build.Args = service.Build.Args.OverrideBy(args) + if service.Build.Args == nil { + service.Build.Args = args + } else { + service.Build.Args = service.Build.Args.OverrideBy(args) + } id, err := s.doBuildClassic(ctx, service) if err != nil { return err @@ -418,10 +433,10 @@ return ret } -func toBuildContexts(additionalContexts map[string]*string) map[string]build.NamedContext { +func toBuildContexts(additionalContexts types.Mapping) map[string]build.NamedContext { namedContexts := map[string]build.NamedContext{} - for name, buildContext := range additionalContexts { - namedContexts[name] = build.NamedContext{Path: *buildContext} + for name, context := range additionalContexts { + namedContexts[name] = build.NamedContext{Path: context} } return namedContexts } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/compose.go new/compose-2.17.3/pkg/compose/compose.go --- old/compose-2.17.2/pkg/compose/compose.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/compose.go 2023-04-20 11:12:07.000000000 +0200 @@ -123,12 +123,8 @@ func (s *composeService) Config(ctx context.Context, project *types.Project, options api.ConfigOptions) ([]byte, error) { if options.ResolveImageDigests { - info, err := s.apiClient().Info(ctx) - if err != nil { - return nil, err - } - err = project.ResolveImages(func(named reference.Named) (digest.Digest, error) { - auth, err := encodedAuth(named, info, s.configFile()) + err := project.ResolveImages(func(named reference.Named) (digest.Digest, error) { + auth, err := encodedAuth(named, s.configFile()) if err != nil { return "", err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/create.go new/compose-2.17.3/pkg/compose/create.go --- old/compose-2.17.2/pkg/compose/create.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/create.go 2023-04-20 11:12:07.000000000 +0200 @@ -659,25 +659,25 @@ for _, b := range blkio.DeviceReadBps { resources.BlkioDeviceReadBps = append(resources.BlkioDeviceReadBps, &blkiodev.ThrottleDevice{ Path: b.Path, - Rate: b.Rate, + Rate: uint64(b.Rate), }) } for _, b := range blkio.DeviceReadIOps { resources.BlkioDeviceReadIOps = append(resources.BlkioDeviceReadIOps, &blkiodev.ThrottleDevice{ Path: b.Path, - Rate: b.Rate, + Rate: uint64(b.Rate), }) } for _, b := range blkio.DeviceWriteBps { resources.BlkioDeviceWriteBps = append(resources.BlkioDeviceWriteBps, &blkiodev.ThrottleDevice{ Path: b.Path, - Rate: b.Rate, + Rate: uint64(b.Rate), }) } for _, b := range blkio.DeviceWriteIOps { resources.BlkioDeviceWriteIOps = append(resources.BlkioDeviceWriteIOps, &blkiodev.ThrottleDevice{ Path: b.Path, - Rate: b.Rate, + Rate: uint64(b.Rate), }) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/down.go new/compose-2.17.3/pkg/compose/down.go --- old/compose-2.17.2/pkg/compose/down.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/down.go 2023-04-20 11:12:07.000000000 +0200 @@ -237,21 +237,25 @@ return err } +func (s *composeService) stopContainer(ctx context.Context, w progress.Writer, container moby.Container, timeout *time.Duration) error { + eventName := getContainerProgressName(container) + w.Event(progress.StoppingEvent(eventName)) + timeoutInSecond := utils.DurationSecondToInt(timeout) + err := s.apiClient().ContainerStop(ctx, container.ID, containerType.StopOptions{Timeout: timeoutInSecond}) + if err != nil { + w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping")) + return err + } + w.Event(progress.StoppedEvent(eventName)) + return nil +} + func (s *composeService) stopContainers(ctx context.Context, w progress.Writer, containers []moby.Container, timeout *time.Duration) error { eg, ctx := errgroup.WithContext(ctx) for _, container := range containers { container := container eg.Go(func() error { - eventName := getContainerProgressName(container) - w.Event(progress.StoppingEvent(eventName)) - timeoutInSecond := utils.DurationSecondToInt(timeout) - err := s.apiClient().ContainerStop(ctx, container.ID, containerType.StopOptions{Timeout: timeoutInSecond}) - if err != nil { - w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping")) - return err - } - w.Event(progress.StoppedEvent(eventName)) - return nil + return s.stopContainer(ctx, w, container, timeout) }) } return eg.Wait() @@ -263,10 +267,8 @@ container := container eg.Go(func() error { eventName := getContainerProgressName(container) - w.Event(progress.StoppingEvent(eventName)) - err := s.stopContainers(ctx, w, []moby.Container{container}, timeout) + err := s.stopContainer(ctx, w, container, timeout) if err != nil { - w.Event(progress.ErrorMessageEvent(eventName, "Error while Stopping")) return err } w.Event(progress.RemovingEvent(eventName)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/pull.go new/compose-2.17.3/pkg/compose/pull.go --- old/compose-2.17.2/pkg/compose/pull.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/pull.go 2023-04-20 11:12:07.000000000 +0200 @@ -48,15 +48,6 @@ } func (s *composeService) pull(ctx context.Context, project *types.Project, opts api.PullOptions) error { //nolint:gocyclo - info, err := s.apiClient().Info(ctx) - if err != nil { - return err - } - - if info.IndexServerAddress == "" { - info.IndexServerAddress = registry.IndexServer - } - images, err := s.getLocalImagesDigests(ctx, project) if err != nil { return err @@ -123,7 +114,7 @@ imagesBeingPulled[service.Image] = service.Name eg.Go(func() error { - _, err := s.pullServiceImage(ctx, service, info, s.configFile(), w, false, project.Environment["DOCKER_DEFAULT_PLATFORM"]) + _, err := s.pullServiceImage(ctx, service, s.configFile(), w, false, project.Environment["DOCKER_DEFAULT_PLATFORM"]) if err != nil { pullErrors[i] = err if service.Build != nil { @@ -173,7 +164,7 @@ return ok && tagged.Tag() != "latest" } -func (s *composeService) pullServiceImage(ctx context.Context, service types.ServiceConfig, info moby.Info, +func (s *composeService) pullServiceImage(ctx context.Context, service types.ServiceConfig, configFile driver.Auth, w progress.Writer, quietPull bool, defaultPlatform string) (string, error) { w.Event(progress.Event{ ID: service.Name, @@ -185,7 +176,7 @@ return "", err } - encodedAuth, err := encodedAuth(ref, info, configFile) + encodedAuth, err := encodedAuth(ref, configFile) if err != nil { return "", err } @@ -249,17 +240,13 @@ return inspected.ID, nil } -func encodedAuth(ref reference.Named, info moby.Info, configFile driver.Auth) (string, error) { +func encodedAuth(ref reference.Named, configFile driver.Auth) (string, error) { repoInfo, err := registry.ParseRepositoryInfo(ref) if err != nil { return "", err } - key := repoInfo.Index.Name - if repoInfo.Index.Official { - key = info.IndexServerAddress - } - + key := registry.GetAuthConfigKey(repoInfo.Index) authConfig, err := configFile.GetAuthConfig(key) if err != nil { return "", err @@ -273,15 +260,6 @@ } func (s *composeService) pullRequiredImages(ctx context.Context, project *types.Project, images map[string]string, quietPull bool) error { - info, err := s.apiClient().Info(ctx) - if err != nil { - return err - } - - if info.IndexServerAddress == "" { - info.IndexServerAddress = registry.IndexServer - } - var needPull []types.ServiceConfig for _, service := range project.Services { if service.Image == "" { @@ -311,7 +289,7 @@ for i, service := range needPull { i, service := i, service eg.Go(func() error { - id, err := s.pullServiceImage(ctx, service, info, s.configFile(), w, quietPull, project.Environment["DOCKER_DEFAULT_PLATFORM"]) + id, err := s.pullServiceImage(ctx, service, s.configFile(), w, quietPull, project.Environment["DOCKER_DEFAULT_PLATFORM"]) pulledImages[i] = id if err != nil && isServiceImageToBuild(service, project.Services) { // image can be built, so we can ignore pull failure diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/remove.go new/compose-2.17.3/pkg/compose/remove.go --- old/compose-2.17.2/pkg/compose/remove.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/remove.go 2023-04-20 11:12:07.000000000 +0200 @@ -31,6 +31,17 @@ func (s *composeService) Remove(ctx context.Context, projectName string, options api.RemoveOptions) error { projectName = strings.ToLower(projectName) + + if options.Stop { + err := s.Stop(ctx, projectName, api.StopOptions{ + Services: options.Services, + Project: options.Project, + }) + if err != nil { + return err + } + } + containers, err := s.getContainers(ctx, projectName, oneOffExclude, true, options.Services...) if err != nil { if api.IsNotFoundError(err) { @@ -44,14 +55,27 @@ containers = containers.filter(isService(options.Project.ServiceNames()...)) } - stoppedContainers := containers.filter(func(c moby.Container) bool { - return c.State != ContainerRunning || (options.Stop && s.dryRun) - }) + var stoppedContainers Containers + for _, container := range containers { + // We have to inspect containers, as State reported by getContainers suffers a race condition + inspected, err := s.apiClient().ContainerInspect(ctx, container.ID) + if api.IsNotFoundError(err) { + // Already removed. Maybe configured with auto-remove + continue + } + if err != nil { + return err + } + if !inspected.State.Running || (options.Stop && s.dryRun) { + stoppedContainers = append(stoppedContainers, container) + } + } var names []string stoppedContainers.forEach(func(c moby.Container) { names = append(names, getCanonicalContainerName(c)) }) + fmt.Fprintln(s.stderr(), names) if len(names) == 0 { fmt.Fprintln(s.stderr(), "No stopped containers") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/start.go new/compose-2.17.3/pkg/compose/start.go --- old/compose-2.17.2/pkg/compose/start.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/start.go 2023-04-20 11:12:07.000000000 +0200 @@ -22,6 +22,8 @@ "strings" "time" + "github.com/docker/docker/errdefs" + "github.com/docker/compose/v2/pkg/api" "github.com/docker/compose/v2/pkg/progress" "github.com/docker/compose/v2/pkg/utils" @@ -169,14 +171,16 @@ err := s.Events(ctx, projectName, api.EventsOptions{ Services: services, Consumer: func(event api.Event) error { - if event.Status == "destroy" { - // This container can't be inspected, because it's gone. - // It's already been removed from the watched map. - return nil - } - inspected, err := s.apiClient().ContainerInspect(ctx, event.Container) if err != nil { + if errdefs.IsNotFound(err) { + // it's possible to get "destroy" or "kill" events but not + // be able to inspect in time before they're gone from the + // API, so just remove the watch without erroring + delete(watched, event.Container) + expected = utils.Remove(expected, event.Container) + return nil + } return err } container := moby.Container{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/compose/watch.go new/compose-2.17.3/pkg/compose/watch.go --- old/compose-2.17.2/pkg/compose/watch.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/compose/watch.go 2023-04-20 11:12:07.000000000 +0200 @@ -75,7 +75,7 @@ ContainerPath string } -func (s *composeService) Watch(ctx context.Context, project *types.Project, services []string, _ api.WatchOptions) error { +func (s *composeService) Watch(ctx context.Context, project *types.Project, services []string, _ api.WatchOptions) error { //nolint: gocyclo needRebuild := make(chan fileMapping) needSync := make(chan fileMapping) @@ -103,10 +103,22 @@ if err != nil { return err } + + if config != nil && len(config.Watch) > 0 && service.Build == nil { + // service configured with watchers but no build section + return fmt.Errorf("can't watch service %q without a build context", service.Name) + } + + if len(services) > 0 && service.Build == nil { + // service explicitly selected for watch has no build section + return fmt.Errorf("can't watch service %q without a build context", service.Name) + } + + if len(services) == 0 && service.Build == nil { + continue + } + if config == nil { - if service.Build == nil { - continue - } config = &DevelopmentConfig{ Watch: []Trigger{ { @@ -116,6 +128,7 @@ }, } } + name := service.Name bc := service.Build.Context diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/e2e/build_test.go new/compose-2.17.3/pkg/e2e/build_test.go --- old/compose-2.17.2/pkg/e2e/build_test.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/e2e/build_test.go 2023-04-20 11:12:07.000000000 +0200 @@ -29,100 +29,104 @@ ) func TestLocalComposeBuild(t *testing.T) { - c := NewParallelCLI(t) - t.Run("build named and unnamed images", func(t *testing.T) { - // ensure local test run does not reuse previously build image - c.RunDockerOrExitError(t, "rmi", "build-test-nginx") - c.RunDockerOrExitError(t, "rmi", "custom-nginx") - - res := c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "build") - - res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"}) - c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") - c.RunDockerCmd(t, "image", "inspect", "custom-nginx") - }) - - t.Run("build with build-arg", func(t *testing.T) { - // ensure local test run does not reuse previously build image - c.RunDockerOrExitError(t, "rmi", "build-test-nginx") - c.RunDockerOrExitError(t, "rmi", "custom-nginx") - - c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "build", "--build-arg", "FOO=BAR") - - res := c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") - res.Assert(t, icmd.Expected{Out: `"FOO": "BAR"`}) - }) - - t.Run("build with build-arg set by env", func(t *testing.T) { - // ensure local test run does not reuse previously build image - c.RunDockerOrExitError(t, "rmi", "build-test-nginx") - c.RunDockerOrExitError(t, "rmi", "custom-nginx") - - icmd.RunCmd(c.NewDockerComposeCmd(t, - "--project-directory", - "fixtures/build-test", - "build", - "--build-arg", - "FOO"), - func(cmd *icmd.Cmd) { - cmd.Env = append(cmd.Env, "FOO=BAR") - }) + for _, env := range []string{"DOCKER_BUILDKIT=0", "DOCKER_BUILDKIT=1"} { + c := NewCLI(t, WithEnv(env)) + + t.Run(env+" build named and unnamed images", func(t *testing.T) { + // ensure local test run does not reuse previously build image + c.RunDockerOrExitError(t, "rmi", "build-test-nginx") + c.RunDockerOrExitError(t, "rmi", "custom-nginx") + + res := c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "build") + + res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"}) + c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") + c.RunDockerCmd(t, "image", "inspect", "custom-nginx") + }) - res := c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") - res.Assert(t, icmd.Expected{Out: `"FOO": "BAR"`}) - }) + t.Run(env+" build with build-arg", func(t *testing.T) { + // ensure local test run does not reuse previously build image + c.RunDockerOrExitError(t, "rmi", "build-test-nginx") + c.RunDockerOrExitError(t, "rmi", "custom-nginx") - t.Run("build with multiple build-args ", func(t *testing.T) { - // ensure local test run does not reuse previously build image - c.RunDockerOrExitError(t, "rmi", "-f", "multi-args-multiargs") - cmd := c.NewDockerComposeCmd(t, "--project-directory", "fixtures/build-test/multi-args", "build") + c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "build", "--build-arg", "FOO=BAR") - icmd.RunCmd(cmd, func(cmd *icmd.Cmd) { - cmd.Env = append(cmd.Env, "DOCKER_BUILDKIT=0") + res := c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") + res.Assert(t, icmd.Expected{Out: `"FOO": "BAR"`}) }) - res := c.RunDockerCmd(t, "image", "inspect", "multi-args-multiargs") - res.Assert(t, icmd.Expected{Out: `"RESULT": "SUCCESS"`}) - }) + t.Run(env+" build with build-arg set by env", func(t *testing.T) { + // ensure local test run does not reuse previously build image + c.RunDockerOrExitError(t, "rmi", "build-test-nginx") + c.RunDockerOrExitError(t, "rmi", "custom-nginx") + + icmd.RunCmd(c.NewDockerComposeCmd(t, + "--project-directory", + "fixtures/build-test", + "build", + "--build-arg", + "FOO"), + func(cmd *icmd.Cmd) { + cmd.Env = append(cmd.Env, "FOO=BAR") + }) - t.Run("build as part of up", func(t *testing.T) { - c.RunDockerOrExitError(t, "rmi", "build-test-nginx") - c.RunDockerOrExitError(t, "rmi", "custom-nginx") + res := c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") + res.Assert(t, icmd.Expected{Out: `"FOO": "BAR"`}) + }) - res := c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "up", "-d") - t.Cleanup(func() { - c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "down") + t.Run(env+" build with multiple build-args ", func(t *testing.T) { + // ensure local test run does not reuse previously build image + c.RunDockerOrExitError(t, "rmi", "-f", "multi-args-multiargs") + cmd := c.NewDockerComposeCmd(t, "--project-directory", "fixtures/build-test/multi-args", "build") + + icmd.RunCmd(cmd, func(cmd *icmd.Cmd) { + cmd.Env = append(cmd.Env, "DOCKER_BUILDKIT=0") + }) + + res := c.RunDockerCmd(t, "image", "inspect", "multi-args-multiargs") + res.Assert(t, icmd.Expected{Out: `"RESULT": "SUCCESS"`}) }) - res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"}) - res.Assert(t, icmd.Expected{Out: "COPY static2 /usr/share/nginx/html"}) + t.Run(env+" build as part of up", func(t *testing.T) { + c.RunDockerOrExitError(t, "rmi", "build-test-nginx") + c.RunDockerOrExitError(t, "rmi", "custom-nginx") + + res := c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "up", "-d") + t.Cleanup(func() { + c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "down") + }) + + res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"}) + res.Assert(t, icmd.Expected{Out: "COPY static2 /usr/share/nginx/html"}) + + output := HTTPGetWithRetry(t, "http://localhost:8070", http.StatusOK, 2*time.Second, 20*time.Second) + assert.Assert(t, strings.Contains(output, "Hello from Nginx container")) - output := HTTPGetWithRetry(t, "http://localhost:8070", http.StatusOK, 2*time.Second, 20*time.Second) - assert.Assert(t, strings.Contains(output, "Hello from Nginx container")) + c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") + c.RunDockerCmd(t, "image", "inspect", "custom-nginx") + }) + + t.Run(env+" no rebuild when up again", func(t *testing.T) { + res := c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "up", "-d") + + assert.Assert(t, !strings.Contains(res.Stdout(), "COPY static"), res.Stdout()) + }) + + t.Run(env+" rebuild when up --build", func(t *testing.T) { + res := c.RunDockerComposeCmd(t, "--workdir", "fixtures/build-test", "up", "-d", "--build") + + res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"}) + res.Assert(t, icmd.Expected{Out: "COPY static2 /usr/share/nginx/html"}) + }) + + t.Run(env+" cleanup build project", func(t *testing.T) { + c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "down") + c.RunDockerCmd(t, "rmi", "build-test-nginx") + c.RunDockerCmd(t, "rmi", "custom-nginx") + }) + } - c.RunDockerCmd(t, "image", "inspect", "build-test-nginx") - c.RunDockerCmd(t, "image", "inspect", "custom-nginx") - }) - - t.Run("no rebuild when up again", func(t *testing.T) { - res := c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "up", "-d") - - assert.Assert(t, !strings.Contains(res.Stdout(), "COPY static"), res.Stdout()) - }) - - t.Run("rebuild when up --build", func(t *testing.T) { - res := c.RunDockerComposeCmd(t, "--workdir", "fixtures/build-test", "up", "-d", "--build") - - res.Assert(t, icmd.Expected{Out: "COPY static /usr/share/nginx/html"}) - res.Assert(t, icmd.Expected{Out: "COPY static2 /usr/share/nginx/html"}) - }) - - t.Run("cleanup build project", func(t *testing.T) { - c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test", "down") - c.RunDockerCmd(t, "rmi", "build-test-nginx") - c.RunDockerCmd(t, "rmi", "custom-nginx") - }) } func TestBuildSSH(t *testing.T) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/e2e/compose_test.go new/compose-2.17.3/pkg/e2e/compose_test.go --- old/compose-2.17.2/pkg/e2e/compose_test.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/e2e/compose_test.go 2023-04-20 11:12:07.000000000 +0200 @@ -169,23 +169,34 @@ c.RunDockerComposeCmd(t, "-f", "./fixtures/simple-composefile/compose.yaml", "-p", projectName, "up", "-d") }) - t.Run("rm -sf", func(t *testing.T) { + t.Run("rm --stop --force simple", func(t *testing.T) { res := c.RunDockerComposeCmd(t, "-f", "./fixtures/simple-composefile/compose.yaml", "-p", projectName, "rm", - "-sf", "simple") + "--stop", "--force", "simple") res.Assert(t, icmd.Expected{Err: "Removed", ExitCode: 0}) }) - t.Run("check containers after rm -sf", func(t *testing.T) { + t.Run("check containers after rm", func(t *testing.T) { res := c.RunDockerCmd(t, "ps", "--all") - assert.Assert(t, !strings.Contains(res.Combined(), projectName+"_simple"), res.Combined()) + assert.Assert(t, !strings.Contains(res.Combined(), projectName+"-simple"), res.Combined()) + assert.Assert(t, strings.Contains(res.Combined(), projectName+"-another"), res.Combined()) }) - t.Run("rm -sf <none>", func(t *testing.T) { + t.Run("up (again)", func(t *testing.T) { + c.RunDockerComposeCmd(t, "-f", "./fixtures/simple-composefile/compose.yaml", "-p", projectName, "up", "-d") + }) + + t.Run("rm ---stop --force <none>", func(t *testing.T) { res := c.RunDockerComposeCmd(t, "-f", "./fixtures/simple-composefile/compose.yaml", "-p", projectName, "rm", - "-sf", "simple") + "--stop", "--force") res.Assert(t, icmd.Expected{ExitCode: 0}) }) + t.Run("check containers after rm", func(t *testing.T) { + res := c.RunDockerCmd(t, "ps", "--all") + assert.Assert(t, !strings.Contains(res.Combined(), projectName+"-simple"), res.Combined()) + assert.Assert(t, !strings.Contains(res.Combined(), projectName+"-another"), res.Combined()) + }) + t.Run("down", func(t *testing.T) { c.RunDockerComposeCmd(t, "-p", projectName, "down") }) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/progress/colors.go new/compose-2.17.3/pkg/progress/colors.go --- old/compose-2.17.2/pkg/progress/colors.go 1970-01-01 01:00:00.000000000 +0100 +++ new/compose-2.17.3/pkg/progress/colors.go 2023-04-20 11:12:07.000000000 +0200 @@ -0,0 +1,47 @@ +/* + Copyright 2020 Docker Compose CLI 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. +*/ + +package progress + +import ( + "github.com/morikuni/aec" +) + +type colorFunc func(string) string + +var ( + nocolor colorFunc = func(s string) string { + return s + } + + DoneColor colorFunc = aec.BlueF.Apply + TimerColor colorFunc = aec.BlueF.Apply + CountColor colorFunc = aec.YellowF.Apply + WarningColor colorFunc = aec.YellowF.With(aec.Bold).Apply + SuccessColor colorFunc = aec.GreenF.Apply + ErrorColor colorFunc = aec.RedF.With(aec.Bold).Apply + PrefixColor colorFunc = aec.CyanF.Apply +) + +func NoColor() { + DoneColor = nocolor + TimerColor = nocolor + CountColor = nocolor + WarningColor = nocolor + SuccessColor = nocolor + ErrorColor = nocolor + PrefixColor = nocolor +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/progress/event.go new/compose-2.17.3/pkg/progress/event.go --- old/compose-2.17.2/pkg/progress/event.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/progress/event.go 2023-04-20 11:12:07.000000000 +0200 @@ -18,23 +18,21 @@ import ( "time" - - "github.com/morikuni/aec" ) // EventStatus indicates the status of an action type EventStatus int -func (s EventStatus) color() aec.ANSI { +func (s EventStatus) colorFn() colorFunc { switch s { case Done: - return aec.GreenF + return SuccessColor case Warning: - return aec.YellowF.With(aec.Bold) + return WarningColor case Error: - return aec.RedF.With(aec.Bold) + return ErrorColor default: - return aec.DefaultF + return nocolor } } @@ -170,19 +168,19 @@ } var ( - spinnerDone = aec.Apply("â", aec.GreenF) - spinnerWarning = aec.Apply("!", aec.YellowF) - spinnerError = aec.Apply("â", aec.RedF) + spinnerDone = "â" + spinnerWarning = "!" + spinnerError = "â" ) func (e *Event) Spinner() any { switch e.Status { case Done: - return spinnerDone + return SuccessColor(spinnerDone) case Warning: - return spinnerWarning + return WarningColor(spinnerWarning) case Error: - return spinnerError + return ErrorColor(spinnerError) default: return e.spinner.String() } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/progress/tty.go new/compose-2.17.3/pkg/progress/tty.go --- old/compose-2.17.2/pkg/progress/tty.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/progress/tty.go 2023-04-20 11:12:07.000000000 +0200 @@ -151,7 +151,7 @@ firstLine := fmt.Sprintf("[+] Running %d/%d", numDone(w.events), w.numLines) if w.numLines != 0 && numDone(w.events) == w.numLines { - firstLine = aec.Apply(firstLine, aec.BlueF) + firstLine = DoneColor(firstLine) } fmt.Fprintln(w.out, firstLine) @@ -210,7 +210,7 @@ } prefix := "" if dryRun { - prefix = aec.Apply(api.DRYRUN_PREFIX, aec.CyanF) + prefix = PrefixColor(api.DRYRUN_PREFIX) } elapsed := endTime.Sub(event.startTime).Seconds() @@ -234,8 +234,8 @@ if len(completion) > 0 { txt = fmt.Sprintf("%s %s [%s] %7s/%-7s %s", event.ID, - aec.Apply(fmt.Sprintf("%d layers", len(completion)), aec.YellowF), - aec.Apply(strings.Join(completion, ""), aec.GreenF, aec.Bold), + CountColor(fmt.Sprintf("%d layers", len(completion))), + SuccessColor(strings.Join(completion, "")), units.HumanSize(float64(current)), units.HumanSize(float64(total)), event.Text) } else { @@ -260,10 +260,10 @@ prefix, txt, strings.Repeat(" ", padding), - aec.Apply(status, event.Status.color()), + event.Status.colorFn()(status), ) timer := fmt.Sprintf("%.1fs ", elapsed) - o := align(text, aec.Apply(timer, aec.BlueF), terminalWidth) + o := align(text, TimerColor(timer), terminalWidth) return o } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/progress/tty_test.go new/compose-2.17.3/pkg/progress/tty_test.go --- old/compose-2.17.2/pkg/progress/tty_test.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/progress/tty_test.go 2023-04-20 11:12:07.000000000 +0200 @@ -42,7 +42,7 @@ lineWidth := len(fmt.Sprintf("%s %s", ev.ID, ev.Text)) out := tty().lineText(ev, "", 50, lineWidth, false) - assert.Equal(t, out, " . id Text \x1b[39mStatus\x1b[0m \x1b[34m0.0s \x1b[0m\n") + assert.Equal(t, out, " . id Text Status \x1b[34m0.0s \x1b[0m\n") ev.Status = Done out = tty().lineText(ev, "", 50, lineWidth, false) @@ -50,11 +50,11 @@ ev.Status = Error out = tty().lineText(ev, "", 50, lineWidth, false) - assert.Equal(t, out, " \x1b[31mâ\x1b[0m id Text \x1b[31m\x1b[1mStatus\x1b[0m \x1b[34m0.0s \x1b[0m\n") + assert.Equal(t, out, " \x1b[31m\x1b[1mâ\x1b[0m id Text \x1b[31m\x1b[1mStatus\x1b[0m \x1b[34m0.0s \x1b[0m\n") ev.Status = Warning out = tty().lineText(ev, "", 50, lineWidth, false) - assert.Equal(t, out, " \x1b[33m!\x1b[0m id Text \x1b[33m\x1b[1mStatus\x1b[0m \x1b[34m0.0s \x1b[0m\n") + assert.Equal(t, out, " \x1b[33m\x1b[1m!\x1b[0m id Text \x1b[33m\x1b[1mStatus\x1b[0m \x1b[34m0.0s \x1b[0m\n") } func TestLineTextSingleEvent(t *testing.T) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/compose-2.17.2/pkg/watch/watcher_darwin.go new/compose-2.17.3/pkg/watch/watcher_darwin.go --- old/compose-2.17.2/pkg/watch/watcher_darwin.go 2023-03-26 16:09:47.000000000 +0200 +++ new/compose-2.17.3/pkg/watch/watcher_darwin.go 2023-04-20 11:12:07.000000000 +0200 @@ -20,6 +20,7 @@ package watch import ( + "os" "path/filepath" "time" @@ -38,7 +39,6 @@ pathsWereWatching map[string]interface{} ignore PathMatcher - sawAnyHistoryDone bool } func (d *fseventNotify) loop() { @@ -52,7 +52,7 @@ } for _, e := range events { - e.Path = filepath.Join("/", e.Path) + e.Path = filepath.Join(string(os.PathSeparator), e.Path) _, isPathWereWatching := d.pathsWereWatching[e.Path] if e.Flags&fsevents.ItemIsDir == fsevents.ItemIsDir && e.Flags&fsevents.ItemCreated == fsevents.ItemCreated && isPathWereWatching { ++++++ compose.obsinfo ++++++ --- /var/tmp/diff_new_pack.hJkKiC/_old 2023-04-21 14:17:12.882649030 +0200 +++ /var/tmp/diff_new_pack.hJkKiC/_new 2023-04-21 14:17:12.886649053 +0200 @@ -1,5 +1,5 @@ name: compose -version: 2.17.2 -mtime: 1679839787 -commit: 0b6133f75b1678413a588a80440a3b239e686467 +version: 2.17.3 +mtime: 1681981927 +commit: 7b0ed13209894b5981608f7d9e329a3a58af957d ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/docker-compose/vendor.tar.gz /work/SRC/openSUSE:Factory/.docker-compose.new.1533/vendor.tar.gz differ: char 5, line 1