feat: v0.3.0d — add PR checks, iostreams, aliases, and broad enhancements
Add PR checks command, iostreams/text packages for colored table output, top-level run/workflow aliases matching gh CLI structure. Enhance actions, issues, PRs, releases, repos, labels, milestones, and wiki commands with improved flags, JSON output, and error handling.
This commit is contained in:
parent
7c0dcc8696
commit
113505de95
29 changed files with 3131 additions and 542 deletions
64
internal/iostreams/table.go
Normal file
64
internal/iostreams/table.go
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
package iostreams
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"text/tabwriter"
|
||||
)
|
||||
|
||||
// TablePrinter prints TTY-aware tables. In TTY mode it uses aligned columns with
|
||||
// bold headers. In pipe mode it emits tab-separated values without headers.
|
||||
type TablePrinter struct {
|
||||
ios *IOStreams
|
||||
headers []string
|
||||
rows [][]string
|
||||
}
|
||||
|
||||
// NewTablePrinter creates a TablePrinter that writes to ios.Out.
|
||||
func NewTablePrinter(ios *IOStreams) *TablePrinter {
|
||||
return &TablePrinter{
|
||||
ios: ios,
|
||||
}
|
||||
}
|
||||
|
||||
// AddHeader sets the column headers. Headers are only displayed in TTY mode.
|
||||
func (t *TablePrinter) AddHeader(headers ...string) {
|
||||
t.headers = headers
|
||||
}
|
||||
|
||||
// AddRow appends a row of fields to the table.
|
||||
func (t *TablePrinter) AddRow(fields ...string) {
|
||||
t.rows = append(t.rows, fields)
|
||||
}
|
||||
|
||||
// Render writes the table to the IOStreams output. In TTY mode it uses tabwriter
|
||||
// with bold headers. In pipe mode it emits tab-separated values without headers.
|
||||
func (t *TablePrinter) Render() error {
|
||||
if !t.ios.IsStdoutTTY() {
|
||||
// Pipe mode: tab-separated, no headers
|
||||
for _, row := range t.rows {
|
||||
if _, err := fmt.Fprintln(t.ios.Out, strings.Join(row, "\t")); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// TTY mode: use tabwriter with aligned columns
|
||||
w := tabwriter.NewWriter(t.ios.Out, 0, 0, 2, ' ', 0)
|
||||
|
||||
if len(t.headers) > 0 {
|
||||
cs := t.ios.ColorScheme()
|
||||
boldHeaders := make([]string, len(t.headers))
|
||||
for i, h := range t.headers {
|
||||
boldHeaders[i] = cs.Bold(h)
|
||||
}
|
||||
fmt.Fprintln(w, strings.Join(boldHeaders, "\t"))
|
||||
}
|
||||
|
||||
for _, row := range t.rows {
|
||||
fmt.Fprintln(w, strings.Join(row, "\t"))
|
||||
}
|
||||
|
||||
return w.Flush()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue