Monorepo for Tangled tangled.org
1

Configure Feed

Select the types of activity you want to include in your feed.

core / spindle / models / pipeline_env.go
2.6 kB 93 lines
1package models 2 3import ( 4 "strings" 5 6 "github.com/go-git/go-git/v5/plumbing" 7 "tangled.org/core/api/tangled" 8 "tangled.org/core/workflow" 9) 10 11// PipelineEnvVars builds the standard CI environment variables for a pipeline 12func PipelineEnvVars(tr *tangled.Pipeline_TriggerMetadata, pipelineId PipelineId) map[string]string { 13 if tr == nil { 14 return nil 15 } 16 17 env := make(map[string]string) 18 19 // standard CI env vars 20 env["CI"] = "true" 21 22 env["TANGLED_PIPELINE_ID"] = pipelineId.AtUri().String() 23 env["TANGLED_PIPELINE_KIND"] = tr.Kind 24 25 // repo info 26 if tr.Repo != nil { 27 env["TANGLED_REPO_KNOT"] = tr.Repo.Knot 28 env["TANGLED_REPO_DID"] = tr.Repo.Did 29 if tr.Repo.Repo != nil { 30 env["TANGLED_REPO_NAME"] = *tr.Repo.Repo 31 } 32 if tr.Repo.RepoDid != nil { 33 env["TANGLED_REPO_REPO_DID"] = *tr.Repo.RepoDid 34 } 35 env["TANGLED_REPO_DEFAULT_BRANCH"] = tr.Repo.DefaultBranch 36 env["TANGLED_REPO_URL"] = BuildRepoURL(tr.Repo) 37 } 38 39 switch workflow.TriggerKind(tr.Kind) { 40 case workflow.TriggerKindPush: 41 if tr.Push != nil { 42 refName := plumbing.ReferenceName(tr.Push.Ref) 43 refType := "branch" 44 if refName.IsTag() { 45 refType = "tag" 46 } 47 48 env["TANGLED_REF"] = tr.Push.Ref 49 env["TANGLED_REF_NAME"] = refName.Short() 50 env["TANGLED_REF_TYPE"] = refType 51 env["TANGLED_SHA"] = tr.Push.NewSha 52 env["TANGLED_COMMIT_SHA"] = tr.Push.NewSha 53 } 54 55 case workflow.TriggerKindPullRequest: 56 if tr.PullRequest != nil { 57 // for PRs, ref is the source branch 58 env["TANGLED_REF"] = "refs/heads/" + tr.PullRequest.SourceBranch 59 env["TANGLED_REF_NAME"] = tr.PullRequest.SourceBranch 60 env["TANGLED_REF_TYPE"] = "branch" 61 env["TANGLED_SHA"] = tr.PullRequest.SourceSha 62 env["TANGLED_COMMIT_SHA"] = tr.PullRequest.SourceSha 63 64 // PR-specific env vars 65 env["TANGLED_PR_SOURCE_BRANCH"] = tr.PullRequest.SourceBranch 66 env["TANGLED_PR_TARGET_BRANCH"] = tr.PullRequest.TargetBranch 67 env["TANGLED_PR_SOURCE_SHA"] = tr.PullRequest.SourceSha 68 env["TANGLED_PR_ACTION"] = tr.PullRequest.Action 69 } 70 71 case workflow.TriggerKindManual: 72 if tr.Manual != nil { 73 env["TANGLED_SHA"] = tr.Manual.Sha 74 env["TANGLED_COMMIT_SHA"] = tr.Manual.Sha 75 if tr.Manual.Ref != nil && *tr.Manual.Ref != "" { 76 refName := plumbing.ReferenceName(*tr.Manual.Ref) 77 refType := "branch" 78 if refName.IsTag() { 79 refType = "tag" 80 } 81 env["TANGLED_REF"] = *tr.Manual.Ref 82 env["TANGLED_REF_NAME"] = refName.Short() 83 env["TANGLED_REF_TYPE"] = refType 84 } 85 // include manual inputs if present 86 for _, pair := range tr.Manual.Inputs { 87 env["TANGLED_INPUT_"+strings.ToUpper(pair.Key)] = pair.Value 88 } 89 } 90 } 91 92 return env 93}