diff --git a/cmd/skaffold/app/cmd/docker/deps.go b/cmd/skaffold/app/cmd/docker/deps.go index b8a7fbc1a8c..db66ca6229c 100644 --- a/cmd/skaffold/app/cmd/docker/deps.go +++ b/cmd/skaffold/app/cmd/docker/deps.go @@ -19,7 +19,6 @@ package docker import ( "io" "path/filepath" - "strings" cmdutil "github.com/GoogleContainerTools/skaffold/cmd/skaffold/app/cmd/util" "github.com/GoogleContainerTools/skaffold/cmd/skaffold/app/flags" @@ -63,7 +62,7 @@ func runDeps(out io.Writer, filename, dockerfile, context string) error { return errors.Wrap(err, "parsing skaffold config") } // normalize the provided dockerfile path WRT to the context - normalizedPath, err := normalizeDockerfilePath(dockerfile, context) + normalizedPath, err := docker.NormalizeDockerfilePath(context, dockerfile) if err != nil { return errors.Wrap(err, "normalizing dockerfile path") } @@ -79,22 +78,13 @@ func runDeps(out io.Writer, filename, dockerfile, context string) error { return nil } -func normalizeDockerfilePath(dockerfile, context string) (string, error) { - if !filepath.IsAbs(dockerfile) { - if !strings.HasPrefix(dockerfile, context) { - dockerfile = filepath.Join(context, dockerfile) - } - } - return filepath.Abs(dockerfile) -} - func getBuildArgsForDockerfile(config *config.SkaffoldConfig, dockerfile string) map[string]*string { var err error for _, artifact := range config.Build.Artifacts { if artifact.DockerArtifact != nil { artifactPath := artifact.DockerArtifact.DockerfilePath if artifact.Workspace != "" { - artifactPath, err = normalizeDockerfilePath(artifactPath, artifact.Workspace) + artifactPath, err = docker.NormalizeDockerfilePath(artifact.Workspace, artifactPath) if err != nil { logrus.Warnf("normalizing artifact dockerfile path: %s\n", err.Error()) } diff --git a/pkg/skaffold/build/local/docker.go b/pkg/skaffold/build/local/docker.go index a3976143120..62dd6a700a3 100644 --- a/pkg/skaffold/build/local/docker.go +++ b/pkg/skaffold/build/local/docker.go @@ -22,7 +22,6 @@ import ( "io" "os" "os/exec" - "path/filepath" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/v1alpha2" @@ -35,12 +34,12 @@ func (b *Builder) buildDocker(ctx context.Context, out io.Writer, workspace stri initialTag := util.RandomID() if b.cfg.UseDockerCLI || b.cfg.UseBuildkit { - absDockerfilePath := a.DockerfilePath - if !filepath.IsAbs(a.DockerfilePath) { - absDockerfilePath = filepath.Join(workspace, a.DockerfilePath) + dockerfilePath, err := docker.NormalizeDockerfilePath(workspace, a.DockerfilePath) + if err != nil { + return "", errors.Wrap(err, "normalizing dockerfile path") } - args := []string{"build", workspace, "--file", absDockerfilePath, "-t", initialTag} + args := []string{"build", workspace, "--file", dockerfilePath, "-t", initialTag} args = append(args, docker.GetBuildArgs(a)...) for _, from := range a.CacheFrom { args = append(args, "--cache-from", from) @@ -53,8 +52,7 @@ func (b *Builder) buildDocker(ctx context.Context, out io.Writer, workspace stri cmd.Stdout = out cmd.Stderr = out - err := util.RunCmd(cmd) - if err != nil { + if err := util.RunCmd(cmd); err != nil { return "", errors.Wrap(err, "running build") } } else { diff --git a/pkg/skaffold/docker/context.go b/pkg/skaffold/docker/context.go index 0dbe9226950..7759f017aa9 100644 --- a/pkg/skaffold/docker/context.go +++ b/pkg/skaffold/docker/context.go @@ -19,12 +19,26 @@ package docker import ( "context" "io" + "path/filepath" + "strings" cstorage "cloud.google.com/go/storage" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/util" "github.com/pkg/errors" ) +// NormalizeDockerfilePath returns the abolute path to the dockerfile. +func NormalizeDockerfilePath(context, dockerfile string) (string, error) { + if filepath.IsAbs(dockerfile) { + return dockerfile, nil + } + + if !strings.HasPrefix(dockerfile, context) { + dockerfile = filepath.Join(context, dockerfile) + } + return filepath.Abs(dockerfile) +} + func CreateDockerTarContext(buildArgs map[string]*string, w io.Writer, context, dockerfilePath string) error { paths, err := GetDependencies(buildArgs, context, dockerfilePath) if err != nil { diff --git a/pkg/skaffold/docker/parse.go b/pkg/skaffold/docker/parse.go index cf189220e0c..85ebd6a973f 100644 --- a/pkg/skaffold/docker/parse.go +++ b/pkg/skaffold/docker/parse.go @@ -168,9 +168,9 @@ func readDockerfile(workspace, absDockerfilePath string, buildArgs map[string]*s } func GetDependencies(buildArgs map[string]*string, workspace, dockerfilePath string) ([]string, error) { - absDockerfilePath := dockerfilePath - if !filepath.IsAbs(dockerfilePath) { - absDockerfilePath = filepath.Join(workspace, dockerfilePath) + absDockerfilePath, err := NormalizeDockerfilePath(workspace, dockerfilePath) + if err != nil { + return nil, errors.Wrap(err, "normalizing dockerfile path") } deps, err := readDockerfile(workspace, absDockerfilePath, buildArgs)