CLI/TUI for drafting, repeating, and publishing daily standup updates as GitHub issues
github
go
cli
golang
management
project
tui
daily
1package cmd
2
3import (
4 "context"
5 "fmt"
6 "text/tabwriter"
7
8 "github.com/spf13/cobra"
9 "github.com/vieitesss/pad/internal/ghcli"
10 "github.com/vieitesss/pad/internal/tui"
11)
12
13func newListCmd() *cobra.Command {
14 var limit int
15
16 cmd := &cobra.Command{
17 Use: "list",
18 Short: "List daily update issues created by you",
19 RunE: func(cmd *cobra.Command, _ []string) error {
20 env, err := loadEnv()
21 if err != nil {
22 return err
23 }
24
25 ctx := context.Background()
26 if err := env.gh.EnsureReady(ctx); err != nil {
27 return err
28 }
29
30 issues, err := tui.RunWithSpinner(ctx, "Fetching your daily updates", func(ctx context.Context) ([]ghcli.DailyUpdateIssue, error) {
31 return env.gh.ListDailyUpdateIssues(ctx, env.cfg.GitHubRepo, env.cfg.Labels, limit)
32 })
33 if err != nil {
34 return err
35 }
36
37 if len(issues) == 0 {
38 fmt.Fprintln(cmd.OutOrStdout(), "no remote daily update issues found for the authenticated user")
39 return nil
40 }
41
42 writer := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 4, 2, ' ', 0)
43 fmt.Fprintln(writer, "DATE\tNUMBER\tSTATE\tURL")
44 for _, issue := range issues {
45 fmt.Fprintf(writer, "%s\t#%d\t%s\t%s\n", issue.Date, issue.Number, issue.State, issue.URL)
46 }
47
48 return writer.Flush()
49 },
50 }
51
52 cmd.Flags().IntVar(&limit, "limit", 10, "Maximum number of entries to show")
53
54 return cmd
55}