diff --git a/integration/integration_test.go b/integration/integration_test.go index c11dd1378..b1bb4fd0d 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#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..7d61c6298 100644 --- a/pkg/buildcontext/git.go +++ b/pkg/buildcontext/git.go @@ -17,10 +17,13 @@ limitations under the License. package buildcontext import ( + "fmt" "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 +34,18 @@ type Git struct { // UnpackTarFromBuildContext will provide the directory where Git Repository is Cloned func (g *Git) UnpackTarFromBuildContext() (string, error) { directory := constants.BuildContextDir + parts := strings.Split(g.context, "#") + url := "https://" + parts[0] + branch := "master" + if len(parts) > 1 { + branch = parts[1] + } + fmt.Println("will clone branch", branch) _, err := git.PlainClone(directory, false, &git.CloneOptions{ - URL: "https://" + g.context, - Progress: os.Stdout, + URL: url, + Progress: os.Stdout, + ReferenceName: plumbing.ReferenceName(branch), + SingleBranch: true, }) return directory, err }