Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 10 additions & 53 deletions pkg/workflow/domains.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ import (
_ "embed"
"encoding/json"
"fmt"
"maps"
"slices"
"sort"
"strings"

Expand Down Expand Up @@ -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))
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

slices.Sorted(maps.Keys(domainMap)) clones and sorts a fresh slice, but maps.Keys already allocates a fresh slice; this introduces an extra allocation vs the previous in-place sort.Strings on the collected keys. If domain lists can be large or computed often, consider sorting in place (maps.Keys + slices.Sort) to avoid the additional allocation.

Suggested change
result := slices.Sorted(maps.Keys(domainMap))
result := maps.Keys(domainMap)
slices.Sort(result)

Copilot uses AI. Check for mistakes.
return result
}

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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, ",")
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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)), ",")
}
12 changes: 5 additions & 7 deletions pkg/workflow/map_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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))
Copy link

Copilot AI Apr 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using slices.Sorted(maps.Keys(m)) allocates twice: maps.Keys already allocates a new slice of keys, and slices.Sorted returns a sorted copy (it clones before sorting). If this helper is called frequently, consider sorting in place (e.g., get keys via maps.Keys, then slices.Sort) to keep the single-allocation behavior of the previous implementation.

Suggested change
return slices.Sorted(maps.Keys(m))
keys := maps.Keys(m)
slices.Sort(keys)
return keys

Copilot uses AI. Check for mistakes.
}
Loading