From f1613ed7971a62f28bc410b90cf70d5fc597e837 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Mon, 2 Nov 2020 11:30:41 -0600 Subject: [PATCH 1/5] Restructure go util packages --- .golangci.yml | 6 +++--- ci/integration/devurls_test.go | 2 +- ci/integration/envs_test.go | 2 +- ci/integration/integration_test.go | 2 +- ci/integration/secrets_test.go | 2 +- ci/integration/setup_test.go | 2 +- ci/integration/ssh_test.go | 2 +- ci/integration/users_test.go | 2 +- cmd/coder/main.go | 2 +- internal/activity/pusher.go | 2 +- internal/cmd/auth.go | 2 +- internal/cmd/ceapi.go | 2 +- internal/cmd/envs.go | 2 +- internal/cmd/login.go | 2 +- internal/cmd/logout.go | 2 +- internal/cmd/rebuild.go | 2 +- internal/cmd/resourcemanager.go | 2 +- internal/cmd/secrets.go | 2 +- internal/cmd/shell.go | 2 +- internal/cmd/sync.go | 2 +- internal/cmd/urls.go | 2 +- internal/sync/sync.go | 2 +- {internal => pkg}/clog/doc.go | 0 {internal => pkg}/clog/errgroup.go | 0 {internal => pkg}/clog/error.go | 0 {ci => pkg}/tcli/doc.go | 0 {ci => pkg}/tcli/tcli.go | 0 {ci => pkg}/tcli/tcli_test.go | 2 +- 28 files changed, 25 insertions(+), 25 deletions(-) rename {internal => pkg}/clog/doc.go (100%) rename {internal => pkg}/clog/errgroup.go (100%) rename {internal => pkg}/clog/error.go (100%) rename {ci => pkg}/tcli/doc.go (100%) rename {ci => pkg}/tcli/tcli.go (100%) rename {ci => pkg}/tcli/tcli_test.go (97%) diff --git a/.golangci.yml b/.golangci.yml index aa56dabb..193ab2b8 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -12,6 +12,6 @@ linters-settings: settings: printf: funcs: # Run `go tool vet help printf` to see available settings for `printf` analyzer. - - (cdr.dev/coder-cli/internal/clog).Tipf - - (cdr.dev/coder-cli/internal/clog).Hintf - - (cdr.dev/coder-cli/internal/clog).Causef \ No newline at end of file + - (cdr.dev/coder-cli/pkg/clog).Tipf + - (cdr.dev/coder-cli/pkg/clog).Hintf + - (cdr.dev/coder-cli/pkg/clog).Causef \ No newline at end of file diff --git a/ci/integration/devurls_test.go b/ci/integration/devurls_test.go index 6dee8211..315d122e 100644 --- a/ci/integration/devurls_test.go +++ b/ci/integration/devurls_test.go @@ -4,7 +4,7 @@ import ( "context" "testing" - "cdr.dev/coder-cli/ci/tcli" + "cdr.dev/coder-cli/pkg/tcli" ) func TestDevURLCLI(t *testing.T) { diff --git a/ci/integration/envs_test.go b/ci/integration/envs_test.go index 075f7222..76138c6d 100644 --- a/ci/integration/envs_test.go +++ b/ci/integration/envs_test.go @@ -9,8 +9,8 @@ import ( "testing" "time" - "cdr.dev/coder-cli/ci/tcli" "cdr.dev/coder-cli/coder-sdk" + "cdr.dev/coder-cli/pkg/tcli" "cdr.dev/slog" "cdr.dev/slog/sloggers/slogtest" "cdr.dev/slog/sloggers/slogtest/assert" diff --git a/ci/integration/integration_test.go b/ci/integration/integration_test.go index 8475de4f..1fc644e4 100644 --- a/ci/integration/integration_test.go +++ b/ci/integration/integration_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "cdr.dev/coder-cli/ci/tcli" + "cdr.dev/coder-cli/pkg/tcli" "cdr.dev/slog/sloggers/slogtest/assert" ) diff --git a/ci/integration/secrets_test.go b/ci/integration/secrets_test.go index fadcc84e..7d3b6663 100644 --- a/ci/integration/secrets_test.go +++ b/ci/integration/secrets_test.go @@ -6,7 +6,7 @@ import ( "regexp" "testing" - "cdr.dev/coder-cli/ci/tcli" + "cdr.dev/coder-cli/pkg/tcli" ) func TestSecrets(t *testing.T) { diff --git a/ci/integration/setup_test.go b/ci/integration/setup_test.go index 1919f6a0..1ccb8e0e 100644 --- a/ci/integration/setup_test.go +++ b/ci/integration/setup_test.go @@ -9,7 +9,7 @@ import ( "strings" "testing" - "cdr.dev/coder-cli/ci/tcli" + "cdr.dev/coder-cli/pkg/tcli" "golang.org/x/xerrors" ) diff --git a/ci/integration/ssh_test.go b/ci/integration/ssh_test.go index 3882b719..6a084a0d 100644 --- a/ci/integration/ssh_test.go +++ b/ci/integration/ssh_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - "cdr.dev/coder-cli/ci/tcli" "cdr.dev/coder-cli/coder-sdk" + "cdr.dev/coder-cli/pkg/tcli" ) func TestSSH(t *testing.T) { diff --git a/ci/integration/users_test.go b/ci/integration/users_test.go index 55d554f2..1272337f 100644 --- a/ci/integration/users_test.go +++ b/ci/integration/users_test.go @@ -4,8 +4,8 @@ import ( "context" "testing" - "cdr.dev/coder-cli/ci/tcli" "cdr.dev/coder-cli/coder-sdk" + "cdr.dev/coder-cli/pkg/tcli" "cdr.dev/slog/sloggers/slogtest/assert" ) diff --git a/cmd/coder/main.go b/cmd/coder/main.go index d59a1abe..73e1858d 100644 --- a/cmd/coder/main.go +++ b/cmd/coder/main.go @@ -9,10 +9,10 @@ import ( "os" "runtime" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/cmd" "cdr.dev/coder-cli/internal/version" "cdr.dev/coder-cli/internal/x/xterminal" + "cdr.dev/coder-cli/pkg/clog" ) func main() { diff --git a/internal/activity/pusher.go b/internal/activity/pusher.go index 6d0a224f..e54786e7 100644 --- a/internal/activity/pusher.go +++ b/internal/activity/pusher.go @@ -8,7 +8,7 @@ import ( "golang.org/x/time/rate" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" + "cdr.dev/coder-cli/pkg/clog" ) const pushInterval = time.Minute diff --git a/internal/cmd/auth.go b/internal/cmd/auth.go index 1860298d..b517abc6 100644 --- a/internal/cmd/auth.go +++ b/internal/cmd/auth.go @@ -9,9 +9,9 @@ import ( "golang.org/x/xerrors" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/config" "cdr.dev/coder-cli/internal/version" + "cdr.dev/coder-cli/pkg/clog" ) var errNeedLogin = clog.Fatal( diff --git a/internal/cmd/ceapi.go b/internal/cmd/ceapi.go index e453cbae..3d91c176 100644 --- a/internal/cmd/ceapi.go +++ b/internal/cmd/ceapi.go @@ -6,7 +6,7 @@ import ( "strings" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" + "cdr.dev/coder-cli/pkg/clog" "golang.org/x/xerrors" ) diff --git a/internal/cmd/envs.go b/internal/cmd/envs.go index 8805e208..ff9e699a 100644 --- a/internal/cmd/envs.go +++ b/internal/cmd/envs.go @@ -7,8 +7,8 @@ import ( "os" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/x/xtabwriter" + "cdr.dev/coder-cli/pkg/clog" "github.com/manifoldco/promptui" "github.com/spf13/cobra" diff --git a/internal/cmd/login.go b/internal/cmd/login.go index d6a8db11..38a34982 100644 --- a/internal/cmd/login.go +++ b/internal/cmd/login.go @@ -9,9 +9,9 @@ import ( "strings" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/config" "cdr.dev/coder-cli/internal/loginsrv" + "cdr.dev/coder-cli/pkg/clog" "github.com/pkg/browser" "github.com/spf13/cobra" "golang.org/x/sync/errgroup" diff --git a/internal/cmd/logout.go b/internal/cmd/logout.go index dde3d758..8c1c27a6 100644 --- a/internal/cmd/logout.go +++ b/internal/cmd/logout.go @@ -3,8 +3,8 @@ package cmd import ( "os" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/config" + "cdr.dev/coder-cli/pkg/clog" "github.com/spf13/cobra" "golang.org/x/xerrors" ) diff --git a/internal/cmd/rebuild.go b/internal/cmd/rebuild.go index 687e132c..ebb1cc8a 100644 --- a/internal/cmd/rebuild.go +++ b/internal/cmd/rebuild.go @@ -8,7 +8,7 @@ import ( "time" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" + "cdr.dev/coder-cli/pkg/clog" "github.com/briandowns/spinner" "github.com/fatih/color" "github.com/manifoldco/promptui" diff --git a/internal/cmd/resourcemanager.go b/internal/cmd/resourcemanager.go index 1fbc210d..2e636d7e 100644 --- a/internal/cmd/resourcemanager.go +++ b/internal/cmd/resourcemanager.go @@ -8,7 +8,7 @@ import ( "text/tabwriter" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" + "cdr.dev/coder-cli/pkg/clog" "github.com/spf13/cobra" "golang.org/x/xerrors" ) diff --git a/internal/cmd/secrets.go b/internal/cmd/secrets.go index 7c8dfdf6..a29beb00 100644 --- a/internal/cmd/secrets.go +++ b/internal/cmd/secrets.go @@ -10,8 +10,8 @@ import ( "golang.org/x/xerrors" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/x/xtabwriter" + "cdr.dev/coder-cli/pkg/clog" ) func secretsCmd() *cobra.Command { diff --git a/internal/cmd/shell.go b/internal/cmd/shell.go index 7a79a2b7..07904b3e 100644 --- a/internal/cmd/shell.go +++ b/internal/cmd/shell.go @@ -16,8 +16,8 @@ import ( "cdr.dev/coder-cli/coder-sdk" "cdr.dev/coder-cli/internal/activity" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/x/xterminal" + "cdr.dev/coder-cli/pkg/clog" "cdr.dev/wsep" ) diff --git a/internal/cmd/sync.go b/internal/cmd/sync.go index 9f162b1b..41a24d4e 100644 --- a/internal/cmd/sync.go +++ b/internal/cmd/sync.go @@ -9,8 +9,8 @@ import ( "strings" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/sync" + "cdr.dev/coder-cli/pkg/clog" "github.com/spf13/cobra" "golang.org/x/xerrors" ) diff --git a/internal/cmd/urls.go b/internal/cmd/urls.go index fa4ebd0f..52294b02 100644 --- a/internal/cmd/urls.go +++ b/internal/cmd/urls.go @@ -14,8 +14,8 @@ import ( "golang.org/x/xerrors" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/clog" "cdr.dev/coder-cli/internal/x/xtabwriter" + "cdr.dev/coder-cli/pkg/clog" ) func urlCmd() *cobra.Command { diff --git a/internal/sync/sync.go b/internal/sync/sync.go index 177ff9c9..225ec598 100644 --- a/internal/sync/sync.go +++ b/internal/sync/sync.go @@ -23,7 +23,7 @@ import ( "cdr.dev/coder-cli/coder-sdk" "cdr.dev/coder-cli/internal/activity" - "cdr.dev/coder-cli/internal/clog" + "cdr.dev/coder-cli/pkg/clog" "cdr.dev/wsep" ) diff --git a/internal/clog/doc.go b/pkg/clog/doc.go similarity index 100% rename from internal/clog/doc.go rename to pkg/clog/doc.go diff --git a/internal/clog/errgroup.go b/pkg/clog/errgroup.go similarity index 100% rename from internal/clog/errgroup.go rename to pkg/clog/errgroup.go diff --git a/internal/clog/error.go b/pkg/clog/error.go similarity index 100% rename from internal/clog/error.go rename to pkg/clog/error.go diff --git a/ci/tcli/doc.go b/pkg/tcli/doc.go similarity index 100% rename from ci/tcli/doc.go rename to pkg/tcli/doc.go diff --git a/ci/tcli/tcli.go b/pkg/tcli/tcli.go similarity index 100% rename from ci/tcli/tcli.go rename to pkg/tcli/tcli.go diff --git a/ci/tcli/tcli_test.go b/pkg/tcli/tcli_test.go similarity index 97% rename from ci/tcli/tcli_test.go rename to pkg/tcli/tcli_test.go index 97bd1b6e..5ecce5f0 100644 --- a/ci/tcli/tcli_test.go +++ b/pkg/tcli/tcli_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "cdr.dev/coder-cli/ci/tcli" + "cdr.dev/coder-cli/pkg/tcli" "cdr.dev/slog/sloggers/slogtest/assert" ) From a8865abbce3530aed5e13f6a70f0c8e11164d3b6 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Mon, 2 Nov 2020 11:38:41 -0600 Subject: [PATCH 2/5] Move xtabwriter to tablewriter --- coder-sdk/devurl.go | 10 ++--- coder-sdk/env.go | 40 +++++++++---------- coder-sdk/secrets.go | 12 +++--- coder-sdk/users.go | 12 +++--- internal/cmd/envs.go | 4 +- internal/cmd/secrets.go | 4 +- internal/cmd/urls.go | 14 +++---- internal/cmd/users.go | 5 +-- pkg/tablewriter/doc.go | 1 + .../tablewriter/tablewriter.go | 17 +++----- 10 files changed, 57 insertions(+), 62 deletions(-) create mode 100644 pkg/tablewriter/doc.go rename internal/x/xtabwriter/tabwriter.go => pkg/tablewriter/tablewriter.go (78%) diff --git a/coder-sdk/devurl.go b/coder-sdk/devurl.go index e5c387e6..a288d418 100644 --- a/coder-sdk/devurl.go +++ b/coder-sdk/devurl.go @@ -8,11 +8,11 @@ import ( // DevURL is the parsed json response record for a devURL from cemanager. type DevURL struct { - ID string `json:"id" tab:"ID"` - URL string `json:"url" tab:"URL"` - Port int `json:"port" tab:"Port"` - Access string `json:"access" tab:"Access"` - Name string `json:"name" tab:"Name"` + ID string `json:"id" table:"ID"` + URL string `json:"url" table:"URL"` + Port int `json:"port" table:"Port"` + Access string `json:"access" table:"Access"` + Name string `json:"name" table:"Name"` } type delDevURLRequest struct { diff --git a/coder-sdk/env.go b/coder-sdk/env.go index a95ed4bf..a15f1caa 100644 --- a/coder-sdk/env.go +++ b/coder-sdk/env.go @@ -13,32 +13,32 @@ import ( // Environment describes a Coder environment type Environment struct { - ID string `json:"id" tab:"-"` - Name string `json:"name" tab:"Name"` - ImageID string `json:"image_id" tab:"-"` - ImageTag string `json:"image_tag" tab:"ImageTag"` - OrganizationID string `json:"organization_id" tab:"-"` - UserID string `json:"user_id" tab:"-"` - LastBuiltAt time.Time `json:"last_built_at" tab:"-"` - CPUCores float32 `json:"cpu_cores" tab:"CPUCores"` - MemoryGB float32 `json:"memory_gb" tab:"MemoryGB"` - DiskGB int `json:"disk_gb" tab:"DiskGB"` - GPUs int `json:"gpus" tab:"GPUs"` - Updating bool `json:"updating" tab:"Updating"` - LatestStat EnvironmentStat `json:"latest_stat" tab:"Status"` - RebuildMessages []RebuildMessage `json:"rebuild_messages" tab:"-"` - CreatedAt time.Time `json:"created_at" tab:"-"` - UpdatedAt time.Time `json:"updated_at" tab:"-"` - LastOpenedAt time.Time `json:"last_opened_at" tab:"-"` - LastConnectionAt time.Time `json:"last_connection_at" tab:"-"` - AutoOffThreshold xjson.MSDuration `json:"auto_off_threshold" tab:"-"` + ID string `json:"id" table:"-"` + Name string `json:"name" table:"Name"` + ImageID string `json:"image_id" table:"-"` + ImageTag string `json:"image_tag" table:"ImageTag"` + OrganizationID string `json:"organization_id" table:"-"` + UserID string `json:"user_id" table:"-"` + LastBuiltAt time.Time `json:"last_built_at" table:"-"` + CPUCores float32 `json:"cpu_cores" table:"CPUCores"` + MemoryGB float32 `json:"memory_gb" table:"MemoryGB"` + DiskGB int `json:"disk_gb" table:"DiskGB"` + GPUs int `json:"gpus" table:"GPUs"` + Updating bool `json:"updating" table:"Updating"` + LatestStat EnvironmentStat `json:"latest_stat" table:"Status"` + RebuildMessages []RebuildMessage `json:"rebuild_messages" table:"-"` + CreatedAt time.Time `json:"created_at" table:"-"` + UpdatedAt time.Time `json:"updated_at" table:"-"` + LastOpenedAt time.Time `json:"last_opened_at" table:"-"` + LastConnectionAt time.Time `json:"last_connection_at" table:"-"` + AutoOffThreshold xjson.MSDuration `json:"auto_off_threshold" table:"-"` } // RebuildMessage defines the message shown when an Environment requires a rebuild for it can be accessed. type RebuildMessage struct { Text string `json:"text"` Required bool `json:"required"` - AutoOffThreshold xjson.MSDuration `json:"auto_off_threshold" tab:"-"` + AutoOffThreshold xjson.MSDuration `json:"auto_off_threshold" table:"-"` } // EnvironmentStat represents the state of an environment diff --git a/coder-sdk/secrets.go b/coder-sdk/secrets.go index 21a1583b..cb5c1535 100644 --- a/coder-sdk/secrets.go +++ b/coder-sdk/secrets.go @@ -8,12 +8,12 @@ import ( // Secret describes a Coder secret type Secret struct { - ID string `json:"id" tab:"-"` - Name string `json:"name" tab:"Name"` - Value string `json:"value,omitempty" tab:"Value"` - Description string `json:"description" tab:"Description"` - CreatedAt time.Time `json:"created_at" tab:"CreatedAt"` - UpdatedAt time.Time `json:"updated_at" tab:"-"` + ID string `json:"id" table:"-"` + Name string `json:"name" table:"Name"` + Value string `json:"value,omitempty" table:"Value"` + Description string `json:"description" table:"Description"` + CreatedAt time.Time `json:"created_at" table:"CreatedAt"` + UpdatedAt time.Time `json:"updated_at" table:"-"` } // Secrets gets all secrets for the given user diff --git a/coder-sdk/users.go b/coder-sdk/users.go index 1008f38b..e988a697 100644 --- a/coder-sdk/users.go +++ b/coder-sdk/users.go @@ -8,12 +8,12 @@ import ( // User describes a Coder user account. type User struct { - ID string `json:"id" tab:"-"` - Email string `json:"email" tab:"Email"` - Username string `json:"username" tab:"Username"` - Name string `json:"name" tab:"Name"` - CreatedAt time.Time `json:"created_at" tab:"CreatedAt"` - UpdatedAt time.Time `json:"updated_at" tab:"-"` + ID string `json:"id" table:"-"` + Email string `json:"email" table:"Email"` + Username string `json:"username" table:"Username"` + Name string `json:"name" table:"Name"` + CreatedAt time.Time `json:"created_at" table:"CreatedAt"` + UpdatedAt time.Time `json:"updated_at" table:"-"` } // Me gets the details of the authenticated user. diff --git a/internal/cmd/envs.go b/internal/cmd/envs.go index ff9e699a..60d34de3 100644 --- a/internal/cmd/envs.go +++ b/internal/cmd/envs.go @@ -7,7 +7,7 @@ import ( "os" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/x/xtabwriter" + "cdr.dev/coder-cli/internal/x/tablewriter" "cdr.dev/coder-cli/pkg/clog" "github.com/manifoldco/promptui" @@ -62,7 +62,7 @@ func lsEnvsCommand(user *string) *cobra.Command { switch outputFmt { case "human": - err := xtabwriter.WriteTable(len(envs), func(i int) interface{} { + err := tablewriter.WriteTable(len(envs), func(i int) interface{} { return envs[i] }) if err != nil { diff --git a/internal/cmd/secrets.go b/internal/cmd/secrets.go index a29beb00..856eb8c9 100644 --- a/internal/cmd/secrets.go +++ b/internal/cmd/secrets.go @@ -10,7 +10,7 @@ import ( "golang.org/x/xerrors" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/x/xtabwriter" + "cdr.dev/coder-cli/internal/x/tablewriter" "cdr.dev/coder-cli/pkg/clog" ) @@ -159,7 +159,7 @@ func listSecretsCmd(userEmail *string) func(cmd *cobra.Command, _ []string) erro return nil } - err = xtabwriter.WriteTable(len(secrets), func(i int) interface{} { + err = tablewriter.WriteTable(len(secrets), func(i int) interface{} { s := secrets[i] s.Value = "******" // value is omitted from bulk responses return s diff --git a/internal/cmd/urls.go b/internal/cmd/urls.go index 52294b02..927ce36d 100644 --- a/internal/cmd/urls.go +++ b/internal/cmd/urls.go @@ -14,7 +14,7 @@ import ( "golang.org/x/xerrors" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/x/xtabwriter" + "cdr.dev/coder-cli/internal/x/tablewriter" "cdr.dev/coder-cli/pkg/clog" ) @@ -51,11 +51,11 @@ func urlCmd() *cobra.Command { // DevURL is the parsed json response record for a devURL from cemanager type DevURL struct { - ID string `json:"id" tab:"-"` - URL string `json:"url" tab:"URL"` - Port int `json:"port" tab:"Port"` - Name string `json:"name" tab:"-"` - Access string `json:"access" tab:"Access"` + ID string `json:"id" table:"-"` + URL string `json:"url" table:"URL"` + Port int `json:"port" table:"Port"` + Name string `json:"name" table:"-"` + Access string `json:"access" table:"Access"` } var urlAccessLevel = map[string]string{ @@ -104,7 +104,7 @@ func listDevURLsCmd(outputFmt *string) func(cmd *cobra.Command, args []string) e clog.LogInfo(fmt.Sprintf("no devURLs found for environment %q", envName)) return nil } - err := xtabwriter.WriteTable(len(devURLs), func(i int) interface{} { + err := tablewriter.WriteTable(len(devURLs), func(i int) interface{} { return devURLs[i] }) if err != nil { diff --git a/internal/cmd/users.go b/internal/cmd/users.go index 87f40fa4..debf5e56 100644 --- a/internal/cmd/users.go +++ b/internal/cmd/users.go @@ -4,10 +4,9 @@ import ( "encoding/json" "os" + "cdr.dev/coder-cli/internal/x/tablewriter" "github.com/spf13/cobra" "golang.org/x/xerrors" - - "cdr.dev/coder-cli/internal/x/xtabwriter" ) func usersCmd() *cobra.Command { @@ -47,7 +46,7 @@ func listUsers(outputFmt *string) func(cmd *cobra.Command, args []string) error case "human": // For each element, return the user. each := func(i int) interface{} { return users[i] } - if err := xtabwriter.WriteTable(len(users), each); err != nil { + if err := tablewriter.WriteTable(len(users), each); err != nil { return xerrors.Errorf("write table: %w", err) } case "json": diff --git a/pkg/tablewriter/doc.go b/pkg/tablewriter/doc.go new file mode 100644 index 00000000..469e8e6a --- /dev/null +++ b/pkg/tablewriter/doc.go @@ -0,0 +1 @@ +package tablewriter \ No newline at end of file diff --git a/internal/x/xtabwriter/tabwriter.go b/pkg/tablewriter/tablewriter.go similarity index 78% rename from internal/x/xtabwriter/tabwriter.go rename to pkg/tablewriter/tablewriter.go index 6c28b647..e7720999 100644 --- a/internal/x/xtabwriter/tabwriter.go +++ b/pkg/tablewriter/tablewriter.go @@ -1,4 +1,4 @@ -package xtabwriter +package tablewriter import ( "fmt" @@ -8,16 +8,11 @@ import ( "text/tabwriter" ) -const structFieldTagKey = "tab" - -// NewWriter chooses reasonable defaults for a human readable output of tabular data. -func NewWriter() *tabwriter.Writer { - return tabwriter.NewWriter(os.Stdout, 0, 0, 4, ' ', 0) -} +const structFieldTagKey = "table" // StructValues tab delimits the values of a given struct. // -// Tag a field `tab:"-"` to hide it from output. +// Tag a field `table:"-"` to hide it from output. func StructValues(data interface{}) string { v := reflect.ValueOf(data) s := &strings.Builder{} @@ -32,7 +27,7 @@ func StructValues(data interface{}) string { // StructFieldNames tab delimits the field names of a given struct. // -// Tag a field `tab:"-"` to hide it from output. +// Tag a field `table:"-"` to hide it from output. func StructFieldNames(data interface{}) string { v := reflect.ValueOf(data) s := &strings.Builder{} @@ -49,12 +44,12 @@ func StructFieldNames(data interface{}) string { // WriteTable writes the given list elements to stdout in a human readable // tabular format. Headers abide by the `tab` struct tag. // -// `tab:"-"` omits the field and no tag defaults to the Go identifier. +// `table:"-"` omits the field and no tag defaults to the Go identifier. func WriteTable(length int, each func(i int) interface{}) error { if length < 1 { return nil } - w := NewWriter() + w := tabwriter.NewWriter(os.Stdout, 0, 0, 4, ' ', 0) defer func() { _ = w.Flush() }() // Best effort. for ix := 0; ix < length; ix++ { item := each(ix) From 80066f8cd0fbb6941756b52e69ae22104cb1faa1 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Mon, 2 Nov 2020 11:40:50 -0600 Subject: [PATCH 3/5] fixup! Move xtabwriter to tablewriter --- internal/cmd/envs.go | 2 +- internal/cmd/secrets.go | 2 +- internal/cmd/urls.go | 2 +- internal/cmd/users.go | 2 +- pkg/tablewriter/doc.go | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/cmd/envs.go b/internal/cmd/envs.go index 60d34de3..5b75028e 100644 --- a/internal/cmd/envs.go +++ b/internal/cmd/envs.go @@ -7,8 +7,8 @@ import ( "os" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/x/tablewriter" "cdr.dev/coder-cli/pkg/clog" + "cdr.dev/coder-cli/pkg/tablewriter" "github.com/manifoldco/promptui" "github.com/spf13/cobra" diff --git a/internal/cmd/secrets.go b/internal/cmd/secrets.go index 856eb8c9..d15e9778 100644 --- a/internal/cmd/secrets.go +++ b/internal/cmd/secrets.go @@ -10,8 +10,8 @@ import ( "golang.org/x/xerrors" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/x/tablewriter" "cdr.dev/coder-cli/pkg/clog" + "cdr.dev/coder-cli/pkg/tablewriter" ) func secretsCmd() *cobra.Command { diff --git a/internal/cmd/urls.go b/internal/cmd/urls.go index 927ce36d..ccc8ea93 100644 --- a/internal/cmd/urls.go +++ b/internal/cmd/urls.go @@ -14,8 +14,8 @@ import ( "golang.org/x/xerrors" "cdr.dev/coder-cli/coder-sdk" - "cdr.dev/coder-cli/internal/x/tablewriter" "cdr.dev/coder-cli/pkg/clog" + "cdr.dev/coder-cli/pkg/tablewriter" ) func urlCmd() *cobra.Command { diff --git a/internal/cmd/users.go b/internal/cmd/users.go index debf5e56..e200fbbc 100644 --- a/internal/cmd/users.go +++ b/internal/cmd/users.go @@ -4,7 +4,7 @@ import ( "encoding/json" "os" - "cdr.dev/coder-cli/internal/x/tablewriter" + "cdr.dev/coder-cli/pkg/tablewriter" "github.com/spf13/cobra" "golang.org/x/xerrors" ) diff --git a/pkg/tablewriter/doc.go b/pkg/tablewriter/doc.go index 469e8e6a..f211b54b 100644 --- a/pkg/tablewriter/doc.go +++ b/pkg/tablewriter/doc.go @@ -1 +1 @@ -package tablewriter \ No newline at end of file +package tablewriter From 508486450e007ba279a8df6883520ef89c1d9872 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Mon, 2 Nov 2020 11:41:35 -0600 Subject: [PATCH 4/5] fixup! Move xtabwriter to tablewriter --- pkg/tablewriter/tablewriter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/tablewriter/tablewriter.go b/pkg/tablewriter/tablewriter.go index e7720999..acc2545d 100644 --- a/pkg/tablewriter/tablewriter.go +++ b/pkg/tablewriter/tablewriter.go @@ -42,7 +42,7 @@ func StructFieldNames(data interface{}) string { } // WriteTable writes the given list elements to stdout in a human readable -// tabular format. Headers abide by the `tab` struct tag. +// tabular format. Headers abide by the `table` struct tag. // // `table:"-"` omits the field and no tag defaults to the Go identifier. func WriteTable(length int, each func(i int) interface{}) error { From 03494c624a2925ff63d4bdfbecb19601b9b9f761 Mon Sep 17 00:00:00 2001 From: Charlie Moog Date: Mon, 2 Nov 2020 11:43:52 -0600 Subject: [PATCH 5/5] fixup! Move xtabwriter to tablewriter --- pkg/clog/doc.go | 2 +- pkg/tablewriter/doc.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/clog/doc.go b/pkg/clog/doc.go index 4c1dacaf..9e5717bb 100644 --- a/pkg/clog/doc.go +++ b/pkg/clog/doc.go @@ -1,4 +1,4 @@ -// package clog provides rich error types and logging helpers for coder-cli. +// Package clog provides rich error types and logging helpers for coder-cli. // // clog encourages returning error types rather than // logging them and failing with os.Exit as they happen. diff --git a/pkg/tablewriter/doc.go b/pkg/tablewriter/doc.go index f211b54b..366a7b9e 100644 --- a/pkg/tablewriter/doc.go +++ b/pkg/tablewriter/doc.go @@ -1 +1,2 @@ +// Package tablewriter provides helpers for printing human-readable tabular data from slices of structs. package tablewriter