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