// ReadSpecStep ... func ReadSpecStep(pth string) (stepmanModels.StepModel, error) { if isExists, err := pathutil.IsPathExists(pth); err != nil { return stepmanModels.StepModel{}, err } else if !isExists { return stepmanModels.StepModel{}, errors.New(fmt.Sprint("No file found at path", pth)) } bytes, err := ioutil.ReadFile(pth) if err != nil { return stepmanModels.StepModel{}, err } var stepModel stepmanModels.StepModel if err := yaml.Unmarshal(bytes, &stepModel); err != nil { return stepmanModels.StepModel{}, err } if err := stepModel.Normalize(); err != nil { return stepmanModels.StepModel{}, err } if err := stepModel.Validate(); err != nil { return stepmanModels.StepModel{}, err } if err := stepModel.FillMissingDeafults(); err != nil { return stepmanModels.StepModel{}, err } return stepModel, nil }
// MergeStepWith ... func MergeStepWith(step, otherStep stepmanModels.StepModel) (stepmanModels.StepModel, error) { if err := step.FillMissingDeafults(); err != nil { return stepmanModels.StepModel{}, err } if otherStep.Title != nil { *step.Title = *otherStep.Title } if otherStep.Description != nil { *step.Description = *otherStep.Description } if otherStep.Summary != nil { *step.Summary = *otherStep.Summary } if otherStep.Website != nil { *step.Website = *otherStep.Website } if otherStep.SourceCodeURL != nil { *step.SourceCodeURL = *otherStep.SourceCodeURL } if otherStep.SupportURL != nil { *step.SupportURL = *otherStep.SupportURL } if otherStep.Source.Git != nil { *step.Source.Git = *otherStep.Source.Git } if len(otherStep.HostOsTags) > 0 { step.HostOsTags = otherStep.HostOsTags } if len(otherStep.ProjectTypeTags) > 0 { step.ProjectTypeTags = otherStep.ProjectTypeTags } if len(otherStep.TypeTags) > 0 { step.TypeTags = otherStep.TypeTags } if otherStep.IsRequiresAdminUser != nil { *step.IsRequiresAdminUser = *otherStep.IsRequiresAdminUser } if otherStep.IsAlwaysRun != nil { *step.IsAlwaysRun = *otherStep.IsAlwaysRun } if otherStep.IsSkippable != nil { *step.IsSkippable = *otherStep.IsSkippable } if otherStep.RunIf != nil { *step.RunIf = *otherStep.RunIf } for _, input := range step.Inputs { key, _, err := input.GetKeyValuePair() if err != nil { return stepmanModels.StepModel{}, err } otherInput, found := getInputByKey(otherStep, key) if found { err := MergeEnvironmentWith(&input, otherInput) if err != nil { return stepmanModels.StepModel{}, err } } } for _, output := range step.Outputs { key, _, err := output.GetKeyValuePair() if err != nil { return stepmanModels.StepModel{}, err } otherOutput, found := getOutputByKey(otherStep, key) if found { err := MergeEnvironmentWith(&output, otherOutput) if err != nil { return stepmanModels.StepModel{}, err } } } return step, nil }