this repo has no description
1package models 2 3import ( 4 "path" 5 6 "tangled.sh/tangled.sh/core/api/tangled" 7 "tangled.sh/tangled.sh/core/spindle/config" 8) 9 10type Pipeline struct { 11 Workflows []Workflow 12} 13 14type Step struct { 15 Command string 16 Name string 17 Environment map[string]string 18} 19 20type Workflow struct { 21 Steps []Step 22 Environment map[string]string 23 Name string 24 Image string 25} 26 27// setupSteps get added to start of Steps 28type setupSteps []Step 29 30// addStep adds a step to the beginning of the workflow's steps. 31func (ss *setupSteps) addStep(step Step) { 32 *ss = append(*ss, step) 33} 34 35// ToPipeline converts a tangled.Pipeline into a model.Pipeline. 36// In the process, dependencies are resolved: nixpkgs deps 37// are constructed atop nixery and set as the Workflow.Image, 38// and ones from custom registries 39func ToPipeline(pl tangled.Pipeline, cfg config.Config) *Pipeline { 40 workflows := []Workflow{} 41 42 for _, twf := range pl.Workflows { 43 swf := &Workflow{} 44 for _, tstep := range twf.Steps { 45 sstep := Step{} 46 sstep.Environment = stepEnvToMap(tstep.Environment) 47 sstep.Command = tstep.Command 48 sstep.Name = tstep.Name 49 swf.Steps = append(swf.Steps, sstep) 50 } 51 swf.Name = twf.Name 52 swf.Environment = workflowEnvToMap(twf.Environment) 53 swf.Image = workflowImage(twf.Dependencies, cfg.Pipelines.Nixery) 54 55 swf.addNixProfileToPath() 56 setup := &setupSteps{} 57 58 setup.addStep(nixConfStep()) 59 setup.addStep(cloneStep(*twf, *pl.TriggerMetadata.Repo, cfg.Server.Dev)) 60 setup.addStep(checkoutStep(*twf, *pl.TriggerMetadata)) 61 setup.addStep(dependencyStep(*twf)) 62 63 // append setup steps in order to the start of workflow steps 64 swf.Steps = append(*setup, swf.Steps...) 65 66 workflows = append(workflows, *swf) 67 } 68 return &Pipeline{Workflows: workflows} 69} 70 71func workflowEnvToMap(envs []*tangled.Pipeline_Workflow_Environment_Elem) map[string]string { 72 envMap := map[string]string{} 73 for _, env := range envs { 74 envMap[env.Key] = env.Value 75 } 76 return envMap 77} 78 79func stepEnvToMap(envs []*tangled.Pipeline_Step_Environment_Elem) map[string]string { 80 envMap := map[string]string{} 81 for _, env := range envs { 82 envMap[env.Key] = env.Value 83 } 84 return envMap 85} 86 87func workflowImage(deps []tangled.Pipeline_Dependencies_Elem, nixery string) string { 88 var dependencies string 89 for _, d := range deps { 90 if d.Registry == "nixpkgs" { 91 dependencies = path.Join(d.Packages...) 92 } 93 } 94 95 // load defaults from somewhere else 96 dependencies = path.Join(dependencies, "bash", "git", "coreutils", "nix") 97 98 return path.Join(nixery, dependencies) 99} 100 101func (wf *Workflow) addNixProfileToPath() { 102 wf.Environment["PATH"] = "$PATH:/.nix-profile/bin" 103}