forked from tangled.org/core
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(cloneStep(*twf, *pl.TriggerMetadata.Repo, cfg.Server.Dev)) 59 setup.addStep(checkoutStep(*twf, *pl.TriggerMetadata)) 60 setup.addStep(dependencyStep(*twf)) 61 62 // append setup steps in order to the start of workflow steps 63 swf.Steps = append(*setup, swf.Steps...) 64 65 workflows = append(workflows, *swf) 66 } 67 return &Pipeline{Workflows: workflows} 68} 69 70func workflowEnvToMap(envs []*tangled.Pipeline_Workflow_Environment_Elem) map[string]string { 71 envMap := map[string]string{} 72 for _, env := range envs { 73 envMap[env.Key] = env.Value 74 } 75 return envMap 76} 77 78func stepEnvToMap(envs []*tangled.Pipeline_Step_Environment_Elem) map[string]string { 79 envMap := map[string]string{} 80 for _, env := range envs { 81 envMap[env.Key] = env.Value 82 } 83 return envMap 84} 85 86func workflowImage(deps []tangled.Pipeline_Dependencies_Elem, nixery string) string { 87 var dependencies string 88 for _, d := range deps { 89 if d.Registry == "nixpkgs" { 90 dependencies = path.Join(d.Packages...) 91 } 92 } 93 94 // load defaults from somewhere else 95 dependencies = path.Join(dependencies, "bash", "git", "coreutils", "nix") 96 97 return path.Join(nixery, dependencies) 98} 99 100func (wf *Workflow) addNixProfileToPath() { 101 wf.Environment["PATH"] = "$PATH:/.nix-profile/bin" 102}