chore(cli): reduce clutter from exp tasks list command (#19727)

Fixes https://github.com/coder/coder/issues/19623

- Stop showing the long ID of each task by default.
- Add new `--quiet` flag to only show IDs.
This commit is contained in:
Danielle Maywood
2025-09-08 13:23:18 +01:00
committed by GitHub
parent 2701d5588e
commit 9f66395931
2 changed files with 56 additions and 1 deletions
+17 -1
View File
@@ -36,13 +36,13 @@ func (r *RootCmd) taskList() *serpent.Command {
statusFilter string
all bool
user string
quiet bool
client = new(codersdk.Client)
formatter = cliui.NewOutputFormatter(
cliui.TableFormat(
[]taskListRow{},
[]string{
"id",
"name",
"status",
"state",
@@ -98,6 +98,14 @@ func (r *RootCmd) taskList() *serpent.Command {
Default: "",
Value: serpent.StringOf(&user),
},
{
Name: "quiet",
Description: "Only display task IDs.",
Flag: "quiet",
FlagShorthand: "q",
Default: "false",
Value: serpent.BoolOf(&quiet),
},
},
Handler: func(inv *serpent.Invocation) error {
ctx := inv.Context()
@@ -116,6 +124,14 @@ func (r *RootCmd) taskList() *serpent.Command {
return xerrors.Errorf("list tasks: %w", err)
}
if quiet {
for _, task := range tasks {
_, _ = fmt.Fprintln(inv.Stdout, task.ID.String())
}
return nil
}
// If no rows and not JSON, show a friendly message.
if len(tasks) == 0 && formatter.FormatID() != cliui.JSONFormat().ID() {
_, _ = fmt.Fprintln(inv.Stderr, "No tasks found.")
@@ -6,6 +6,8 @@ import (
"database/sql"
"encoding/json"
"io"
"slices"
"strings"
"testing"
"github.com/google/uuid"
@@ -200,6 +202,43 @@ func TestExpTaskList(t *testing.T) {
pty.ExpectMatch(ws.Name)
})
t.Run("Quiet", func(t *testing.T) {
t.Parallel()
// Quiet logger to reduce noise.
quiet := slog.Make(sloghuman.Sink(io.Discard))
client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{Logger: &quiet})
owner := coderdtest.CreateFirstUser(t, client)
memberClient, memberUser := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
// Given: We have two tasks
task1 := makeAITask(t, db, owner.OrganizationID, owner.UserID, memberUser.ID, database.WorkspaceTransitionStart, "keep me running")
task2 := makeAITask(t, db, owner.OrganizationID, owner.UserID, memberUser.ID, database.WorkspaceTransitionStop, "stop me please")
// Given: We add the `--quiet` flag
inv, root := clitest.New(t, "exp", "task", "list", "--quiet")
clitest.SetupConfig(t, memberClient, root)
ctx := testutil.Context(t, testutil.WaitShort)
var stdout bytes.Buffer
inv.Stdout = &stdout
inv.Stderr = &stdout
// When: We run the command
err := inv.WithContext(ctx).Run()
require.NoError(t, err)
want := []string{task1.ID.String(), task2.ID.String()}
got := slice.Filter(strings.Split(stdout.String(), "\n"), func(s string) bool {
return len(s) != 0
})
slices.Sort(want)
slices.Sort(got)
require.Equal(t, want, got)
})
}
func TestExpTaskList_OwnerCanListOthers(t *testing.T) {