// GetStepFromNewSteplib ... func GetStepFromNewSteplib(stepID, stepLibGitURI string) (stepmanModels.StepModel, string, error) { // Activate step - get step.yml tempStepCloneDirPath, err := pathutil.NormalizedOSTempDirPath("step_clone") if err != nil { return stepmanModels.StepModel{}, "", err } tempStepYMLDirPath, err := pathutil.NormalizedOSTempDirPath("step_yml") if err != nil { return stepmanModels.StepModel{}, "", err } tempStepYMLFilePath := path.Join(tempStepYMLDirPath, "step.yml") // Stepman if err := bitrise.StepmanSetup(stepLibGitURI); err != nil { return stepmanModels.StepModel{}, "", err } stepInfo, err := bitrise.StepmanStepInfo(stepLibGitURI, stepID, "") if err != nil { // May StepLib should be updated log.Info("Step info not found in StepLib (%s) -- Updating ...") if err := bitrise.StepmanUpdate(stepLibGitURI); err != nil { return stepmanModels.StepModel{}, "", err } stepInfo, err = bitrise.StepmanStepInfo(stepLibGitURI, stepID, "") if err != nil { return stepmanModels.StepModel{}, "", err } } stepVersion := stepInfo.StepVersion if err := bitrise.StepmanActivate(stepLibGitURI, stepID, "", tempStepCloneDirPath, tempStepYMLFilePath); err != nil { return stepmanModels.StepModel{}, "", err } specStep, err := ReadSpecStep(tempStepYMLFilePath) if err != nil { return stepmanModels.StepModel{}, "", err } // Cleanup if err := cmdex.RemoveDir(tempStepCloneDirPath); err != nil { return stepmanModels.StepModel{}, "", errors.New(fmt.Sprint("Failed to remove step clone dir: ", err)) } if err := cmdex.RemoveDir(tempStepYMLDirPath); err != nil { return stepmanModels.StepModel{}, "", errors.New(fmt.Sprint("Failed to remove step clone dir: ", err)) } return specStep, stepVersion, nil }
// CleanupRoute ... func CleanupRoute(route SteplibRoute) error { pth := path.Join(GetCollectionsDirPath(), route.FolderAlias) if err := cmdex.RemoveDir(pth); err != nil { return err } if err := RemoveRoute(route); err != nil { return err } return nil }
// CleanupStepWorkDir ... func CleanupStepWorkDir() error { stepYMLPth := filepath.Join(configs.BitriseWorkDirPath, "current_step.yml") if err := cmdex.RemoveFile(stepYMLPth); err != nil { return errors.New(fmt.Sprint("Failed to remove step yml: ", err)) } stepDir := configs.BitriseWorkStepsDirPath if err := cmdex.RemoveDir(stepDir); err != nil { return errors.New(fmt.Sprint("Failed to remove step work dir: ", err)) } return nil }
func removeStepDefaultsAndFillStepOutputs(stepListItem *models.StepListItemModel, defaultStepLibSource string) error { // Create stepIDData compositeStepIDStr, workflowStep, err := models.GetStepIDStepDataPair(*stepListItem) if err != nil { return err } stepIDData, err := models.CreateStepIDDataFromString(compositeStepIDStr, defaultStepLibSource) if err != nil { return err } // Activate step - get step.yml tempStepCloneDirPath, err := pathutil.NormalizedOSTempDirPath("step_clone") if err != nil { return err } tempStepYMLDirPath, err := pathutil.NormalizedOSTempDirPath("step_yml") if err != nil { return err } tempStepYMLFilePath := filepath.Join(tempStepYMLDirPath, "step.yml") if stepIDData.SteplibSource == "path" { stepAbsLocalPth, err := pathutil.AbsPath(stepIDData.IDorURI) if err != nil { return err } if err := cmdex.CopyFile(filepath.Join(stepAbsLocalPth, "step.yml"), tempStepYMLFilePath); err != nil { return err } } else if stepIDData.SteplibSource == "git" { if err := cmdex.GitCloneTagOrBranch(stepIDData.IDorURI, tempStepCloneDirPath, stepIDData.Version); err != nil { return err } if err := cmdex.CopyFile(filepath.Join(tempStepCloneDirPath, "step.yml"), tempStepYMLFilePath); err != nil { return err } } else if stepIDData.SteplibSource == "_" { // Steplib independent steps are completly defined in workflow tempStepYMLFilePath = "" } else if stepIDData.SteplibSource != "" { if err := tools.StepmanSetup(stepIDData.SteplibSource); err != nil { return err } if err := tools.StepmanActivate(stepIDData.SteplibSource, stepIDData.IDorURI, stepIDData.Version, tempStepCloneDirPath, tempStepYMLFilePath); err != nil { return err } } else { return errors.New("Failed to fill step ouputs: unkown SteplibSource") } // Fill outputs if tempStepYMLFilePath != "" { specStep, err := ReadSpecStep(tempStepYMLFilePath) if err != nil { return err } if workflowStep.Title != nil && specStep.Title != nil && *workflowStep.Title == *specStep.Title { workflowStep.Title = nil } if workflowStep.Description != nil && specStep.Description != nil && *workflowStep.Description == *specStep.Description { workflowStep.Description = nil } if workflowStep.Summary != nil && specStep.Summary != nil && *workflowStep.Summary == *specStep.Summary { workflowStep.Summary = nil } if workflowStep.Website != nil && specStep.Website != nil && *workflowStep.Website == *specStep.Website { workflowStep.Website = nil } if workflowStep.SourceCodeURL != nil && specStep.SourceCodeURL != nil && *workflowStep.SourceCodeURL == *specStep.SourceCodeURL { workflowStep.SourceCodeURL = nil } if workflowStep.SupportURL != nil && specStep.SupportURL != nil && *workflowStep.SupportURL == *specStep.SupportURL { workflowStep.SupportURL = nil } workflowStep.PublishedAt = nil if workflowStep.Source != nil && specStep.Source != nil { if workflowStep.Source.Git == specStep.Source.Git { workflowStep.Source.Git = "" } if workflowStep.Source.Commit == specStep.Source.Commit { workflowStep.Source.Commit = "" } } if isStringSliceWithSameElements(workflowStep.HostOsTags, specStep.HostOsTags) { workflowStep.HostOsTags = []string{} } if isStringSliceWithSameElements(workflowStep.ProjectTypeTags, specStep.ProjectTypeTags) { workflowStep.ProjectTypeTags = []string{} } if isStringSliceWithSameElements(workflowStep.TypeTags, specStep.TypeTags) { workflowStep.TypeTags = []string{} } if isDependencySliceWithSameElements(workflowStep.Dependencies, specStep.Dependencies) { workflowStep.Dependencies = []stepmanModels.DependencyModel{} } if workflowStep.IsRequiresAdminUser != nil && specStep.IsRequiresAdminUser != nil && *workflowStep.IsRequiresAdminUser == *specStep.IsRequiresAdminUser { workflowStep.IsRequiresAdminUser = nil } if workflowStep.IsAlwaysRun != nil && specStep.IsAlwaysRun != nil && *workflowStep.IsAlwaysRun == *specStep.IsAlwaysRun { workflowStep.IsAlwaysRun = nil } if workflowStep.IsSkippable != nil && specStep.IsSkippable != nil && *workflowStep.IsSkippable == *specStep.IsSkippable { workflowStep.IsSkippable = nil } if workflowStep.RunIf != nil && specStep.RunIf != nil && *workflowStep.RunIf == *specStep.RunIf { workflowStep.RunIf = nil } inputs := []envmanModels.EnvironmentItemModel{} for _, input := range workflowStep.Inputs { sameValue := false wfKey, wfValue, err := input.GetKeyValuePair() if err != nil { return err } wfOptions, err := input.GetOptions() if err != nil { return err } sInput, err := getInputByKey(specStep.Inputs, wfKey) if err != nil { return err } _, sValue, err := sInput.GetKeyValuePair() if err != nil { return err } if wfValue == sValue { sameValue = true } sOptions, err := sInput.GetOptions() if err != nil { return err } hasOptions := false if wfOptions.Title != nil && sOptions.Title != nil && *wfOptions.Title == *sOptions.Title { wfOptions.Title = nil } else { hasOptions = true } if wfOptions.Description != nil && sOptions.Description != nil && *wfOptions.Description == *sOptions.Description { wfOptions.Description = nil } else { hasOptions = true } if wfOptions.Summary != nil && sOptions.Summary != nil && *wfOptions.Summary == *sOptions.Summary { wfOptions.Summary = nil } else { hasOptions = true } if isStringSliceWithSameElements(wfOptions.ValueOptions, sOptions.ValueOptions) { wfOptions.ValueOptions = []string{} } else { hasOptions = true } if wfOptions.IsRequired != nil && sOptions.IsRequired != nil && *wfOptions.IsRequired == *sOptions.IsRequired { wfOptions.IsRequired = nil } else { hasOptions = true } if wfOptions.IsExpand != nil && sOptions.IsExpand != nil && *wfOptions.IsExpand == *sOptions.IsExpand { wfOptions.IsExpand = nil } else { hasOptions = true } if wfOptions.IsDontChangeValue != nil && sOptions.IsDontChangeValue != nil && *wfOptions.IsDontChangeValue == *sOptions.IsDontChangeValue { wfOptions.IsDontChangeValue = nil } else { hasOptions = true } if !hasOptions && sameValue { // default env } else { if hasOptions { input[envmanModels.OptionsKey] = wfOptions } else { delete(input, envmanModels.OptionsKey) } inputs = append(inputs, input) } } workflowStep.Inputs = inputs // We need only key-value and title from spec outputs outputs := []envmanModels.EnvironmentItemModel{} for _, output := range specStep.Outputs { sKey, sValue, err := output.GetKeyValuePair() if err != nil { return err } sOptions, err := output.GetOptions() if err != nil { return err } newOutput := envmanModels.EnvironmentItemModel{ sKey: sValue, envmanModels.OptionsKey: envmanModels.EnvironmentItemOptionsModel{ Title: sOptions.Title, }, } outputs = append(outputs, newOutput) } workflowStep.Outputs = outputs (*stepListItem)[compositeStepIDStr] = workflowStep } // Cleanup if err := cmdex.RemoveDir(tempStepCloneDirPath); err != nil { return errors.New(fmt.Sprint("Failed to remove step clone dir: ", err)) } if err := cmdex.RemoveDir(tempStepYMLDirPath); err != nil { return errors.New(fmt.Sprint("Failed to remove step clone dir: ", err)) } return nil }
// DeleteShareSteplibFile ... func DeleteShareSteplibFile() error { return cmdex.RemoveDir(getShareFilePath()) }