Merge pull request #9794 from laurazard/fix-exitcode-stop-event

Correctly capture exit code when service has dependencies
This commit is contained in:
Laura Brehm 2022-08-29 16:26:30 +02:00 committed by GitHub
commit 1a7c1dfe7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 5 deletions

View File

@ -93,6 +93,7 @@ func (p *printer) Run(ctx context.Context, cascadeStop bool, exitCodeFrom string
return 0, err return 0, err
} }
} }
if event.Type == api.ContainerEventExit {
if exitCodeFrom == "" { if exitCodeFrom == "" {
exitCodeFrom = event.Service exitCodeFrom = event.Service
} }
@ -100,6 +101,7 @@ func (p *printer) Run(ctx context.Context, cascadeStop bool, exitCodeFrom string
exitCode = event.ExitCode exitCode = event.ExitCode
} }
} }
}
if len(containers) == 0 { if len(containers) == 0 {
// Last container terminated, done // Last container terminated, done
return exitCode, nil return exitCode, nil

View File

@ -22,6 +22,7 @@ import (
"time" "time"
"gotest.tools/v3/assert" "gotest.tools/v3/assert"
"gotest.tools/v3/icmd"
) )
func TestUpWait(t *testing.T) { func TestUpWait(t *testing.T) {
@ -45,3 +46,13 @@ func TestUpWait(t *testing.T) {
c.RunDockerComposeCmd(t, "--project-name", projectName, "down") c.RunDockerComposeCmd(t, "--project-name", projectName, "down")
} }
func TestUpExitCodeFrom(t *testing.T) {
c := NewParallelCLI(t)
const projectName = "e2e-exit-code-from"
res := c.RunDockerComposeCmdNoCheck(t, "-f", "fixtures/start-fail/start-depends_on-long-lived.yaml", "--project-name", projectName, "up", "--exit-code-from=test")
res.Assert(t, icmd.Expected{ExitCode: 137})
c.RunDockerComposeCmd(t, "--project-name", projectName, "down", "--remove-orphans")
}

View File

@ -0,0 +1,11 @@
services:
safe:
image: 'alpine'
command: ['/bin/sh', '-c', 'sleep infinity'] # never exiting
failure:
image: 'alpine'
command: ['/bin/sh', '-c', 'sleep 2 ; echo "exiting" ; exit 42']
test:
image: 'alpine'
command: ['/bin/sh', '-c', 'sleep 99999 ; echo "tests are OK"'] # very long job
depends_on: [safe]