From c20f689c3891b21ba58c30c8c2cbda7fb5b33174 Mon Sep 17 00:00:00 2001 From: Lily Hoffman <0xlilyhoffman@gmail.com> Date: Tue, 2 Mar 2021 00:44:51 +0000 Subject: [PATCH 1/3] chore: sort coder envs by name in ssh config --- internal/cmd/configssh.go | 4 ++++ internal/coderutil/env.go | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/internal/cmd/configssh.go b/internal/cmd/configssh.go index b8db5687..ff268baf 100644 --- a/internal/cmd/configssh.go +++ b/internal/cmd/configssh.go @@ -8,6 +8,7 @@ import ( "os" "os/user" "path/filepath" + "sort" "strings" "cdr.dev/coder-cli/pkg/clog" @@ -176,6 +177,9 @@ func writeSSHKey(ctx context.Context, client coder.Client, privateKeyPath string func makeNewConfigs(userName string, envs []coderutil.EnvWithWorkspaceProvider, privateKeyFilepath string) string { newConfig := fmt.Sprintf("\n%s\n%s\n\n", sshStartToken, sshStartMessage) + + sort.Sort(coderutil.EWPsByEnvName(envs)) + for _, env := range envs { if !env.WorkspaceProvider.SSHEnabled { clog.LogWarn(fmt.Sprintf("SSH is not enabled for workspace provider %q", env.WorkspaceProvider.Name), diff --git a/internal/coderutil/env.go b/internal/coderutil/env.go index fff6072d..8aea290c 100644 --- a/internal/coderutil/env.go +++ b/internal/coderutil/env.go @@ -35,6 +35,14 @@ type EnvWithWorkspaceProvider struct { WorkspaceProvider coder.WorkspaceProvider } +// EWPsByEnvName implements the sort.Interface for sorting +// []coderutil.EnvWithWorkspaceProvider by coder.Environment.Name +type EWPsByEnvName []EnvWithWorkspaceProvider + +func (e EWPsByEnvName) Len() int { return len(e) } +func (e EWPsByEnvName) Less(i, j int) bool { return e[i].Env.Name < e[j].Env.Name } +func (e EWPsByEnvName) Swap(i, j int) { e[i], e[j] = e[j], e[i] } + // EnvsWithProvider performs the composition of each Environment with its associated WorkspaceProvider. func EnvsWithProvider(ctx context.Context, client coder.Client, envs []coder.Environment) ([]EnvWithWorkspaceProvider, error) { pooledEnvs := make([]EnvWithWorkspaceProvider, 0, len(envs)) From d283a05d4a5fcf052887d8f27b9b0b473124802b Mon Sep 17 00:00:00 2001 From: Lily Hoffman <0xlilyhoffman@gmail.com> Date: Tue, 2 Mar 2021 00:57:21 +0000 Subject: [PATCH 2/3] Fix doc comment --- internal/coderutil/env.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/coderutil/env.go b/internal/coderutil/env.go index 8aea290c..f024667d 100644 --- a/internal/coderutil/env.go +++ b/internal/coderutil/env.go @@ -36,7 +36,7 @@ type EnvWithWorkspaceProvider struct { } // EWPsByEnvName implements the sort.Interface for sorting -// []coderutil.EnvWithWorkspaceProvider by coder.Environment.Name +// []coderutil.EnvWithWorkspaceProvider by coder.Environment.Name. type EWPsByEnvName []EnvWithWorkspaceProvider func (e EWPsByEnvName) Len() int { return len(e) } From 8702436638fb491971dbef450acfbb14f04ef7de Mon Sep 17 00:00:00 2001 From: Lily Hoffman <0xlilyhoffman@gmail.com> Date: Tue, 2 Mar 2021 01:58:52 +0000 Subject: [PATCH 3/3] Use sort.Slice --- internal/cmd/configssh.go | 2 +- internal/coderutil/env.go | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/internal/cmd/configssh.go b/internal/cmd/configssh.go index ff268baf..b527d6df 100644 --- a/internal/cmd/configssh.go +++ b/internal/cmd/configssh.go @@ -178,7 +178,7 @@ func writeSSHKey(ctx context.Context, client coder.Client, privateKeyPath string func makeNewConfigs(userName string, envs []coderutil.EnvWithWorkspaceProvider, privateKeyFilepath string) string { newConfig := fmt.Sprintf("\n%s\n%s\n\n", sshStartToken, sshStartMessage) - sort.Sort(coderutil.EWPsByEnvName(envs)) + sort.Slice(envs, func(i, j int) bool { return envs[i].Env.Name < envs[j].Env.Name }) for _, env := range envs { if !env.WorkspaceProvider.SSHEnabled { diff --git a/internal/coderutil/env.go b/internal/coderutil/env.go index f024667d..fff6072d 100644 --- a/internal/coderutil/env.go +++ b/internal/coderutil/env.go @@ -35,14 +35,6 @@ type EnvWithWorkspaceProvider struct { WorkspaceProvider coder.WorkspaceProvider } -// EWPsByEnvName implements the sort.Interface for sorting -// []coderutil.EnvWithWorkspaceProvider by coder.Environment.Name. -type EWPsByEnvName []EnvWithWorkspaceProvider - -func (e EWPsByEnvName) Len() int { return len(e) } -func (e EWPsByEnvName) Less(i, j int) bool { return e[i].Env.Name < e[j].Env.Name } -func (e EWPsByEnvName) Swap(i, j int) { e[i], e[j] = e[j], e[i] } - // EnvsWithProvider performs the composition of each Environment with its associated WorkspaceProvider. func EnvsWithProvider(ctx context.Context, client coder.Client, envs []coder.Environment) ([]EnvWithWorkspaceProvider, error) { pooledEnvs := make([]EnvWithWorkspaceProvider, 0, len(envs))