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