···68 setup := &setupSteps{}
6970 setup.addStep(nixConfStep())
71- setup.addStep(cloneStep(*twf, *pl.TriggerMetadata.Repo, cfg.Server.Dev))
72 setup.addStep(checkoutStep(*twf, *pl.TriggerMetadata))
73 // this step could be empty
74 if s := dependencyStep(*twf); s != nil {
···68 setup := &setupSteps{}
6970 setup.addStep(nixConfStep())
71+ setup.addStep(cloneStep(*twf, *pl.TriggerMetadata, cfg.Server.Dev))
72 setup.addStep(checkoutStep(*twf, *pl.TriggerMetadata))
73 // this step could be empty
74 if s := dependencyStep(*twf); s != nil {
+23-4
spindle/models/setup_steps.go
···5 "path"
6 "strings"
708 "tangled.sh/tangled.sh/core/api/tangled"
09)
1011func nixConfStep() Step {
···4546// cloneOptsAsSteps processes clone options and adds corresponding steps
47// to the beginning of the workflow's step list if cloning is not skipped.
48-func cloneStep(twf tangled.Pipeline_Workflow, tr tangled.Pipeline_TriggerRepo, dev bool) Step {
49 if twf.Clone.Skip {
50 return Step{}
51 }
···53 uri := "https://"
54 if dev {
55 uri = "http://"
56- tr.Knot = strings.ReplaceAll(tr.Knot, "localhost", "host.docker.internal")
57 }
5859- cloneUrl := uri + path.Join(tr.Knot, tr.Did, tr.Repo)
60 cloneCmd := []string{"git", "clone", cloneUrl, "."}
6162 // default clone depth is 1
···64 if twf.Clone.Depth > 1 {
65 cloneDepth = int(twf.Clone.Depth)
66 }
67- cloneCmd = append(cloneCmd, []string{"--depth", fmt.Sprintf("%d", cloneDepth)}...)
000000000000000006869 if twf.Clone.Submodules {
70 cloneCmd = append(cloneCmd, "--recursive")
···5 "path"
6 "strings"
78+ "github.com/go-git/go-git/v5/plumbing"
9 "tangled.sh/tangled.sh/core/api/tangled"
10+ "tangled.sh/tangled.sh/core/workflow"
11)
1213func nixConfStep() Step {
···4748// cloneOptsAsSteps processes clone options and adds corresponding steps
49// to the beginning of the workflow's step list if cloning is not skipped.
50+func cloneStep(twf tangled.Pipeline_Workflow, tr tangled.Pipeline_TriggerMetadata, dev bool) Step {
51 if twf.Clone.Skip {
52 return Step{}
53 }
···55 uri := "https://"
56 if dev {
57 uri = "http://"
58+ tr.Repo.Knot = strings.ReplaceAll(tr.Repo.Knot, "localhost", "host.docker.internal")
59 }
6061+ cloneUrl := uri + path.Join(tr.Repo.Knot, tr.Repo.Did, tr.Repo.Repo)
62 cloneCmd := []string{"git", "clone", cloneUrl, "."}
6364 // default clone depth is 1
···66 if twf.Clone.Depth > 1 {
67 cloneDepth = int(twf.Clone.Depth)
68 }
69+ cloneCmd = append(cloneCmd, fmt.Sprintf("--depth=%d", cloneDepth))
70+71+ // select the clone branch
72+ cloneBranch := ""
73+ switch tr.Kind {
74+ case workflow.TriggerKindManual:
75+ // TODO: unimplemented
76+ case workflow.TriggerKindPush:
77+ ref := tr.Push.Ref
78+ refName := plumbing.ReferenceName(ref)
79+ cloneBranch = refName.Short()
80+ case workflow.TriggerKindPullRequest:
81+ cloneBranch = tr.PullRequest.SourceBranch
82+ }
83+84+ if cloneBranch != "" {
85+ cloneCmd = append(cloneCmd, fmt.Sprintf("--branch=%s", cloneBranch))
86+ }
8788 if twf.Clone.Submodules {
89 cloneCmd = append(cloneCmd, "--recursive")