Skip to content

Commit 87abe53

Browse files
authored
Merge pull request #3299 from dgageot/improve-err-output
Improve error output when kompose fails
2 parents ea3ff6d + d2ae2e8 commit 87abe53

File tree

3 files changed

+58
-6
lines changed

3 files changed

+58
-6
lines changed

pkg/skaffold/initializer/init.go

+14-5
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,8 @@ func DoInit(ctx context.Context, out io.Writer, c Config) error {
117117
rootDir := "."
118118

119119
if c.ComposeFile != "" {
120-
// run kompose first to generate k8s manifests, then run skaffold init
121-
logrus.Infof("running 'kompose convert' for file %s", c.ComposeFile)
122-
komposeCmd := exec.CommandContext(ctx, "kompose", "convert", "-f", c.ComposeFile)
123-
if err := util.RunCmd(komposeCmd); err != nil {
124-
return errors.Wrap(err, "running kompose")
120+
if err := runKompose(ctx, c.ComposeFile); err != nil {
121+
return err
125122
}
126123
}
127124

@@ -228,6 +225,18 @@ func DoInit(ctx context.Context, out io.Writer, c Config) error {
228225
return nil
229226
}
230227

228+
// runKompose runs the `kompose` CLI before running skaffold init
229+
func runKompose(ctx context.Context, composeFile string) error {
230+
if _, err := os.Stat(composeFile); os.IsNotExist(err) {
231+
return err
232+
}
233+
234+
logrus.Infof("running 'kompose convert' for file %s", composeFile)
235+
komposeCmd := exec.CommandContext(ctx, "kompose", "convert", "-f", composeFile)
236+
_, err := util.RunCmdOut(komposeCmd)
237+
return err
238+
}
239+
231240
// autoSelectBuilders takes a list of builders and images, checks if any of the builders' configured target
232241
// images match an image in the image list, and returns a list of the matching builder/image pairs. Also
233242
// separately returns the builder configs and images that didn't have any matches.

pkg/skaffold/initializer/init_test.go

+43
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,15 @@ package initializer
1818

1919
import (
2020
"bytes"
21+
"context"
2122
"strings"
2223
"testing"
2324

25+
"github.com/pkg/errors"
26+
2427
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker"
2528
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/jib"
29+
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
2630
"github.com/GoogleContainerTools/skaffold/testutil"
2731
)
2832

@@ -612,3 +616,42 @@ func Test_canonicalizeName(t *testing.T) {
612616
})
613617
}
614618
}
619+
620+
func TestRunKompose(t *testing.T) {
621+
tests := []struct {
622+
description string
623+
composeFile string
624+
commands util.Command
625+
expectedError string
626+
}{
627+
{
628+
description: "success",
629+
composeFile: "docker-compose.yaml",
630+
commands: testutil.CmdRunOut("kompose convert -f docker-compose.yaml", ""),
631+
},
632+
{
633+
description: "not found",
634+
composeFile: "not-found.yaml",
635+
expectedError: "(no such file or directory|cannot find the file specified)",
636+
},
637+
{
638+
description: "failure",
639+
composeFile: "docker-compose.yaml",
640+
commands: testutil.CmdRunOutErr("kompose convert -f docker-compose.yaml", "", errors.New("BUG")),
641+
expectedError: "BUG",
642+
},
643+
}
644+
645+
for _, test := range tests {
646+
testutil.Run(t, test.description, func(t *testutil.T) {
647+
t.NewTempDir().Touch("docker-compose.yaml").Chdir()
648+
t.Override(&util.DefaultExecCommand, test.commands)
649+
650+
err := runKompose(context.Background(), test.composeFile)
651+
652+
if test.expectedError != "" {
653+
t.CheckMatches(test.expectedError, err.Error())
654+
}
655+
})
656+
}
657+
}

pkg/skaffold/util/cmd.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (*Commander) RunCmdOut(cmd *exec.Cmd) ([]byte, error) {
7474

7575
err = cmd.Wait()
7676
if err != nil {
77-
return stdout, errors.Wrapf(err, "Running %s: stdout %s, stderr: %s, err: %v", cmd.Args, stdout, stderr, err)
77+
return stdout, errors.Wrapf(err, "Running %s\n - stdout: %s\n - stderr: %s", cmd.Args, stdout, stderr)
7878
}
7979

8080
if len(stderr) > 0 {

0 commit comments

Comments
 (0)