github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/pr/checks/output.go (about)

     1  package checks
     2  
     3  import (
     4  	"fmt"
     5  	"sort"
     6  
     7  	"github.com/ungtb10d/cli/v2/pkg/iostreams"
     8  	"github.com/ungtb10d/cli/v2/utils"
     9  )
    10  
    11  func addRow(tp utils.TablePrinter, io *iostreams.IOStreams, o check) {
    12  	cs := io.ColorScheme()
    13  	elapsed := ""
    14  
    15  	if !o.StartedAt.IsZero() && !o.CompletedAt.IsZero() {
    16  		e := o.CompletedAt.Sub(o.StartedAt)
    17  		if e > 0 {
    18  			elapsed = e.String()
    19  		}
    20  	}
    21  
    22  	mark := "✓"
    23  	markColor := cs.Green
    24  	switch o.Bucket {
    25  	case "fail":
    26  		mark = "X"
    27  		markColor = cs.Red
    28  	case "pending":
    29  		mark = "*"
    30  		markColor = cs.Yellow
    31  	case "skipping":
    32  		mark = "-"
    33  		markColor = cs.Gray
    34  	}
    35  
    36  	if io.IsStdoutTTY() {
    37  		tp.AddField(mark, nil, markColor)
    38  		tp.AddField(o.Name, nil, nil)
    39  		tp.AddField(elapsed, nil, nil)
    40  		tp.AddField(o.Link, nil, nil)
    41  	} else {
    42  		tp.AddField(o.Name, nil, nil)
    43  		tp.AddField(o.Bucket, nil, nil)
    44  		if elapsed == "" {
    45  			tp.AddField("0", nil, nil)
    46  		} else {
    47  			tp.AddField(elapsed, nil, nil)
    48  		}
    49  		tp.AddField(o.Link, nil, nil)
    50  	}
    51  
    52  	tp.EndRow()
    53  }
    54  
    55  func printSummary(io *iostreams.IOStreams, counts checkCounts) {
    56  	summary := ""
    57  	if counts.Failed+counts.Passed+counts.Skipping+counts.Pending > 0 {
    58  		if counts.Failed > 0 {
    59  			summary = "Some checks were not successful"
    60  		} else if counts.Pending > 0 {
    61  			summary = "Some checks are still pending"
    62  		} else {
    63  			summary = "All checks were successful"
    64  		}
    65  
    66  		tallies := fmt.Sprintf("%d failing, %d successful, %d skipped, and %d pending checks",
    67  			counts.Failed, counts.Passed, counts.Skipping, counts.Pending)
    68  
    69  		summary = fmt.Sprintf("%s\n%s", io.ColorScheme().Bold(summary), tallies)
    70  	}
    71  
    72  	if io.IsStdoutTTY() {
    73  		fmt.Fprintln(io.Out, summary)
    74  		fmt.Fprintln(io.Out)
    75  	}
    76  }
    77  
    78  func printTable(io *iostreams.IOStreams, checks []check) error {
    79  	//nolint:staticcheck // SA1019: utils.NewTablePrinter is deprecated: use internal/tableprinter
    80  	tp := utils.NewTablePrinter(io)
    81  
    82  	sort.Slice(checks, func(i, j int) bool {
    83  		b0 := checks[i].Bucket
    84  		n0 := checks[i].Name
    85  		l0 := checks[i].Link
    86  		b1 := checks[j].Bucket
    87  		n1 := checks[j].Name
    88  		l1 := checks[j].Link
    89  
    90  		if b0 == b1 {
    91  			if n0 == n1 {
    92  				return l0 < l1
    93  			}
    94  			return n0 < n1
    95  		}
    96  
    97  		return (b0 == "fail") || (b0 == "pending" && b1 == "success")
    98  	})
    99  
   100  	for _, o := range checks {
   101  		addRow(tp, io, o)
   102  	}
   103  
   104  	err := tp.Render()
   105  	if err != nil {
   106  		return err
   107  	}
   108  
   109  	return nil
   110  }