func checkGoConfiguration(goConfig GoConfigurationModel) (bool, ToolkitCheckResult, error) { cmdEnvs := os.Environ() if len(goConfig.GOROOT) > 0 { cmdEnvs = append(cmdEnvs, "GOROOT="+goConfig.GOROOT) } verOut, err := cmdex.NewCommand(goConfig.GoBinaryPath, "version").SetEnvs(cmdEnvs).RunAndReturnTrimmedOutput() if err != nil { return false, ToolkitCheckResult{}, fmt.Errorf("Failed to check go version, error: %s", err) } verStr, err := parseGoVersionFromGoVersionOutput(verOut) if err != nil { return false, ToolkitCheckResult{}, fmt.Errorf("Failed to parse go version, error: %s", err) } checkRes := ToolkitCheckResult{ Path: goConfig.GoBinaryPath, Version: verStr, } // version check isVersionOk, err := versions.IsVersionGreaterOrEqual(verStr, minGoVersionForToolkit) if err != nil { return false, checkRes, fmt.Errorf("Failed to validate installed go version, error: %s", err) } if !isVersionOk { return true, checkRes, nil } return false, checkRes, nil }
func checkIsBitriseToolInstalled(toolname, minVersion string, isInstall bool) error { doInstall := func() error { installCmdLines := []string{ "curl -fL https://github.com/bitrise-io/" + toolname + "/releases/download/" + minVersion + "/" + toolname + "-$(uname -s)-$(uname -m) > /usr/local/bin/" + toolname, "chmod +x /usr/local/bin/" + toolname, } officialGithub := "https://github.com/bitrise-io/" + toolname fmt.Println() log.Warnln("No supported " + toolname + " version found.") log.Infoln("You can find more information about "+toolname+" on it's official GitHub page:", officialGithub) fmt.Println() // Install log.Infoln("Installing...") fmt.Println(strings.Join(installCmdLines, "\n")) if err := cmdex.RunBashCommandLines(installCmdLines); err != nil { return err } // check again return checkIsBitriseToolInstalled(toolname, minVersion, false) } // check whether installed progInstallPth, err := CheckProgramInstalledPath(toolname) if err != nil { if !isInstall { return err } return doInstall() } verStr, err := cmdex.RunCommandAndReturnStdout(toolname, "-version") if err != nil { log.Infoln("") return errors.New("Failed to get version") } // version check isVersionOk, err := versions.IsVersionGreaterOrEqual(verStr, minVersion) if err != nil { log.Error("Failed to validate installed version") return err } if !isVersionOk { log.Warn("Installed "+toolname+" found, but not a supported version: ", verStr) if !isInstall { return errors.New("Failed to install required version.") } log.Warn("Updating...") return doInstall() } log.Infoln(" * "+colorstring.Green("[OK]")+" "+toolname+" :", progInstallPth) log.Infoln(" version :", verStr) return nil }
// CreateBitriseConfigFromCLIParams ... func CreateBitriseConfigFromCLIParams(bitriseConfigBase64Data, bitriseConfigPath string) (models.BitriseDataModel, []string, error) { bitriseConfig := models.BitriseDataModel{} warnings := []string{} if bitriseConfigBase64Data != "" { config, warns, err := GetBitriseConfigFromBase64Data(bitriseConfigBase64Data) warnings = warns if err != nil { return models.BitriseDataModel{}, warnings, fmt.Errorf("Failed to get config (bitrise.yml) from base 64 data, err: %s", err) } bitriseConfig = config } else { bitriseConfigPath, err := GetBitriseConfigFilePath(bitriseConfigPath) if err != nil { return models.BitriseDataModel{}, []string{}, fmt.Errorf("Failed to get config (bitrise.yml) path: %s", err) } if bitriseConfigPath == "" { return models.BitriseDataModel{}, []string{}, errors.New("Failed to get config (bitrise.yml) path: empty bitriseConfigPath") } config, warns, err := bitrise.ReadBitriseConfig(bitriseConfigPath) warnings = warns if err != nil { return models.BitriseDataModel{}, warnings, fmt.Errorf("Config (path:%s) is not valid: %s", bitriseConfigPath, err) } bitriseConfig = config } isConfigVersionOK, err := versions.IsVersionGreaterOrEqual(models.Version, bitriseConfig.FormatVersion) if err != nil { log.Warn("bitrise CLI model version: ", models.Version) log.Warn("bitrise.yml Format Version: ", bitriseConfig.FormatVersion) return models.BitriseDataModel{}, warnings, fmt.Errorf("Failed to compare bitrise CLI models's version with the bitrise.yml FormatVersion: %s", err) } if !isConfigVersionOK { log.Warnf("The bitrise.yml has a higher Format Version (%s) than the bitrise CLI model's version (%s).", bitriseConfig.FormatVersion, models.Version) return models.BitriseDataModel{}, warnings, errors.New("This bitrise.yml was created with and for a newer version of bitrise CLI, please upgrade your bitrise CLI to use this bitrise.yml!") } return bitriseConfig, warnings, nil }
func checkIsBitriseToolInstalled(toolname, minVersion string, isInstall bool) error { doInstall := func() error { officialGithub := "https://github.com/bitrise-io/" + toolname fmt.Println() log.Warnln("No supported " + toolname + " version found.") log.Infoln("You can find more information about "+toolname+" on its official GitHub page:", officialGithub) // Install fmt.Print("Installing...") err := progress.SimpleProgressE(".", 2*time.Second, func() error { return retry.Times(2).Wait(5 * time.Second).Try(func(attempt uint) error { if attempt > 0 { fmt.Println() fmt.Print("==> Download failed, retrying ...") } return tools.InstallToolFromGitHub(toolname, "bitrise-io", minVersion) }) }) fmt.Println() if err != nil { return err } // check again return checkIsBitriseToolInstalled(toolname, minVersion, false) } // check whether installed progInstallPth, err := utils.CheckProgramInstalledPath(toolname) if err != nil { if !isInstall { return err } return doInstall() } verStr, err := cmdex.RunCommandAndReturnStdout(toolname, "-version") if err != nil { log.Infoln("") return errors.New("Failed to get version") } // version check isVersionOk, err := versions.IsVersionGreaterOrEqual(verStr, minVersion) if err != nil { log.Error("Failed to validate installed version") return err } if !isVersionOk { log.Warn("Installed "+toolname+" found, but not a supported version: ", verStr) if !isInstall { return errors.New("Failed to install required version.") } log.Warn("Updating...") return doInstall() } log.Infoln(" * "+colorstring.Green("[OK]")+" "+toolname+" :", progInstallPth) log.Infoln(" version :", verStr) return nil }