func doSetupToolkits() error { log.Infoln("Checking Bitrise Toolkits...") coreToolkits := toolkits.AllSupportedToolkits() for _, aCoreTK := range coreToolkits { toolkitName := aCoreTK.ToolkitName() isInstallRequired, checkResult, err := aCoreTK.Check() if err != nil { return fmt.Errorf("Failed to perform toolkit check (%s), error: %s", toolkitName, err) } if isInstallRequired { log.Infoln("No installed/suitable '" + toolkitName + "' found, installing toolkit ...") if err := aCoreTK.Install(); err != nil { return fmt.Errorf("Failed to install toolkit (%s), error: %s", toolkitName, err) } isInstallRequired, checkResult, err = aCoreTK.Check() if err != nil { return fmt.Errorf("Failed to perform toolkit check (%s), error: %s", toolkitName, err) } } if isInstallRequired { return fmt.Errorf("Toolkit (%s) still reports that it isn't (properly) installed", toolkitName) } log.Infoln(" * "+colorstring.Green("[OK]")+" "+toolkitName+" :", checkResult.Path) log.Infoln(" version :", checkResult.Version) } return nil }
// RunWorkflowWithConfiguration ... func runWorkflowWithConfiguration( startTime time.Time, workflowToRunID string, bitriseConfig models.BitriseDataModel, secretEnvironments []envmanModels.EnvironmentItemModel) (models.BuildRunResultsModel, error) { workflowToRun, exist := bitriseConfig.Workflows[workflowToRunID] if !exist { return models.BuildRunResultsModel{}, fmt.Errorf("Specified Workflow (%s) does not exist!", workflowToRunID) } if workflowToRun.Title == "" { workflowToRun.Title = workflowToRunID } // Envman setup if err := os.Setenv(configs.EnvstorePathEnvKey, configs.OutputEnvstorePath); err != nil { return models.BuildRunResultsModel{}, fmt.Errorf("Failed to add env, err: %s", err) } if err := os.Setenv(configs.FormattedOutputPathEnvKey, configs.FormattedOutputPath); err != nil { return models.BuildRunResultsModel{}, fmt.Errorf("Failed to add env, err: %s", err) } if err := tools.EnvmanInit(); err != nil { return models.BuildRunResultsModel{}, errors.New("Failed to run envman init") } // App level environment environments := append(secretEnvironments, bitriseConfig.App.Environments...) if err := os.Setenv("BITRISE_TRIGGERED_WORKFLOW_ID", workflowToRunID); err != nil { return models.BuildRunResultsModel{}, fmt.Errorf("Failed to set BITRISE_TRIGGERED_WORKFLOW_ID env: %s", err) } if err := os.Setenv("BITRISE_TRIGGERED_WORKFLOW_TITLE", workflowToRun.Title); err != nil { return models.BuildRunResultsModel{}, fmt.Errorf("Failed to set BITRISE_TRIGGERED_WORKFLOW_TITLE env: %s", err) } environments = append(environments, workflowToRun.Environments...) lastWorkflowID, err := lastWorkflowIDInConfig(workflowToRunID, bitriseConfig) if err != nil { return models.BuildRunResultsModel{}, fmt.Errorf("Failed to get last workflow id: %s", err) } // Bootstrap Toolkits for _, aToolkit := range toolkits.AllSupportedToolkits() { toolkitName := aToolkit.ToolkitName() if !aToolkit.IsToolAvailableInPATH() { // don't bootstrap if any preinstalled version is available, // the toolkit's `PrepareForStepRun` can bootstrap for itself later if required // or if the system installed version is not sufficient if err := aToolkit.Bootstrap(); err != nil { return models.BuildRunResultsModel{}, fmt.Errorf("Failed to bootstrap the required toolkit for the step (%s), error: %s", toolkitName, err) } } } // buildRunResults := models.BuildRunResultsModel{ StartTime: startTime, StepmanUpdates: map[string]int{}, } buildRunResults, err = activateAndRunWorkflow(workflowToRunID, workflowToRun, bitriseConfig, buildRunResults, &environments, lastWorkflowID) if err != nil { return buildRunResults, errors.New("[BITRISE_CLI] - Failed to activate and run workflow " + workflowToRunID) } // Build finished bitrise.PrintSummary(buildRunResults) // Trigger WorkflowRunDidFinish if err := plugins.TriggerEvent(plugins.DidFinishRun, buildRunResults); err != nil { log.Warnf("Failed to trigger WorkflowRunDidFinish, error: %s", err) } return buildRunResults, nil }