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 2022-12-20 20:21:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/docker-compose (Old)
 and      /work/SRC/openSUSE:Factory/.docker-compose.new.1835 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "docker-compose"

Tue Dec 20 20:21:14 2022 rev:13 rq:1043926 version:2.14.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/docker-compose/docker-compose.changes    
2022-12-17 20:37:00.068755265 +0100
+++ /work/SRC/openSUSE:Factory/.docker-compose.new.1835/docker-compose.changes  
2022-12-20 20:21:55.662351941 +0100
@@ -1,0 +2,14 @@
+Tue Dec 20 12:21:59 UTC 2022 - ka...@b1-systems.de
+
+- Update to version 2.14.2:
+  * build(deps): bump github.com/containerd/containerd from 1.6.12 to 1.6.14
+  * fix race condition on compose logs
+  * update projectOptions to be public by renaming it to ProjectOptions
+  * detect dependency failed to start
+  * set CPU quota
+  * Use `DOCKER_DEFAULT_PLATFORM` to determine platform when creating container
+  * fix regression running pull --ignore-pull-failures
+  * only list running containers when --all=false
+  * volume: fix WCOW volume mounts
+
+-------------------------------------------------------------------

Old:
----
  compose-2.14.1.tar.gz

New:
----
  compose-2.14.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ docker-compose.spec ++++++
--- /var/tmp/diff_new_pack.i9fe66/_old  2022-12-20 20:21:56.266355251 +0100
+++ /var/tmp/diff_new_pack.i9fe66/_new  2022-12-20 20:21:56.270355273 +0100
@@ -19,7 +19,7 @@
 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true
 
 Name:           docker-compose
-Version:        2.14.1
+Version:        2.14.2
 Release:        0
 Summary:        Define and run multi-container applications with Docker
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.i9fe66/_old  2022-12-20 20:21:56.302355449 +0100
+++ /var/tmp/diff_new_pack.i9fe66/_new  2022-12-20 20:21:56.306355471 +0100
@@ -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.14.1</param>
+    <param name="revision">v2.14.2</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="changesgenerate">enable</param>
     <param name="versionrewrite-pattern">v(.*)</param>
@@ -16,7 +16,7 @@
     <param name="compression">gz</param>
   </service>
   <service name="go_modules" mode="disabled">
-    <param name="archive">compose-2.14.1.tar.gz</param>
+    <param name="archive">compose-2.14.2.tar.gz</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.i9fe66/_old  2022-12-20 20:21:56.326355580 +0100
+++ /var/tmp/diff_new_pack.i9fe66/_new  2022-12-20 20:21:56.338355646 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/docker/compose</param>
-              <param 
name="changesrevision">0eaa249222cc94d5cea2a3cf4f690f4d3153fbec</param></service></servicedata>
+              <param 
name="changesrevision">ab791877ef6548697e6a7ff7c8e490964d88c5d7</param></service></servicedata>
 (No newline at EOF)
 

++++++ compose-2.14.1.tar.gz -> compose-2.14.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/build.go 
new/compose-2.14.2/cmd/compose/build.go
--- old/compose-2.14.1/cmd/compose/build.go     2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/build.go     2022-12-20 10:17:46.000000000 
+0100
@@ -34,7 +34,7 @@
 )
 
 type buildOptions struct {
-       *projectOptions
+       *ProjectOptions
        composeOptions
        quiet    bool
        pull     bool
@@ -73,9 +73,9 @@
        buildx.PrinterModeQuiet,
 }
 
-func buildCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func buildCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := buildOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "build [OPTIONS] [SERVICE...]",
@@ -129,7 +129,7 @@
 }
 
 func runBuild(ctx context.Context, backend api.Service, opts buildOptions, 
services []string) error {
-       project, err := opts.toProject(services, cli.WithResolvedPaths(true))
+       project, err := opts.ToProject(services, cli.WithResolvedPaths(true))
        if err != nil {
                return err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/completion.go 
new/compose-2.14.2/cmd/compose/completion.go
--- old/compose-2.14.1/cmd/compose/completion.go        2022-12-15 
16:26:19.000000000 +0100
+++ new/compose-2.14.2/cmd/compose/completion.go        2022-12-20 
10:17:46.000000000 +0100
@@ -32,9 +32,9 @@
        }
 }
 
-func completeServiceNames(p *projectOptions) validArgsFn {
+func completeServiceNames(p *ProjectOptions) validArgsFn {
        return func(cmd *cobra.Command, args []string, toComplete string) 
([]string, cobra.ShellCompDirective) {
-               project, err := p.toProject(nil)
+               project, err := p.ToProject(nil)
                if err != nil {
                        return nil, cobra.ShellCompDirectiveNoFileComp
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/compose.go 
new/compose-2.14.2/cmd/compose/compose.go
--- old/compose-2.14.1/cmd/compose/compose.go   2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/compose.go   2022-12-20 10:17:46.000000000 
+0100
@@ -91,7 +91,7 @@
        })
 }
 
-type projectOptions struct {
+type ProjectOptions struct {
        ProjectName   string
        Profiles      []string
        ConfigPaths   []string
@@ -108,16 +108,16 @@
 type ProjectServicesFunc func(ctx context.Context, project *types.Project, 
services []string) error
 
 // WithProject creates a cobra run command from a ProjectFunc based on 
configured project options and selected services
-func (o *projectOptions) WithProject(fn ProjectFunc) func(cmd *cobra.Command, 
args []string) error {
+func (o *ProjectOptions) WithProject(fn ProjectFunc) func(cmd *cobra.Command, 
args []string) error {
        return o.WithServices(func(ctx context.Context, project *types.Project, 
services []string) error {
                return fn(ctx, project)
        })
 }
 
 // WithServices creates a cobra run command from a ProjectFunc based on 
configured project options and selected services
-func (o *projectOptions) WithServices(fn ProjectServicesFunc) func(cmd 
*cobra.Command, args []string) error {
+func (o *ProjectOptions) WithServices(fn ProjectServicesFunc) func(cmd 
*cobra.Command, args []string) error {
        return Adapt(func(ctx context.Context, args []string) error {
-               project, err := o.toProject(args, cli.WithResolvedPaths(true))
+               project, err := o.ToProject(args, cli.WithResolvedPaths(true))
                if err != nil {
                        return err
                }
@@ -126,7 +126,7 @@
        })
 }
 
-func (o *projectOptions) addProjectFlags(f *pflag.FlagSet) {
+func (o *ProjectOptions) addProjectFlags(f *pflag.FlagSet) {
        f.StringArrayVar(&o.Profiles, "profile", []string{}, "Specify a profile 
to enable")
        f.StringVarP(&o.ProjectName, "project-name", "p", "", "Project name")
        f.StringArrayVarP(&o.ConfigPaths, "file", "f", []string{}, "Compose 
configuration files")
@@ -137,11 +137,11 @@
        _ = f.MarkHidden("workdir")
 }
 
-func (o *projectOptions) projectOrName(services ...string) (*types.Project, 
string, error) {
+func (o *ProjectOptions) projectOrName(services ...string) (*types.Project, 
string, error) {
        name := o.ProjectName
        var project *types.Project
        if len(o.ConfigPaths) > 0 || o.ProjectName == "" {
-               p, err := o.toProject(services)
+               p, err := o.ToProject(services)
                if err != nil {
                        envProjectName := os.Getenv("COMPOSE_PROJECT_NAME")
                        if envProjectName != "" {
@@ -155,7 +155,7 @@
        return project, name, nil
 }
 
-func (o *projectOptions) toProjectName() (string, error) {
+func (o *ProjectOptions) toProjectName() (string, error) {
        if o.ProjectName != "" {
                return o.ProjectName, nil
        }
@@ -165,14 +165,14 @@
                return envProjectName, nil
        }
 
-       project, err := o.toProject(nil)
+       project, err := o.ToProject(nil)
        if err != nil {
                return "", err
        }
        return project.Name, nil
 }
 
-func (o *projectOptions) toProject(services []string, po 
...cli.ProjectOptionsFn) (*types.Project, error) {
+func (o *ProjectOptions) ToProject(services []string, po 
...cli.ProjectOptionsFn) (*types.Project, error) {
        options, err := o.toProjectOptions(po...)
        if err != nil {
                return nil, compose.WrapComposeError(err)
@@ -222,7 +222,7 @@
        return project, err
 }
 
-func (o *projectOptions) toProjectOptions(po ...cli.ProjectOptionsFn) 
(*cli.ProjectOptions, error) {
+func (o *ProjectOptions) toProjectOptions(po ...cli.ProjectOptionsFn) 
(*cli.ProjectOptions, error) {
        return cli.NewProjectOptions(o.ConfigPaths,
                append(po,
                        cli.WithWorkingDirectory(o.ProjectDir),
@@ -254,7 +254,7 @@
                "commandConn.CloseRead:",
        ))
 
-       opts := projectOptions{}
+       opts := ProjectOptions{}
        var (
                ansi     string
                noAnsi   bool
@@ -383,7 +383,7 @@
        return c
 }
 
-func setEnvWithDotEnv(prjOpts *projectOptions) error {
+func setEnvWithDotEnv(prjOpts *ProjectOptions) error {
        options, err := prjOpts.toProjectOptions()
        if err != nil {
                return compose.WrapComposeError(err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/convert.go 
new/compose-2.14.2/cmd/compose/convert.go
--- old/compose-2.14.1/cmd/compose/convert.go   2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/convert.go   2022-12-20 10:17:46.000000000 
+0100
@@ -35,7 +35,7 @@
 )
 
 type convertOptions struct {
-       *projectOptions
+       *ProjectOptions
        Format              string
        Output              string
        quiet               bool
@@ -50,9 +50,9 @@
        noConsistency       bool
 }
 
-func convertCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func convertCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := convertOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Aliases: []string{"config"},
@@ -112,13 +112,12 @@
 
 func runConvert(ctx context.Context, backend api.Service, opts convertOptions, 
services []string) error {
        var content []byte
-       project, err := opts.toProject(services,
+       project, err := opts.ToProject(services,
                cli.WithInterpolation(!opts.noInterpolate),
                cli.WithResolvedPaths(true),
                cli.WithNormalization(!opts.noNormalize),
                cli.WithConsistency(!opts.noConsistency),
                cli.WithDiscardEnvFile)
-
        if err != nil {
                return err
        }
@@ -153,7 +152,7 @@
 }
 
 func runServices(opts convertOptions) error {
-       project, err := opts.toProject(nil)
+       project, err := opts.ToProject(nil)
        if err != nil {
                return err
        }
@@ -164,7 +163,7 @@
 }
 
 func runVolumes(opts convertOptions) error {
-       project, err := opts.toProject(nil)
+       project, err := opts.ToProject(nil)
        if err != nil {
                return err
        }
@@ -179,7 +178,7 @@
        if opts.hash != "*" {
                services = append(services, strings.Split(opts.hash, ",")...)
        }
-       project, err := opts.toProject(services)
+       project, err := opts.ToProject(services)
        if err != nil {
                return err
        }
@@ -195,7 +194,7 @@
 
 func runProfiles(opts convertOptions, services []string) error {
        set := map[string]struct{}{}
-       project, err := opts.toProject(services)
+       project, err := opts.ToProject(services)
        if err != nil {
                return err
        }
@@ -216,7 +215,7 @@
 }
 
 func runConfigImages(opts convertOptions, services []string) error {
-       project, err := opts.toProject(services)
+       project, err := opts.ToProject(services)
        if err != nil {
                return err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/cp.go 
new/compose-2.14.2/cmd/compose/cp.go
--- old/compose-2.14.1/cmd/compose/cp.go        2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/cp.go        2022-12-20 10:17:46.000000000 
+0100
@@ -27,7 +27,7 @@
 )
 
 type copyOptions struct {
-       *projectOptions
+       *ProjectOptions
 
        source      string
        destination string
@@ -37,9 +37,9 @@
        copyUIDGID  bool
 }
 
-func copyCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func copyCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := copyOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        copyCmd := &cobra.Command{
                Use: `cp [OPTIONS] SERVICE:SRC_PATH DEST_PATH|-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/create.go 
new/compose-2.14.2/cmd/compose/create.go
--- old/compose-2.14.1/cmd/compose/create.go    2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/create.go    2022-12-20 10:17:46.000000000 
+0100
@@ -43,7 +43,7 @@
        quietPull     bool
 }
 
-func createCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func createCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := createOptions{}
        cmd := &cobra.Command{
                Use:   "create [OPTIONS] [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/down.go 
new/compose-2.14.2/cmd/compose/down.go
--- old/compose-2.14.1/cmd/compose/down.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/down.go      2022-12-20 10:17:46.000000000 
+0100
@@ -31,7 +31,7 @@
 )
 
 type downOptions struct {
-       *projectOptions
+       *ProjectOptions
        removeOrphans bool
        timeChanged   bool
        timeout       int
@@ -39,9 +39,9 @@
        images        string
 }
 
-func downCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func downCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := downOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        downCmd := &cobra.Command{
                Use:   "down [OPTIONS]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/events.go 
new/compose-2.14.2/cmd/compose/events.go
--- old/compose-2.14.1/cmd/compose/events.go    2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/events.go    2022-12-20 10:17:46.000000000 
+0100
@@ -31,10 +31,10 @@
        json bool
 }
 
-func eventsCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func eventsCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := eventsOpts{
                composeOptions: &composeOptions{
-                       projectOptions: p,
+                       ProjectOptions: p,
                },
        }
        cmd := &cobra.Command{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/exec.go 
new/compose-2.14.2/cmd/compose/exec.go
--- old/compose-2.14.1/cmd/compose/exec.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/exec.go      2022-12-20 10:17:46.000000000 
+0100
@@ -43,10 +43,10 @@
        interactive bool
 }
 
-func execCommand(p *projectOptions, dockerCli command.Cli, backend 
api.Service) *cobra.Command {
+func execCommand(p *ProjectOptions, dockerCli command.Cli, backend 
api.Service) *cobra.Command {
        opts := execOpts{
                composeOptions: &composeOptions{
-                       projectOptions: p,
+                       ProjectOptions: p,
                },
        }
        runCmd := &cobra.Command{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/images.go 
new/compose-2.14.2/cmd/compose/images.go
--- old/compose-2.14.1/cmd/compose/images.go    2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/images.go    2022-12-20 10:17:46.000000000 
+0100
@@ -34,14 +34,14 @@
 )
 
 type imageOptions struct {
-       *projectOptions
+       *ProjectOptions
        Quiet  bool
        Format string
 }
 
-func imagesCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func imagesCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := imageOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        imgCmd := &cobra.Command{
                Use:   "images [OPTIONS] [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/kill.go 
new/compose-2.14.2/cmd/compose/kill.go
--- old/compose-2.14.1/cmd/compose/kill.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/kill.go      2022-12-20 10:17:46.000000000 
+0100
@@ -27,14 +27,14 @@
 )
 
 type killOptions struct {
-       *projectOptions
+       *ProjectOptions
        removeOrphans bool
        signal        string
 }
 
-func killCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func killCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := killOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "kill [OPTIONS] [SERVICE...]",
@@ -65,5 +65,4 @@
                Services:      services,
                Signal:        opts.signal,
        })
-
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/logs.go 
new/compose-2.14.2/cmd/compose/logs.go
--- old/compose-2.14.1/cmd/compose/logs.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/logs.go      2022-12-20 10:17:46.000000000 
+0100
@@ -27,7 +27,7 @@
 )
 
 type logsOptions struct {
-       *projectOptions
+       *ProjectOptions
        composeOptions
        follow     bool
        tail       string
@@ -38,9 +38,9 @@
        timestamps bool
 }
 
-func logsCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func logsCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := logsOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        logsCmd := &cobra.Command{
                Use:   "logs [OPTIONS] [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/pause.go 
new/compose-2.14.2/cmd/compose/pause.go
--- old/compose-2.14.1/cmd/compose/pause.go     2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/pause.go     2022-12-20 10:17:46.000000000 
+0100
@@ -25,12 +25,12 @@
 )
 
 type pauseOptions struct {
-       *projectOptions
+       *ProjectOptions
 }
 
-func pauseCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func pauseCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := pauseOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "pause [SERVICE...]",
@@ -56,12 +56,12 @@
 }
 
 type unpauseOptions struct {
-       *projectOptions
+       *ProjectOptions
 }
 
-func unpauseCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func unpauseCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := unpauseOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "unpause [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/port.go 
new/compose-2.14.2/cmd/compose/port.go
--- old/compose-2.14.1/cmd/compose/port.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/port.go      2022-12-20 10:17:46.000000000 
+0100
@@ -28,15 +28,15 @@
 )
 
 type portOptions struct {
-       *projectOptions
+       *ProjectOptions
        port     uint16
        protocol string
        index    int
 }
 
-func portCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func portCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := portOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "port [OPTIONS] SERVICE PRIVATE_PORT",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/ps.go 
new/compose-2.14.2/cmd/compose/ps.go
--- old/compose-2.14.1/cmd/compose/ps.go        2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/ps.go        2022-12-20 10:17:46.000000000 
+0100
@@ -39,7 +39,7 @@
 )
 
 type psOptions struct {
-       *projectOptions
+       *ProjectOptions
        Format   string
        All      bool
        Quiet    bool
@@ -67,9 +67,9 @@
        return nil
 }
 
-func psCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func psCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := psOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        psCmd := &cobra.Command{
                Use:   "ps [OPTIONS] [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/ps_test.go 
new/compose-2.14.2/cmd/compose/ps_test.go
--- old/compose-2.14.1/cmd/compose/ps_test.go   2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/ps_test.go   2022-12-20 10:17:46.000000000 
+0100
@@ -71,7 +71,7 @@
                        }, nil
                }).AnyTimes()
 
-       opts := psOptions{projectOptions: &projectOptions{ProjectName: "test"}}
+       opts := psOptions{ProjectOptions: &ProjectOptions{ProjectName: "test"}}
        err = runPs(ctx, backend, nil, opts)
        assert.NoError(t, err)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/pull.go 
new/compose-2.14.2/cmd/compose/pull.go
--- old/compose-2.14.1/cmd/compose/pull.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/pull.go      2022-12-20 10:17:46.000000000 
+0100
@@ -30,7 +30,7 @@
 )
 
 type pullOptions struct {
-       *projectOptions
+       *ProjectOptions
        composeOptions
        quiet              bool
        parallel           bool
@@ -39,9 +39,9 @@
        ignorePullFailures bool
 }
 
-func pullCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func pullCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := pullOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "pull [OPTIONS] [SERVICE...]",
@@ -84,7 +84,7 @@
 }
 
 func runPull(ctx context.Context, backend api.Service, opts pullOptions, 
services []string) error {
-       project, err := opts.toProject(services)
+       project, err := opts.ToProject(services)
        if err != nil {
                return err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/push.go 
new/compose-2.14.2/cmd/compose/push.go
--- old/compose-2.14.1/cmd/compose/push.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/push.go      2022-12-20 10:17:46.000000000 
+0100
@@ -25,16 +25,16 @@
 )
 
 type pushOptions struct {
-       *projectOptions
+       *ProjectOptions
        composeOptions
        IncludeDeps    bool
        Ignorefailures bool
        Quiet          bool
 }
 
-func pushCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func pushCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := pushOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        pushCmd := &cobra.Command{
                Use:   "push [OPTIONS] [SERVICE...]",
@@ -52,7 +52,7 @@
 }
 
 func runPush(ctx context.Context, backend api.Service, opts pushOptions, 
services []string) error {
-       project, err := opts.toProject(services)
+       project, err := opts.ToProject(services)
        if err != nil {
                return err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/remove.go 
new/compose-2.14.2/cmd/compose/remove.go
--- old/compose-2.14.1/cmd/compose/remove.go    2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/remove.go    2022-12-20 10:17:46.000000000 
+0100
@@ -24,15 +24,15 @@
 )
 
 type removeOptions struct {
-       *projectOptions
+       *ProjectOptions
        force   bool
        stop    bool
        volumes bool
 }
 
-func removeCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func removeCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := removeOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "rm [OPTIONS] [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/restart.go 
new/compose-2.14.2/cmd/compose/restart.go
--- old/compose-2.14.1/cmd/compose/restart.go   2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/restart.go   2022-12-20 10:17:46.000000000 
+0100
@@ -26,13 +26,13 @@
 )
 
 type restartOptions struct {
-       *projectOptions
+       *ProjectOptions
        timeout int
 }
 
-func restartCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func restartCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := restartOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        restartCmd := &cobra.Command{
                Use:   "restart [OPTIONS] [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/run.go 
new/compose-2.14.2/cmd/compose/run.go
--- old/compose-2.14.1/cmd/compose/run.go       2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/run.go       2022-12-20 10:17:46.000000000 
+0100
@@ -108,10 +108,10 @@
        return nil
 }
 
-func runCommand(p *projectOptions, dockerCli command.Cli, backend api.Service) 
*cobra.Command {
+func runCommand(p *ProjectOptions, dockerCli command.Cli, backend api.Service) 
*cobra.Command {
        opts := runOptions{
                composeOptions: &composeOptions{
-                       projectOptions: p,
+                       ProjectOptions: p,
                },
        }
        createOpts := createOptions{}
@@ -137,7 +137,7 @@
                        return nil
                }),
                RunE: Adapt(func(ctx context.Context, args []string) error {
-                       project, err := p.toProject([]string{opts.Service}, 
cgo.WithResolvedPaths(true))
+                       project, err := p.ToProject([]string{opts.Service}, 
cgo.WithResolvedPaths(true))
                        if err != nil {
                                return err
                        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/start.go 
new/compose-2.14.2/cmd/compose/start.go
--- old/compose-2.14.1/cmd/compose/start.go     2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/start.go     2022-12-20 10:17:46.000000000 
+0100
@@ -24,12 +24,12 @@
 )
 
 type startOptions struct {
-       *projectOptions
+       *ProjectOptions
 }
 
-func startCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func startCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := startOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        startCmd := &cobra.Command{
                Use:   "start [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/stop.go 
new/compose-2.14.2/cmd/compose/stop.go
--- old/compose-2.14.1/cmd/compose/stop.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/stop.go      2022-12-20 10:17:46.000000000 
+0100
@@ -26,14 +26,14 @@
 )
 
 type stopOptions struct {
-       *projectOptions
+       *ProjectOptions
        timeChanged bool
        timeout     int
 }
 
-func stopCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func stopCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := stopOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        cmd := &cobra.Command{
                Use:   "stop [OPTIONS] [SERVICE...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/top.go 
new/compose-2.14.2/cmd/compose/top.go
--- old/compose-2.14.1/cmd/compose/top.go       2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/top.go       2022-12-20 10:17:46.000000000 
+0100
@@ -31,12 +31,12 @@
 )
 
 type topOptions struct {
-       *projectOptions
+       *ProjectOptions
 }
 
-func topCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func topCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        opts := topOptions{
-               projectOptions: p,
+               ProjectOptions: p,
        }
        topCmd := &cobra.Command{
                Use:   "top [SERVICES...]",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/cmd/compose/up.go 
new/compose-2.14.2/cmd/compose/up.go
--- old/compose-2.14.1/cmd/compose/up.go        2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/cmd/compose/up.go        2022-12-20 10:17:46.000000000 
+0100
@@ -34,7 +34,7 @@
 
 // composeOptions hold options common to `up` and `run` to run compose project
 type composeOptions struct {
-       *projectOptions
+       *ProjectOptions
 }
 
 type upOptions struct {
@@ -87,7 +87,7 @@
        return nil
 }
 
-func upCommand(p *projectOptions, backend api.Service) *cobra.Command {
+func upCommand(p *ProjectOptions, backend api.Service) *cobra.Command {
        up := upOptions{}
        create := createOptions{}
        upCmd := &cobra.Command{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/go.mod new/compose-2.14.2/go.mod
--- old/compose-2.14.1/go.mod   2022-12-15 16:26:19.000000000 +0100
+++ new/compose-2.14.2/go.mod   2022-12-20 10:17:46.000000000 +0100
@@ -7,7 +7,7 @@
        github.com/buger/goterm v1.0.4
        github.com/compose-spec/compose-go v1.8.0
        github.com/containerd/console v1.0.3
-       github.com/containerd/containerd v1.6.12
+       github.com/containerd/containerd v1.6.14
        github.com/distribution/distribution/v3 
v3.0.0-20221201083218-92d136e113cf
        github.com/docker/buildx v0.9.1 // when updating, also update the 
replace rules accordingly
        github.com/docker/cli v20.10.20+incompatible // replaced; see replace 
rule for actual version
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/go.sum new/compose-2.14.2/go.sum
--- old/compose-2.14.1/go.sum   2022-12-15 16:26:19.000000000 +0100
+++ new/compose-2.14.2/go.sum   2022-12-20 10:17:46.000000000 +0100
@@ -51,7 +51,7 @@
 github.com/GeertJohan/go.rice v1.0.0/go.mod 
h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtixis4Tib9if0=
 github.com/Microsoft/go-winio v0.5.2 
h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA=
 github.com/Microsoft/go-winio v0.5.2/go.mod 
h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
-github.com/Microsoft/hcsshim v0.9.5 
h1:AbV+VPfTrIVffukazHcpxmz/sRiE6YaMDzHWR9BXZHo=
+github.com/Microsoft/hcsshim v0.9.6 
h1:VwnDOgLeoi2du6dAznfmspNqTiwczvjv4K7NxuY9jsY=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod 
h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 
h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s=
 github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod 
h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w=
@@ -117,11 +117,11 @@
 github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod 
h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
 github.com/compose-spec/compose-go v1.8.0 
h1:fD2b8YDZVcSicKM0EEXsUdy+97PKza6+bjuXfSloNdM=
 github.com/compose-spec/compose-go v1.8.0/go.mod 
h1:Tb5Ae2PsYN3GTqYqzl2IRbTPiJtPZZjMw8UKUvmehFk=
-github.com/containerd/cgroups v1.0.3 
h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4=
+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=
-github.com/containerd/containerd v1.6.12 
h1:kJ9b3mOFKf8yqo05Ob+tMoxvt1pbVWhnB0re9Y+k+8c=
-github.com/containerd/containerd v1.6.12/go.mod 
h1:K4Bw7gjgh4TnkmQY+py/PYQGp4e7xgnHAeg87VeWb3A=
+github.com/containerd/containerd v1.6.14 
h1:W+d0AJKVG3ioTZZyQwcw1Y3vvo6ZDYzAcjDcY4tkgGI=
+github.com/containerd/containerd v1.6.14/go.mod 
h1:U2NnBPIhzJDm59xF7xB2MMHnKtggpZ+phKg8o2TKj2c=
 github.com/containerd/continuity v0.3.0 
h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg=
 github.com/containerd/continuity v0.3.0/go.mod 
h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM=
 github.com/containerd/fifo v1.0.0 
h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/convergence.go 
new/compose-2.14.2/pkg/compose/convergence.go
--- old/compose-2.14.1/pkg/compose/convergence.go       2022-12-15 
16:26:19.000000000 +0100
+++ new/compose-2.14.2/pkg/compose/convergence.go       2022-12-20 
10:17:46.000000000 +0100
@@ -31,6 +31,7 @@
        "github.com/docker/docker/api/types/filters"
        "github.com/docker/docker/api/types/network"
        specs "github.com/opencontainers/image-spec/specs-go/v1"
+       "github.com/pkg/errors"
        "github.com/sirupsen/logrus"
        "golang.org/x/sync/errgroup"
 
@@ -277,7 +278,7 @@
        return events
 }
 
-// ServiceConditionRunningOrHealthy is a service condition on statys running 
or healthy
+// ServiceConditionRunningOrHealthy is a service condition on status running 
or healthy
 const ServiceConditionRunningOrHealthy = "running_or_healthy"
 
 func (s *composeService) waitDependencies(ctx context.Context, project 
*types.Project, dependencies types.DependsOnConfig) error {
@@ -315,7 +316,8 @@
                                case types.ServiceConditionHealthy:
                                        healthy, err := s.isServiceHealthy(ctx, 
project, dep, false)
                                        if err != nil {
-                                               return err
+                                               
w.Events(containerEvents(containers, progress.ErrorEvent))
+                                               return errors.Wrap(err, 
"dependency failed to start")
                                        }
                                        if healthy {
                                                
w.Events(containerEvents(containers, progress.Healthy))
@@ -479,10 +481,14 @@
        if err != nil {
                return created, err
        }
+       platform := service.Platform
+       if platform == "" {
+               platform = project.Environment["DOCKER_DEFAULT_PLATFORM"]
+       }
        var plat *specs.Platform
-       if service.Platform != "" {
+       if platform != "" {
                var p specs.Platform
-               p, err = platforms.Parse(service.Platform)
+               p, err = platforms.Parse(platform)
                if err != nil {
                        return created, err
                }
@@ -640,7 +646,7 @@
 }
 
 func (s *composeService) isServiceHealthy(ctx context.Context, project 
*types.Project, service string, fallbackRunning bool) (bool, error) {
-       containers, err := s.getContainers(ctx, project.Name, oneOffExclude, 
false, service)
+       containers, err := s.getContainers(ctx, project.Name, oneOffExclude, 
true, service)
        if err != nil {
                return false, err
        }
@@ -658,6 +664,10 @@
                        return container.State != nil && container.State.Status 
== "running", nil
                }
 
+               if container.State.Status == "exited" {
+                       return false, fmt.Errorf("container for service %q 
exited (%d)", service, container.State.ExitCode)
+               }
+
                if container.State == nil || container.State.Health == nil {
                        return false, fmt.Errorf("container for service %q has 
no healthcheck configured", service)
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/create.go 
new/compose-2.14.2/pkg/compose/create.go
--- old/compose-2.14.1/pkg/compose/create.go    2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/compose/create.go    2022-12-20 10:17:46.000000000 
+0100
@@ -260,7 +260,7 @@
                stdinOpen = service.StdinOpen
        )
 
-       volumeMounts, binds, mounts, err := s.buildContainerVolumes(ctx, *p, 
service, inherit)
+       binds, mounts, err := s.buildContainerVolumes(ctx, *p, service, inherit)
        if err != nil {
                return nil, nil, nil, err
        }
@@ -289,7 +289,6 @@
                StopSignal:      service.StopSignal,
                Env:             ToMobyEnv(env),
                Healthcheck:     ToMobyHealthCheck(service.HealthCheck),
-               Volumes:         volumeMounts,
                StopTimeout:     ToSeconds(service.StopGracePeriod),
        }
 
@@ -530,7 +529,8 @@
                CPURealtimePeriod:  s.CPURTPeriod,
                CPURealtimeRuntime: s.CPURTRuntime,
                CPUShares:          s.CPUShares,
-               CPUPercent:         int64(s.CPUS * 100),
+               NanoCPUs:           int64(s.CPUS * 1e9),
+               CPUPercent:         int64(s.CPUPercent * 100),
                CpusetCpus:         s.CPUSet,
                DeviceCgroupRules:  s.DeviceCgroupRules,
        }
@@ -731,30 +731,32 @@
        return ""
 }
 
-func (s *composeService) buildContainerVolumes(ctx context.Context, p 
types.Project, service types.ServiceConfig,
-       inherit *moby.Container) (map[string]struct{}, []string, []mount.Mount, 
error) {
-       var mounts = []mount.Mount{}
+func (s *composeService) buildContainerVolumes(
+       ctx context.Context,
+       p types.Project,
+       service types.ServiceConfig,
+       inherit *moby.Container,
+) ([]string, []mount.Mount, error) {
+       var mounts []mount.Mount
+       var binds []string
 
        image := api.GetImageNameOrDefault(service, p.Name)
        imgInspect, _, err := s.apiClient().ImageInspectWithRaw(ctx, image)
        if err != nil {
-               return nil, nil, nil, err
+               return nil, nil, err
        }
 
        mountOptions, err := buildContainerMountOptions(p, service, imgInspect, 
inherit)
        if err != nil {
-               return nil, nil, nil, err
+               return nil, nil, err
        }
 
-       volumeMounts := map[string]struct{}{}
-       binds := []string{}
 MOUNTS:
        for _, m := range mountOptions {
                if m.Type == mount.TypeNamedPipe {
                        mounts = append(mounts, m)
                        continue
                }
-               volumeMounts[m.Target] = struct{}{}
                if m.Type == mount.TypeBind {
                        // `Mount` is preferred but does not offer option to 
created host path if missing
                        // so `Bind` API is used here with raw volume string
@@ -774,7 +776,7 @@
                }
                mounts = append(mounts, m)
        }
-       return volumeMounts, binds, mounts, nil
+       return binds, mounts, nil
 }
 
 func buildContainerMountOptions(p types.Project, s types.ServiceConfig, img 
moby.ImageInspect, inherit *moby.Container) ([]mount.Mount, error) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/logs.go 
new/compose-2.14.2/pkg/compose/logs.go
--- old/compose-2.14.1/pkg/compose/logs.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/compose/logs.go      2022-12-20 10:17:46.000000000 
+0100
@@ -65,6 +65,11 @@
 
        if options.Follow {
                printer := newLogPrinter(consumer)
+               eg.Go(func() error {
+                       _, err := printer.Run(false, "", nil)
+                       return err
+               })
+
                for _, c := range containers {
                        printer.HandleEvent(api.ContainerEvent{
                                Type:      api.ContainerEventAttach,
@@ -74,7 +79,7 @@
                }
 
                eg.Go(func() error {
-                       return s.watchContainers(ctx, projectName, 
options.Services, nil, printer.HandleEvent, containers, func(c types.Container) 
error {
+                       err := s.watchContainers(ctx, projectName, 
options.Services, nil, printer.HandleEvent, containers, func(c types.Container) 
error {
                                printer.HandleEvent(api.ContainerEvent{
                                        Type:      api.ContainerEventAttach,
                                        Container: 
getContainerNameWithoutProject(c),
@@ -82,10 +87,7 @@
                                })
                                return s.logContainers(ctx, consumer, c, 
options)
                        })
-               })
-
-               eg.Go(func() error {
-                       _, err := printer.Run(ctx, false, "", nil)
+                       printer.Stop()
                        return err
                })
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/printer.go 
new/compose-2.14.2/pkg/compose/printer.go
--- old/compose-2.14.1/pkg/compose/printer.go   2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/compose/printer.go   2022-12-20 10:17:46.000000000 
+0100
@@ -17,7 +17,6 @@
 package compose
 
 import (
-       "context"
        "fmt"
 
        "github.com/docker/compose/v2/pkg/api"
@@ -26,7 +25,7 @@
 // logPrinter watch application containers an collect their logs
 type logPrinter interface {
        HandleEvent(event api.ContainerEvent)
-       Run(ctx context.Context, cascadeStop bool, exitCodeFrom string, stopFn 
func() error) (int, error)
+       Run(cascadeStop bool, exitCodeFrom string, stopFn func() error) (int, 
error)
        Cancel()
        Stop()
 }
@@ -64,7 +63,7 @@
 }
 
 //nolint:gocyclo
-func (p *printer) Run(ctx context.Context, cascadeStop bool, exitCodeFrom 
string, stopFn func() error) (int, error) {
+func (p *printer) Run(cascadeStop bool, exitCodeFrom string, stopFn func() 
error) (int, error) {
        var (
                aborting bool
                exitCode int
@@ -74,8 +73,6 @@
                select {
                case <-p.stopCh:
                        return exitCode, nil
-               case <-ctx.Done():
-                       return exitCode, ctx.Err()
                case event := <-p.queue:
                        container := event.Container
                        switch event.Type {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/ps.go 
new/compose-2.14.2/pkg/compose/ps.go
--- old/compose-2.14.1/pkg/compose/ps.go        2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/compose/ps.go        2022-12-20 10:17:46.000000000 
+0100
@@ -32,7 +32,7 @@
        if options.All {
                oneOff = oneOffInclude
        }
-       containers, err := s.getContainers(ctx, projectName, oneOff, true, 
options.Services...)
+       containers, err := s.getContainers(ctx, projectName, oneOff, 
options.All, options.Services...)
        if err != nil {
                return nil, err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/ps_test.go 
new/compose-2.14.2/pkg/compose/ps_test.go
--- old/compose-2.14.1/pkg/compose/ps_test.go   2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/compose/ps_test.go   2022-12-20 10:17:46.000000000 
+0100
@@ -46,7 +46,7 @@
        ctx := context.Background()
        args := filters.NewArgs(projectFilter(strings.ToLower(testProject)))
        args.Add("label", "com.docker.compose.oneoff=False")
-       listOpts := moby.ContainerListOptions{Filters: args, All: true}
+       listOpts := moby.ContainerListOptions{Filters: args, All: false}
        c1, inspect1 := containerDetails("service1", "123", "running", 
"healthy", 0)
        c2, inspect2 := containerDetails("service1", "456", "running", "", 0)
        c2.Ports = []moby.Port{{PublicPort: 80, PrivatePort: 90, IP: 
"localhost"}}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/pull.go 
new/compose-2.14.2/pkg/compose/pull.go
--- old/compose-2.14.1/pkg/compose/pull.go      2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/compose/pull.go      2022-12-20 10:17:46.000000000 
+0100
@@ -47,7 +47,7 @@
        })
 }
 
-func (s *composeService) pull(ctx context.Context, project *types.Project, 
opts api.PullOptions) error {
+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
@@ -117,12 +117,12 @@
                        _, err := s.pullServiceImage(ctx, service, info, 
s.configFile(), w, false, project.Environment["DOCKER_DEFAULT_PLATFORM"])
                        if err != nil {
                                pullErrors[i] = err
-                               if !opts.IgnoreFailures {
-                                       if service.Build != nil {
-                                               mustBuild = append(mustBuild, 
service.Name)
-                                       } else {
-                                               return err // fail fast if 
image can't be pulled nor built
-                                       }
+                               if service.Build != nil {
+                                       mustBuild = append(mustBuild, 
service.Name)
+                               }
+                               if !opts.IgnoreFailures && service.Build == nil 
{
+                                       // fail fast if image can't be pulled 
nor built
+                                       return err
                                }
                        }
                        return nil
@@ -131,14 +131,16 @@
 
        err = eg.Wait()
 
-       if !opts.IgnoreFailures && len(mustBuild) > 0 {
+       if len(mustBuild) > 0 {
                w.TailMsgf("WARNING: Some service image(s) must be built from 
source by running:\n    docker compose build %s", strings.Join(mustBuild, " "))
        }
 
        if err != nil {
                return err
        }
-
+       if opts.IgnoreFailures {
+               return nil
+       }
        return multierror.Append(nil, pullErrors...).ErrorOrNil()
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/compose/up.go 
new/compose-2.14.2/pkg/compose/up.go
--- old/compose-2.14.1/pkg/compose/up.go        2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/compose/up.go        2022-12-20 10:17:46.000000000 
+0100
@@ -81,7 +81,7 @@
        var exitCode int
        eg, ctx := errgroup.WithContext(ctx)
        eg.Go(func() error {
-               code, err := printer.Run(context.Background(), 
options.Start.CascadeStop, options.Start.ExitCodeFrom, stopFunc)
+               code, err := printer.Run(options.Start.CascadeStop, 
options.Start.ExitCodeFrom, stopFunc)
                exitCode = code
                return err
        })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/duplicate-images/compose.yaml 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/duplicate-images/compose.yaml
--- 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/duplicate-images/compose.yaml  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/duplicate-images/compose.yaml  
    2022-12-20 10:17:46.000000000 +0100
@@ -0,0 +1,7 @@
+services:
+  simple:
+    image: alpine:3.13
+    command: top
+  another:
+    image: alpine:3.13
+    command: top
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/duplicate-images/docker-compose.yaml
 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/duplicate-images/docker-compose.yaml
--- 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/duplicate-images/docker-compose.yaml
       2022-12-15 16:26:19.000000000 +0100
+++ 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/duplicate-images/docker-compose.yaml
       1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-services:
-  simple:
-    image: alpine:3.13
-    command: top
-  another:
-    image: alpine:3.13
-    command: top
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/image-present-locally/compose.yaml
 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/image-present-locally/compose.yaml
--- 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/image-present-locally/compose.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/image-present-locally/compose.yaml
 2022-12-20 10:17:46.000000000 +0100
@@ -0,0 +1,9 @@
+services:
+  simple:
+    image: alpine:3.13.12
+    pull_policy: missing
+    command: top
+  latest:
+    image: alpine:latest
+    pull_policy: missing
+    command: top
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/image-present-locally/docker-compose.yaml
 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/image-present-locally/docker-compose.yaml
--- 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/image-present-locally/docker-compose.yaml
  2022-12-15 16:26:19.000000000 +0100
+++ 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/image-present-locally/docker-compose.yaml
  1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-services:
-  simple:
-    image: alpine:3.13.12
-    pull_policy: missing
-    command: top
-  latest:
-    image: alpine:latest
-    pull_policy: missing
-    command: top
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/no-image-name-given/compose.yaml
 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/no-image-name-given/compose.yaml
--- 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/no-image-name-given/compose.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/no-image-name-given/compose.yaml
   2022-12-20 10:17:46.000000000 +0100
@@ -0,0 +1,3 @@
+services:
+  no-image-service:
+    build: .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/no-image-name-given/docker-compose.yaml
 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/no-image-name-given/docker-compose.yaml
--- 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/no-image-name-given/docker-compose.yaml
    2022-12-15 16:26:19.000000000 +0100
+++ 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/no-image-name-given/docker-compose.yaml
    1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-services:
-  no-image-service:
-    build: .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/simple/compose.yaml 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/simple/compose.yaml
--- old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/simple/compose.yaml        
1970-01-01 01:00:00.000000000 +0100
+++ new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/simple/compose.yaml        
2022-12-20 10:17:46.000000000 +0100
@@ -0,0 +1,7 @@
+services:
+  simple:
+    image: alpine:3.14
+    command: top
+  another:
+    image: alpine:3.15
+    command: top
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/simple/docker-compose.yaml 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/simple/docker-compose.yaml
--- old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/simple/docker-compose.yaml 
2022-12-15 16:26:19.000000000 +0100
+++ new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/simple/docker-compose.yaml 
1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-services:
-  simple:
-    image: alpine:3.14
-    command: top
-  another:
-    image: alpine:3.15
-    command: top
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/unknown-image/Dockerfile 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/unknown-image/Dockerfile
--- old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/unknown-image/Dockerfile   
1970-01-01 01:00:00.000000000 +0100
+++ new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/unknown-image/Dockerfile   
2022-12-20 10:17:46.000000000 +0100
@@ -0,0 +1,16 @@
+#   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.
+
+FROM alpine:3.15
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/unknown-image/compose.yaml 
new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/unknown-image/compose.yaml
--- old/compose-2.14.1/pkg/e2e/fixtures/compose-pull/unknown-image/compose.yaml 
1970-01-01 01:00:00.000000000 +0100
+++ new/compose-2.14.2/pkg/e2e/fixtures/compose-pull/unknown-image/compose.yaml 
2022-12-20 10:17:46.000000000 +0100
@@ -0,0 +1,9 @@
+services:
+  fail:
+    image: does_not_exists
+  can_build:
+    image: doesn_t_exists_either
+    build: .
+  valid:
+    image: alpine:3.15
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compose-2.14.1/pkg/e2e/fixtures/dependencies/dependency-exit.yaml 
new/compose-2.14.2/pkg/e2e/fixtures/dependencies/dependency-exit.yaml
--- old/compose-2.14.1/pkg/e2e/fixtures/dependencies/dependency-exit.yaml       
1970-01-01 01:00:00.000000000 +0100
+++ new/compose-2.14.2/pkg/e2e/fixtures/dependencies/dependency-exit.yaml       
2022-12-20 10:17:46.000000000 +0100
@@ -0,0 +1,10 @@
+services:
+  web:
+    image: nginx:alpine
+    depends_on:
+      db:
+        condition: service_healthy
+  db:
+    image: alpine
+    command: sh -c "exit 1"
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/e2e/ps_test.go 
new/compose-2.14.2/pkg/e2e/ps_test.go
--- old/compose-2.14.1/pkg/e2e/ps_test.go       2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/e2e/ps_test.go       2022-12-20 10:17:46.000000000 
+0100
@@ -94,4 +94,18 @@
                }
                assert.Equal(t, 2, count, "Did not match both 
services:\n"+res.Combined())
        })
+
+       t.Run("ps --all", func(t *testing.T) {
+               res := c.RunDockerComposeCmd(t, "--project-name", projectName, 
"stop")
+               assert.NoError(t, res.Error)
+
+               res = c.RunDockerComposeCmd(t, "-f", 
"./fixtures/ps-test/compose.yaml", "--project-name", projectName, "ps")
+               lines := strings.Split(res.Stdout(), "\n")
+               assert.Equal(t, 2, len(lines))
+
+               res = c.RunDockerComposeCmd(t, "-f", 
"./fixtures/ps-test/compose.yaml", "--project-name", projectName, "ps", "--all")
+               lines = strings.Split(res.Stdout(), "\n")
+               assert.Equal(t, 4, len(lines))
+       })
+
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/e2e/pull_test.go 
new/compose-2.14.2/pkg/e2e/pull_test.go
--- old/compose-2.14.1/pkg/e2e/pull_test.go     2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/e2e/pull_test.go     2022-12-20 10:17:46.000000000 
+0100
@@ -21,6 +21,7 @@
        "testing"
 
        "gotest.tools/v3/assert"
+       "gotest.tools/v3/icmd"
 )
 
 func TestComposePull(t *testing.T) {
@@ -78,4 +79,15 @@
 
                assert.Assert(t, strings.Contains(output, "Skipped - No image 
to be pulled"))
        })
+
+       t.Run("Verify pull failure", func(t *testing.T) {
+               res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", 
"fixtures/compose-pull/unknown-image", "pull")
+               res.Assert(t, icmd.Expected{ExitCode: 18, Err: "pull access 
denied for does_not_exists"})
+       })
+
+       t.Run("Verify ignore pull failure", func(t *testing.T) {
+               res := c.RunDockerComposeCmd(t, "--project-directory", 
"fixtures/compose-pull/unknown-image", "pull", "--ignore-pull-failures")
+               res.Assert(t, icmd.Expected{Err: "Some service image(s) must be 
built from source by running:"})
+       })
+
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compose-2.14.1/pkg/e2e/up_test.go 
new/compose-2.14.2/pkg/e2e/up_test.go
--- old/compose-2.14.1/pkg/e2e/up_test.go       2022-12-15 16:26:19.000000000 
+0100
+++ new/compose-2.14.2/pkg/e2e/up_test.go       2022-12-20 10:17:46.000000000 
+0100
@@ -123,3 +123,18 @@
                res.Assert(t, icmd.Success)
        })
 }
+
+func TestUpWithDependencyExit(t *testing.T) {
+       c := NewParallelCLI(t)
+
+       t.Run("up with dependency to exit before being healthy", func(t 
*testing.T) {
+               res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", 
"fixtures/dependencies",
+                       "-f", "fixtures/dependencies/dependency-exit.yaml", 
"up", "-d")
+
+               t.Cleanup(func() {
+                       c.RunDockerComposeCmd(t, "--project-name", 
"dependencies", "down")
+               })
+
+               res.Assert(t, icmd.Expected{ExitCode: 1, Err: "dependency 
failed to start: container for service \"db\" exited (1)"})
+       })
+}

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/docker-compose/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.docker-compose.new.1835/vendor.tar.gz differ: char 
5, line 1

Reply via email to