From 4ffa6f80638f0f37c3cae38f7b68be150458fa58 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 25 Apr 2026 21:22:48 +0000 Subject: [PATCH 1/2] Initial plan From 0d7ac93e7a5aaf51c195f7e4684ea06d9c8ba6ad Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 25 Apr 2026 21:36:02 +0000 Subject: [PATCH 2/2] refactor: replace map-to-sorted-slice pattern with slices.Sorted(maps.Keys(...)) Agent-Logs-Url: https://github.com/github/gh-aw/sessions/cb3c2b13-374e-4800-acd7-de25d980d292 Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/workflow/domains.go | 63 ++++++------------------------------- pkg/workflow/map_helpers.go | 12 +++---- 2 files changed, 15 insertions(+), 60 deletions(-) diff --git a/pkg/workflow/domains.go b/pkg/workflow/domains.go index 2a70779086b..b2659ceb070 100644 --- a/pkg/workflow/domains.go +++ b/pkg/workflow/domains.go @@ -4,6 +4,8 @@ import ( _ "embed" "encoding/json" "fmt" + "maps" + "slices" "sort" "strings" @@ -294,11 +296,7 @@ func getEcosystemDomains(category string) []string { domainMap[d] = true } } - result := make([]string, 0, len(domainMap)) - for d := range domainMap { - result = append(result, d) - } - sort.Strings(result) + result := slices.Sorted(maps.Keys(domainMap)) return result } @@ -363,14 +361,7 @@ func getDomainsFromRuntimes(runtimes map[string]any) []string { } } - // Convert map to sorted slice - result := make([]string, 0, len(domainMap)) - for domain := range domainMap { - result = append(result, domain) - } - sort.Strings(result) - - return result + return slices.Sorted(maps.Keys(domainMap)) } // GetAllowedDomains returns the allowed domains from network permissions. @@ -465,14 +456,7 @@ func GetAllowedDomains(network *NetworkPermissions) []string { } } - // Convert map to sorted slice - expandedDomains := make([]string, 0, len(domainMap)) - for domain := range domainMap { - expandedDomains = append(expandedDomains, domain) - } - sort.Strings(expandedDomains) - - return expandedDomains + return slices.Sorted(maps.Keys(domainMap)) } // ecosystemPriority defines the order in which ecosystems are checked by GetDomainEcosystem. @@ -681,12 +665,7 @@ func mergeDomainsWithNetworkToolsAndRuntimes(defaultDomains []string, network *N } } - // Convert to sorted slice for consistent output - domains := make([]string, 0, len(domainMap)) - for domain := range domainMap { - domains = append(domains, domain) - } - sort.Strings(domains) + domains := slices.Sorted(maps.Keys(domainMap)) // Join with commas for AWF --allow-domains flag return strings.Join(domains, ",") @@ -812,14 +791,7 @@ func GetBlockedDomains(network *NetworkPermissions) []string { } } - // Convert map to sorted slice - expandedDomains := make([]string, 0, len(domainMap)) - for domain := range domainMap { - expandedDomains = append(expandedDomains, domain) - } - sort.Strings(expandedDomains) - - return expandedDomains + return slices.Sorted(maps.Keys(domainMap)) } // formatBlockedDomains formats blocked domains as a comma-separated string suitable for AWF's --block-domains flag @@ -885,12 +857,7 @@ func mergeAPITargetDomains(domainsStr string, apiTarget string) string { domainMap[d] = true } - result := make([]string, 0, len(domainMap)) - for d := range domainMap { - result = append(result, d) - } - sort.Strings(result) - return strings.Join(result, ",") + return strings.Join(slices.Sorted(maps.Keys(domainMap)), ",") } // computeAllowedDomainsForSanitization computes the allowed domains for sanitization @@ -964,12 +931,7 @@ func expandAllowedDomains(entries []string) []string { domainMap[entry] = true } } - result := make([]string, 0, len(domainMap)) - for d := range domainMap { - result = append(result, d) - } - sort.Strings(result) - return result + return slices.Sorted(maps.Keys(domainMap)) } // computeExpandedAllowedDomainsForSanitization computes the allowed domains for URL sanitization, @@ -1006,10 +968,5 @@ func (c *Compiler) computeExpandedAllowedDomainsForSanitization(data *WorkflowDa domainMap["github.com"] = true // Produce a sorted, comma-separated result - result := make([]string, 0, len(domainMap)) - for d := range domainMap { - result = append(result, d) - } - sort.Strings(result) - return strings.Join(result, ",") + return strings.Join(slices.Sorted(maps.Keys(domainMap)), ",") } diff --git a/pkg/workflow/map_helpers.go b/pkg/workflow/map_helpers.go index c0133fbe114..7f612c7bda4 100644 --- a/pkg/workflow/map_helpers.go +++ b/pkg/workflow/map_helpers.go @@ -33,7 +33,10 @@ package workflow -import "sort" +import ( + "maps" + "slices" +) // excludeMapKeys creates a new map excluding the specified keys func excludeMapKeys(original map[string]any, excludeKeys ...string) map[string]any { @@ -54,10 +57,5 @@ func excludeMapKeys(original map[string]any, excludeKeys ...string) map[string]a // sortedMapKeys returns the keys of a map[string]string in sorted order. // Used to produce deterministic output when writing environment variables. func sortedMapKeys(m map[string]string) []string { - keys := make([]string, 0, len(m)) - for k := range m { - keys = append(keys, k) - } - sort.Strings(keys) - return keys + return slices.Sorted(maps.Keys(m)) }