From 354c958c4ab21d7f28c9a1d37c019adbdd510957 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Wed, 9 Jul 2025 12:32:03 +0100 Subject: [PATCH] spindle: set clone branch in clone step Signed-off-by: oppiliappan --- .tangled/workflows/{test.yaml => test.yml} | 0 spindle/models/pipeline.go | 2 +- spindle/models/setup_steps.go | 27 ++++++++++++++++++---- workflow/def.go | 2 -- 4 files changed, 24 insertions(+), 7 deletions(-) rename .tangled/workflows/{test.yaml => test.yml} (100%) diff --git a/.tangled/workflows/test.yaml b/.tangled/workflows/test.yml similarity index 100% rename from .tangled/workflows/test.yaml rename to .tangled/workflows/test.yml diff --git a/spindle/models/pipeline.go b/spindle/models/pipeline.go index d69b5e6b..9dee0c8a 100644 --- a/spindle/models/pipeline.go +++ b/spindle/models/pipeline.go @@ -68,7 +68,7 @@ func ToPipeline(pl tangled.Pipeline, cfg config.Config) *Pipeline { setup := &setupSteps{} setup.addStep(nixConfStep()) - setup.addStep(cloneStep(*twf, *pl.TriggerMetadata.Repo, cfg.Server.Dev)) + setup.addStep(cloneStep(*twf, *pl.TriggerMetadata, cfg.Server.Dev)) setup.addStep(checkoutStep(*twf, *pl.TriggerMetadata)) // this step could be empty if s := dependencyStep(*twf); s != nil { diff --git a/spindle/models/setup_steps.go b/spindle/models/setup_steps.go index b9a1069d..380a064a 100644 --- a/spindle/models/setup_steps.go +++ b/spindle/models/setup_steps.go @@ -5,7 +5,9 @@ import ( "path" "strings" + "github.com/go-git/go-git/v5/plumbing" "tangled.sh/tangled.sh/core/api/tangled" + "tangled.sh/tangled.sh/core/workflow" ) func nixConfStep() Step { @@ -45,7 +47,7 @@ func checkoutStep(twf tangled.Pipeline_Workflow, tr tangled.Pipeline_TriggerMeta // cloneOptsAsSteps processes clone options and adds corresponding steps // to the beginning of the workflow's step list if cloning is not skipped. -func cloneStep(twf tangled.Pipeline_Workflow, tr tangled.Pipeline_TriggerRepo, dev bool) Step { +func cloneStep(twf tangled.Pipeline_Workflow, tr tangled.Pipeline_TriggerMetadata, dev bool) Step { if twf.Clone.Skip { return Step{} } @@ -53,10 +55,10 @@ func cloneStep(twf tangled.Pipeline_Workflow, tr tangled.Pipeline_TriggerRepo, d uri := "https://" if dev { uri = "http://" - tr.Knot = strings.ReplaceAll(tr.Knot, "localhost", "host.docker.internal") + tr.Repo.Knot = strings.ReplaceAll(tr.Repo.Knot, "localhost", "host.docker.internal") } - cloneUrl := uri + path.Join(tr.Knot, tr.Did, tr.Repo) + cloneUrl := uri + path.Join(tr.Repo.Knot, tr.Repo.Did, tr.Repo.Repo) cloneCmd := []string{"git", "clone", cloneUrl, "."} // default clone depth is 1 @@ -64,7 +66,24 @@ func cloneStep(twf tangled.Pipeline_Workflow, tr tangled.Pipeline_TriggerRepo, d if twf.Clone.Depth > 1 { cloneDepth = int(twf.Clone.Depth) } - cloneCmd = append(cloneCmd, []string{"--depth", fmt.Sprintf("%d", cloneDepth)}...) + cloneCmd = append(cloneCmd, fmt.Sprintf("--depth=%d", cloneDepth)) + + // select the clone branch + cloneBranch := "" + switch tr.Kind { + case workflow.TriggerKindManual: + // TODO: unimplemented + case workflow.TriggerKindPush: + ref := tr.Push.Ref + refName := plumbing.ReferenceName(ref) + cloneBranch = refName.Short() + case workflow.TriggerKindPullRequest: + cloneBranch = tr.PullRequest.SourceBranch + } + + if cloneBranch != "" { + cloneCmd = append(cloneCmd, fmt.Sprintf("--branch=%s", cloneBranch)) + } if twf.Clone.Submodules { cloneCmd = append(cloneCmd, "--recursive") diff --git a/workflow/def.go b/workflow/def.go index b56160fb..7f225c65 100644 --- a/workflow/def.go +++ b/workflow/def.go @@ -127,8 +127,6 @@ func (c *Constraint) MatchRef(ref string) bool { if refName.IsBranch() { return slices.Contains(c.Branch, refName.Short()) } - fmt.Println("no", c.Branch, refName.Short()) - return false } -- 2.51.2