diff --git a/compose.go b/compose.go index dc562b7fbe..96128f2224 100644 --- a/compose.go +++ b/compose.go @@ -18,6 +18,7 @@ const ( // DockerCompose defines the contract for running Docker Compose type DockerCompose interface { + Down() execError Invoke() execError WithCommand([]string) DockerCompose WithEnv(map[string]string) DockerCompose @@ -48,6 +49,31 @@ func NewLocalDockerCompose(filePath string, identifier string) *LocalDockerCompo return dc } +// Down executes docker-compose down +func (dc *LocalDockerCompose) Down() execError { + if which(dc.Executable) != nil { + panic("Local Docker Compose not found. Is " + dc.Executable + " on the PATH?") + } + + abs, err := filepath.Abs(dc.ComposeFilePath) + pwd, name := filepath.Split(abs) + + cmds := []string{ + "-f", name, "down", + } + + execErr := execute(pwd, map[string]string{}, dc.Executable, cmds) + err = execErr.Error + if err != nil { + args := strings.Join(dc.Cmd, " ") + panic( + "Local Docker compose exited abnormally whilst running " + + dc.Executable + ": [" + args + "]. " + err.Error()) + } + + return execErr +} + // Invoke invokes the docker compose func (dc *LocalDockerCompose) Invoke() execError { if which(dc.Executable) != nil { diff --git a/compose_test.go b/compose_test.go index b4763a82b2..bab79059c8 100644 --- a/compose_test.go +++ b/compose_test.go @@ -15,9 +15,7 @@ func TestLocalDockerCompose(t *testing.T) { checkIfError(t, err) destroyFn := func() { - compose.WithCommand([]string{"down"}) - - err := compose.Invoke() + err := compose.Down() checkIfError(t, err) } defer destroyFn()