diff --git a/integration/integration_test.go b/integration/integration_test.go index c11dd1378..fcd6246f9 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -278,6 +278,49 @@ func TestGitBuildcontext(t *testing.T) { checkContainerDiffOutput(t, diff, expected) } +func TestGitBuildContextWithBranch(t *testing.T) { + repo := "github.com/GoogleContainerTools/kaniko#refs/tags/v0.10.0" + dockerfile := "integration/dockerfiles/Dockerfile_test_run_2" + + // Build with docker + dockerImage := GetDockerImage(config.imageRepo, "Dockerfile_test_git") + dockerCmd := exec.Command("docker", + append([]string{"build", + "-t", dockerImage, + "-f", dockerfile, + repo})...) + out, err := RunCommandWithoutTest(dockerCmd) + if err != nil { + t.Errorf("Failed to build image %s with docker command \"%s\": %s %s", dockerImage, dockerCmd.Args, err, string(out)) + } + + // Build with kaniko + kanikoImage := GetKanikoImage(config.imageRepo, "Dockerfile_test_git") + kanikoCmd := exec.Command("docker", + append([]string{"run", + "-v", os.Getenv("HOME") + "/.config/gcloud:/root/.config/gcloud", + ExecutorImage, + "-f", dockerfile, + "-d", kanikoImage, + "-c", fmt.Sprintf("git://%s", repo)})...) + + out, err = RunCommandWithoutTest(kanikoCmd) + if err != nil { + t.Errorf("Failed to build image %s with kaniko command \"%s\": %v %s", dockerImage, kanikoCmd.Args, err, string(out)) + } + + // container-diff + daemonDockerImage := daemonPrefix + dockerImage + containerdiffCmd := exec.Command("container-diff", "diff", "--no-cache", + daemonDockerImage, kanikoImage, + "-q", "--type=file", "--type=metadata", "--json") + diff := RunCommand(containerdiffCmd, t) + t.Logf("diff = %s", string(diff)) + + expected := fmt.Sprintf(emptyContainerDiff, dockerImage, kanikoImage, dockerImage, kanikoImage) + checkContainerDiffOutput(t, diff, expected) +} + func TestLayers(t *testing.T) { offset := map[string]int{ "Dockerfile_test_add": 11, diff --git a/pkg/buildcontext/git.go b/pkg/buildcontext/git.go index 1aa8691be..9908350b1 100644 --- a/pkg/buildcontext/git.go +++ b/pkg/buildcontext/git.go @@ -18,9 +18,11 @@ package buildcontext import ( "os" + "strings" "github.com/GoogleContainerTools/kaniko/pkg/constants" git "gopkg.in/src-d/go-git.v4" + "gopkg.in/src-d/go-git.v4/plumbing" ) // Git unifies calls to download and unpack the build context. @@ -31,9 +33,14 @@ type Git struct { // UnpackTarFromBuildContext will provide the directory where Git Repository is Cloned func (g *Git) UnpackTarFromBuildContext() (string, error) { directory := constants.BuildContextDir - _, err := git.PlainClone(directory, false, &git.CloneOptions{ - URL: "https://" + g.context, + parts := strings.Split(g.context, "#") + options := git.CloneOptions{ + URL: "https://" + parts[0], Progress: os.Stdout, - }) + } + if len(parts) > 1 { + options.ReferenceName = plumbing.ReferenceName(parts[1]) + } + _, err := git.PlainClone(directory, false, &options) return directory, err }