func printSummary() { totalStepCount := 0 successStepCount := 0 failedStepCount := 0 failedNotImportantStepCount := 0 skippedStepCount := 0 successStepCount += len(buildRunResults.SuccessSteps) failedStepCount += len(buildRunResults.FailedSteps) failedNotImportantStepCount += len(buildRunResults.FailedNotImportantSteps) skippedStepCount += len(buildRunResults.SkippedSteps) totalStepCount = successStepCount + failedStepCount + failedNotImportantStepCount + skippedStepCount fmt.Println() log.Infoln("==> Summary:") runTime := time.Now().Sub(startTime) log.Info("Total run time: " + bitrise.TimeToFormattedSeconds(runTime, " seconds")) if totalStepCount > 0 { log.Infof("Out of %d steps:", totalStepCount) if successStepCount > 0 { log.Info(colorstring.Greenf(" * %d was successful", successStepCount)) } if failedStepCount > 0 { log.Info(colorstring.Redf(" * %d failed", failedStepCount)) } if failedNotImportantStepCount > 0 { log.Info(colorstring.Yellowf(" * %d failed but was marked as skippable and", failedNotImportantStepCount)) } if skippedStepCount > 0 { log.Info(colorstring.Whitef(" * %d was skipped", skippedStepCount)) } fmt.Println() if failedStepCount > 0 { log.Fatal("FINISHED but a couple of steps failed - Ouch") } else { log.Info("DONE - Congrats!!") if failedNotImportantStepCount > 0 { log.Warn("P.S.: a couple of non imporatant steps failed") } } } }
func printStepSummary(title string, resultCode int, duration time.Duration, exitCode int) { runTime := bitrise.TimeToFormattedSeconds(duration, " sec") content := fmt.Sprintf("%s | .... | %s", title, runTime) if resultCode == stepRunResultCodeFailed || resultCode == stepRunResultCodeFailedNotImportant { content = fmt.Sprintf("%s | .... | exit code: %d | %s", title, exitCode, runTime) } if len(content) > stepRunSummaryBoxMaxWidthChars { dif := len(content) - stepRunSummaryBoxMaxWidthChars title = title[0:(len(title) - dif)] content = fmt.Sprintf("%s | .... | %s", title, runTime) if resultCode == stepRunResultCodeFailed || resultCode == stepRunResultCodeFailedNotImportant { content = fmt.Sprintf("%s | .... | exit code: %d | %s", title, exitCode, runTime) } } sep := strings.Repeat("-", len(content)+2) log.Info(sep) switch resultCode { case stepRunResultCodeSuccess: runStateIcon := "✅ " content = fmt.Sprintf("%s | %s | %s", runStateIcon, colorstring.Green(title), runTime) break case stepRunResultCodeFailed: runStateIcon := "❌ " content = fmt.Sprintf("%s | %s | %s | exit code: %d", runStateIcon, colorstring.Red(title), runTime, exitCode) break case stepRunResultCodeFailedNotImportant: runStateIcon := "❌ " content = fmt.Sprintf("%s | %s | %s | exit code: %d", runStateIcon, colorstring.Yellow(title), runTime, exitCode) break case stepRunResultCodeSkipped, stepRunResultCodeSkippedWithRunIf: runStateIcon := "➡ " content = fmt.Sprintf("%s | %s | %s", runStateIcon, colorstring.White(title), runTime) break default: log.Error("Unkown result code") return } log.Infof("| " + content + " |") log.Info(sep) fmt.Println() }