func StartPlugin(pd *pluginDescriptor, action string, wait bool) (*exec.Cmd, error) { command := []string{} switch runtime.GOOS { case "windows": command = pd.Command.Windows break case "darwin": command = pd.Command.Darwin break default: command = pd.Command.Linux break } if len(command) == 0 { return nil, fmt.Errorf("Platform specific command not specified: %s.", runtime.GOOS) } cmd, err := common.ExecuteCommand(command, pd.pluginPath, logger.Current(), logger.Current()) if err != nil { return nil, err } if wait { return cmd, cmd.Wait() } else { go func() { cmd.Wait() }() } return cmd, nil }
func ExecuteSpecs(inParallel bool, args []string) int { i := &install.UpdateFacade{} i.BufferUpdateDetails() env.LoadEnv(false) specsToExecute, conceptsDictionary := parseSpecs(args) manifest, err := manifest.ProjectManifest() if err != nil { logger.Critical(err.Error()) } runner := startApi() errMap := validateSpecs(manifest, specsToExecute, runner, conceptsDictionary) pluginHandler := plugin.StartPlugins(manifest) parallelInfo := ¶llelInfo{inParallel: inParallel, numberOfStreams: NumberOfExecutionStreams} if !parallelInfo.isValid() { os.Exit(1) } execution := newExecution(&executionInfo{manifest, specsToExecute, runner, pluginHandler, parallelInfo, logger.Current(), errMap}) result := execution.start() execution.finish() exitCode := printExecutionStatus(result, errMap) i.PrintUpdateBuffer() return exitCode }