diff --git a/agent/agent.go b/agent/agent.go index 7f17a5f762..652aa0affd 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -16,7 +16,6 @@ import ( "os/user" "path/filepath" "slices" - "sort" "strconv" "strings" "sync" @@ -1877,7 +1876,7 @@ func (a *agent) Collect(ctx context.Context, networkStats map[netlogtype.Connect }() } wg.Wait() - sort.Float64s(durations) + slices.Sort(durations) durationsLength := len(durations) switch { case durationsLength == 0: diff --git a/agent/agentcontainers/containers_dockercli.go b/agent/agentcontainers/containers_dockercli.go index ad88b44c06..96489cbecf 100644 --- a/agent/agentcontainers/containers_dockercli.go +++ b/agent/agentcontainers/containers_dockercli.go @@ -433,7 +433,7 @@ func convertDockerInspect(raw []byte) ([]codersdk.WorkspaceAgentContainer, []str } portKeys := maps.Keys(in.NetworkSettings.Ports) // Sort the ports for deterministic output. - sort.Strings(portKeys) + slices.Sort(portKeys) // If we see the same port bound to both ipv4 and ipv6 loopback or unspecified // interfaces to the same container port, there is no point in adding it multiple times. loopbackHostPortContainerPorts := make(map[int]uint16, 0) diff --git a/agent/agentgit/pathstore.go b/agent/agentgit/pathstore.go index 02d3d2af89..470e63d985 100644 --- a/agent/agentgit/pathstore.go +++ b/agent/agentgit/pathstore.go @@ -1,7 +1,7 @@ package agentgit import ( - "sort" + "slices" "sync" "github.com/google/uuid" @@ -99,7 +99,7 @@ func (ps *PathStore) GetPaths(chatID uuid.UUID) []string { for p := range m { out = append(out, p) } - sort.Strings(out) + slices.Sort(out) return out } diff --git a/agent/filefinder/engine_test.go b/agent/filefinder/engine_test.go index 17ba761915..5b4fe08342 100644 --- a/agent/filefinder/engine_test.go +++ b/agent/filefinder/engine_test.go @@ -4,7 +4,7 @@ import ( "context" "os" "path/filepath" - "sort" + "slices" "testing" "github.com/stretchr/testify/require" @@ -228,6 +228,6 @@ func resultPaths(results []filefinder.Result) []string { for i, r := range results { paths[i] = r.Path } - sort.Strings(paths) + slices.Sort(paths) return paths } diff --git a/cli/configssh_internal_test.go b/cli/configssh_internal_test.go index df97527d64..4ad3312077 100644 --- a/cli/configssh_internal_test.go +++ b/cli/configssh_internal_test.go @@ -5,7 +5,7 @@ import ( "os/exec" "path/filepath" "runtime" - "sort" + "slices" "strings" "testing" @@ -376,8 +376,8 @@ func Test_sshConfigOptions_addOption(t *testing.T) { return } require.NoError(t, err) - sort.Strings(tt.Expect) - sort.Strings(o.sshOptions) + slices.Sort(tt.Expect) + slices.Sort(o.sshOptions) require.Equal(t, tt.Expect, o.sshOptions) }) } diff --git a/cli/server.go b/cli/server.go index 09674a1c91..a10d6d235e 100644 --- a/cli/server.go +++ b/cli/server.go @@ -24,7 +24,7 @@ import ( "os/user" "path/filepath" "regexp" - "sort" + "slices" "strconv" "strings" "sync" @@ -2825,7 +2825,7 @@ func ReadExternalAuthProvidersFromEnv(environ []string) ([]codersdk.ExternalAuth // parsing of `GITAUTH` environment variables. func parseExternalAuthProvidersFromEnv(prefix string, environ []string) ([]codersdk.ExternalAuthConfig, error) { // The index numbers must be in-order. - sort.Strings(environ) + slices.Sort(environ) var providers []codersdk.ExternalAuthConfig for _, v := range serpent.ParseEnviron(environ, prefix) { diff --git a/cli/templateinit.go b/cli/templateinit.go index 4af13e8b76..01c60f22bf 100644 --- a/cli/templateinit.go +++ b/cli/templateinit.go @@ -7,7 +7,7 @@ import ( "io" "os" "path/filepath" - "sort" + "slices" "golang.org/x/exp/maps" "golang.org/x/xerrors" @@ -31,7 +31,7 @@ func (*RootCmd) templateInit() *serpent.Command { for _, ex := range exampleList { templateIDs = append(templateIDs, ex.ID) } - sort.Strings(templateIDs) + slices.Sort(templateIDs) cmd := &serpent.Command{ Use: "init [directory]", Short: "Get started with a templated template.", @@ -50,7 +50,7 @@ func (*RootCmd) templateInit() *serpent.Command { optsToID[name] = example.ID } opts := maps.Keys(optsToID) - sort.Strings(opts) + slices.Sort(opts) _, _ = fmt.Fprintln( inv.Stdout, pretty.Sprint( diff --git a/cli/templatelist_test.go b/cli/templatelist_test.go index 06cb75ea4a..6818b81ca9 100644 --- a/cli/templatelist_test.go +++ b/cli/templatelist_test.go @@ -4,7 +4,7 @@ import ( "bytes" "context" "encoding/json" - "sort" + "slices" "testing" "github.com/stretchr/testify/require" @@ -47,7 +47,7 @@ func TestTemplateList(t *testing.T) { // expect that templates are listed alphabetically templatesList := []string{firstTemplate.Name, secondTemplate.Name} - sort.Strings(templatesList) + slices.Sort(templatesList) require.NoError(t, <-errC) diff --git a/cli/tokens.go b/cli/tokens.go index 541484be50..8d47a5e424 100644 --- a/cli/tokens.go +++ b/cli/tokens.go @@ -4,7 +4,6 @@ import ( "fmt" "os" "slices" - "sort" "strings" "time" @@ -194,7 +193,7 @@ func joinScopes(scopes []codersdk.APIKeyScope) string { return "" } vals := slice.ToStrings(scopes) - sort.Strings(vals) + slices.Sort(vals) return strings.Join(vals, ", ") } @@ -206,7 +205,7 @@ func joinAllowList(entries []codersdk.APIAllowListTarget) string { for i, entry := range entries { vals[i] = entry.String() } - sort.Strings(vals) + slices.Sort(vals) return strings.Join(vals, ", ") } diff --git a/coderd/database/dbauthz/setup_test.go b/coderd/database/dbauthz/setup_test.go index 7b305c2b10..da12831970 100644 --- a/coderd/database/dbauthz/setup_test.go +++ b/coderd/database/dbauthz/setup_test.go @@ -6,7 +6,7 @@ import ( "errors" "fmt" "reflect" - "sort" + "slices" "strings" "testing" @@ -97,7 +97,7 @@ func (s *MethodTestSuite) TearDownSuite() { notCalled = append(notCalled, m) } } - sort.Strings(notCalled) + slices.Sort(notCalled) for _, m := range notCalled { t.Errorf("Method never called: %q", m) } diff --git a/coderd/dynamicparameters/error.go b/coderd/dynamicparameters/error.go index ae2217936b..289484ee4a 100644 --- a/coderd/dynamicparameters/error.go +++ b/coderd/dynamicparameters/error.go @@ -3,7 +3,7 @@ package dynamicparameters import ( "fmt" "net/http" - "sort" + "slices" "github.com/hashicorp/hcl/v2" @@ -94,7 +94,7 @@ func (e *DiagnosticError) Response() (int, codersdk.Response) { for name := range e.KeyedDiagnostics { sortedNames = append(sortedNames, name) } - sort.Strings(sortedNames) + slices.Sort(sortedNames) for _, name := range sortedNames { diag := e.KeyedDiagnostics[name] diff --git a/coderd/notifications/notifications_test.go b/coderd/notifications/notifications_test.go index 0da5b83e63..33c70b94b5 100644 --- a/coderd/notifications/notifications_test.go +++ b/coderd/notifications/notifications_test.go @@ -18,7 +18,6 @@ import ( "path/filepath" "regexp" "slices" - "sort" "strings" "sync" "testing" @@ -549,8 +548,8 @@ func TestExpiredLeaseIsRequeued(t *testing.T) { leasedIDs = append(leasedIDs, msg.ID.String()) } - sort.Strings(msgs) - sort.Strings(leasedIDs) + slices.Sort(msgs) + slices.Sort(leasedIDs) require.EqualValues(t, msgs, leasedIDs) // Wait out the lease period; all messages should be eligible to be re-acquired. diff --git a/coderd/prometheusmetrics/collector_test.go b/coderd/prometheusmetrics/collector_test.go index 651be04477..5edcf249b7 100644 --- a/coderd/prometheusmetrics/collector_test.go +++ b/coderd/prometheusmetrics/collector_test.go @@ -1,6 +1,7 @@ package prometheusmetrics_test import ( + "slices" "sort" "testing" @@ -134,7 +135,7 @@ func collectAndSortMetrics(t *testing.T, collector prometheus.Collector, count i // Ensure always the same order of metrics sort.Slice(metrics, func(i, j int) bool { - return sort.StringsAreSorted([]string{metrics[i].Label[0].GetValue(), metrics[j].Label[1].GetValue()}) + return slices.IsSorted([]string{metrics[i].Label[0].GetValue(), metrics[j].Label[1].GetValue()}) }) return metrics } diff --git a/coderd/rbac/scopes.go b/coderd/rbac/scopes.go index dfdc19a3da..8de6add63e 100644 --- a/coderd/rbac/scopes.go +++ b/coderd/rbac/scopes.go @@ -3,7 +3,6 @@ package rbac import ( "fmt" "slices" - "sort" "strings" "github.com/google/uuid" @@ -176,7 +175,7 @@ func CompositeScopeNames() []string { for k := range compositePerms { out = append(out, string(k)) } - sort.Strings(out) + slices.Sort(out) return out } diff --git a/coderd/rbac/scopes_catalog_internal_test.go b/coderd/rbac/scopes_catalog_internal_test.go index 31ae90a985..fccb240b99 100644 --- a/coderd/rbac/scopes_catalog_internal_test.go +++ b/coderd/rbac/scopes_catalog_internal_test.go @@ -1,7 +1,7 @@ package rbac import ( - "sort" + "slices" "strings" "testing" @@ -16,7 +16,7 @@ func TestExternalScopeNames(t *testing.T) { // Ensure sorted ascending sorted := append([]string(nil), names...) - sort.Strings(sorted) + slices.Sort(sorted) require.Equal(t, sorted, names) // Ensure each entry expands to site-only diff --git a/coderd/userauth.go b/coderd/userauth.go index 6b2aab6c53..512e4e4561 100644 --- a/coderd/userauth.go +++ b/coderd/userauth.go @@ -7,7 +7,7 @@ import ( "fmt" "net/http" "net/mail" - "sort" + "slices" "strconv" "strings" "sync" @@ -1589,7 +1589,7 @@ func claimFields(claims map[string]interface{}) []string { for field := range claims { fields = append(fields, field) } - sort.Strings(fields) + slices.Sort(fields) return fields } @@ -1602,7 +1602,7 @@ func blankFields(claims map[string]interface{}) []string { fields = append(fields, field) } } - sort.Strings(fields) + slices.Sort(fields) return fields } diff --git a/examples/examples.go b/examples/examples.go index 8490267b7f..62cfb07782 100644 --- a/examples/examples.go +++ b/examples/examples.go @@ -9,7 +9,7 @@ import ( "io" "io/fs" "path" - "sort" + "slices" "strings" "sync" @@ -105,8 +105,8 @@ func parseAndVerifyExamples() (examples []codersdk.TemplateExample, err error) { } } - sort.Strings(wantEmbedFiles) - sort.Strings(gotEmbedFiles) + slices.Sort(wantEmbedFiles) + slices.Sort(gotEmbedFiles) want := strings.Join(wantEmbedFiles, ", ") got := strings.Join(gotEmbedFiles, ", ") if want != got { diff --git a/scaletest/harness/results.go b/scaletest/harness/results.go index 8e2c181927..76b37c94d3 100644 --- a/scaletest/harness/results.go +++ b/scaletest/harness/results.go @@ -5,7 +5,7 @@ import ( "encoding/json" "fmt" "io" - "sort" + "slices" "strings" "time" @@ -107,7 +107,7 @@ func (h *TestHarness) Results() Results { func (r *Results) PrintText(w io.Writer) { var totalDuration time.Duration keys := maps.Keys(r.Runs) - sort.Strings(keys) + slices.Sort(keys) for _, key := range keys { run := r.Runs[key] totalDuration += time.Duration(run.Duration) diff --git a/scripts/apidocgen/postprocess/main.go b/scripts/apidocgen/postprocess/main.go index 3d7a13d434..3c0fc11fcc 100644 --- a/scripts/apidocgen/postprocess/main.go +++ b/scripts/apidocgen/postprocess/main.go @@ -9,6 +9,7 @@ import ( "os" "path" "regexp" + "slices" "sort" "strings" @@ -168,7 +169,7 @@ func writeDocs(sections [][]byte) error { if mdFiles[j].title == "General" { return false // ... < "General" - not sorted } - return sort.StringsAreSorted([]string{mdFiles[i].title, mdFiles[j].title}) + return slices.IsSorted([]string{mdFiles[i].title, mdFiles[j].title}) }) // Update manifest.json diff --git a/scripts/check-scopes/main.go b/scripts/check-scopes/main.go index 56ba0d4657..83c2e9bc76 100644 --- a/scripts/check-scopes/main.go +++ b/scripts/check-scopes/main.go @@ -6,7 +6,7 @@ import ( "fmt" "os" "regexp" - "sort" + "slices" "strings" "golang.org/x/xerrors" @@ -37,7 +37,7 @@ func main() { missing = append(missing, k) } } - sort.Strings(missing) + slices.Sort(missing) if len(missing) == 0 { _, _ = fmt.Println("check-scopes: OK — all RBAC : values exist in api_key_scope enum") diff --git a/scripts/releaser/github.go b/scripts/releaser/github.go index 2438ec3b24..75df80960f 100644 --- a/scripts/releaser/github.go +++ b/scripts/releaser/github.go @@ -3,7 +3,7 @@ package main import ( "errors" "os/exec" - "sort" + "slices" "strconv" "strings" "time" @@ -180,7 +180,7 @@ func ghBuildPRMetadataMap(commits []commitEntry) (*prMetadataMaps, error) { var labels []string if parts[3] != "" { labels = strings.Split(parts[3], ",") - sort.Strings(labels) + slices.Sort(labels) } meta := prMetadata{ Labels: labels, diff --git a/testutil/terraform_cache.go b/testutil/terraform_cache.go index f1e21e23c0..1d6f27ede2 100644 --- a/testutil/terraform_cache.go +++ b/testutil/terraform_cache.go @@ -10,7 +10,7 @@ import ( "os" "os/exec" "path/filepath" - "sort" + "slices" "strings" "testing" @@ -34,7 +34,7 @@ func hashTemplateFilesAndTestName(t *testing.T, testName string, templateFiles m for fileName := range templateFiles { sortedFileNames = append(sortedFileNames, fileName) } - sort.Strings(sortedFileNames) + slices.Sort(sortedFileNames) // Inserting a delimiter between the file name and the file content // ensures that a file named `ab` with content `cd`