From f3124766f0f6dadeaa39738d68d37c104d8208be Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Fri, 17 Jul 2026 21:21:44 +0530 Subject: [PATCH 1/7] release: avoid rebuilding kind order map during sorting Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 35 ++++++++++++++++++++----- pkg/release/v1/util/kind_sorter.go | 34 +++++++++++++++++++----- 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index dba35b6d2..080b8c6f0 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -117,9 +117,26 @@ var UninstallOrder KindSortOrder = []string{ // sort manifests by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority + +func buildKindOrderMap(o KindSortOrder) map[string]int { + ordering := make(map[string]int, len(o)) + for i, kind := range o { + ordering[kind] = i + } + return ordering +} + func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { + orderMap := buildKindOrderMap(ordering) + sort.SliceStable(manifests, func(i, j int) bool { - return lessByKind(manifests[i], manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, ordering) + return lessByKind( + manifests[i], + manifests[j], + manifests[i].Head.Kind, + manifests[j].Head.Kind, + orderMap, + ) }) return manifests @@ -129,19 +146,23 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { + orderMap := buildKindOrderMap(ordering) + h := hooks sort.SliceStable(h, func(i, j int) bool { - return lessByKind(h[i], h[j], h[i].Kind, h[j].Kind, ordering) + return lessByKind( + h[i], + h[j], + h[i].Kind, + h[j].Kind, + orderMap, + ) }) return h } -func lessByKind(_ any, _ any, kindA string, kindB string, o KindSortOrder) bool { - ordering := make(map[string]int, len(o)) - for v, k := range o { - ordering[k] = v - } +func lessByKind(_ any, _ any, kindA string, kindB string, ordering map[string]int) bool { first, aok := ordering[kindA] second, bok := ordering[kindB] diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index 01f1f801e..f6b1e0962 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -114,12 +114,28 @@ var UninstallOrder KindSortOrder = []string{ "PriorityClass", } +func buildKindOrderMap(o KindSortOrder) map[string]int { + ordering := make(map[string]int, len(o)) + for i, kind := range o { + ordering[kind] = i + } + return ordering +} + // sort manifests by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { + orderMap := buildKindOrderMap(ordering) + sort.SliceStable(manifests, func(i, j int) bool { - return lessByKind(manifests[i], manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, ordering) + return lessByKind( + manifests[i], + manifests[j], + manifests[i].Head.Kind, + manifests[j].Head.Kind, + orderMap, + ) }) return manifests @@ -129,19 +145,23 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { + orderMap := buildKindOrderMap(ordering) + h := hooks sort.SliceStable(h, func(i, j int) bool { - return lessByKind(h[i], h[j], h[i].Kind, h[j].Kind, ordering) + return lessByKind( + h[i], + h[j], + h[i].Kind, + h[j].Kind, + orderMap, + ) }) return h } -func lessByKind(_ any, _ any, kindA string, kindB string, o KindSortOrder) bool { - ordering := make(map[string]int, len(o)) - for v, k := range o { - ordering[k] = v - } +func lessByKind(_ any, _ any, kindA string, kindB string, ordering map[string]int) bool { first, aok := ordering[kindA] second, bok := ordering[kindB] From ae4400ab4bf810d9954751473f8a32168a122338 Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Sat, 18 Jul 2026 11:49:23 +0530 Subject: [PATCH 2/7] release: address review feedback Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 16 +++++++--------- pkg/release/v1/util/kind_sorter.go | 6 +----- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index 080b8c6f0..bfa90540e 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -114,10 +114,6 @@ var UninstallOrder KindSortOrder = []string{ "PriorityClass", } -// sort manifests by kind. -// -// Results are sorted by 'ordering', keeping order of items with equal kind/priority - func buildKindOrderMap(o KindSortOrder) map[string]int { ordering := make(map[string]int, len(o)) for i, kind := range o { @@ -126,13 +122,13 @@ func buildKindOrderMap(o KindSortOrder) map[string]int { return ordering } +// sort manifests by kind. +// Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { orderMap := buildKindOrderMap(ordering) sort.SliceStable(manifests, func(i, j int) bool { return lessByKind( - manifests[i], - manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, orderMap, @@ -151,8 +147,6 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H h := hooks sort.SliceStable(h, func(i, j int) bool { return lessByKind( - h[i], - h[j], h[i].Kind, h[j].Kind, orderMap, @@ -162,7 +156,11 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H return h } -func lessByKind(_ any, _ any, kindA string, kindB string, ordering map[string]int) bool { +func lessByKind( + kindA string, + kindB string, + ordering map[string]int, +) bool { first, aok := ordering[kindA] second, bok := ordering[kindB] diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index f6b1e0962..72b317c81 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -130,8 +130,6 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes sort.SliceStable(manifests, func(i, j int) bool { return lessByKind( - manifests[i], - manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, orderMap, @@ -150,8 +148,6 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H h := hooks sort.SliceStable(h, func(i, j int) bool { return lessByKind( - h[i], - h[j], h[i].Kind, h[j].Kind, orderMap, @@ -161,7 +157,7 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H return h } -func lessByKind(_ any, _ any, kindA string, kindB string, ordering map[string]int) bool { +func lessByKind(kindA string, kindB string, ordering map[string]int) bool { first, aok := ordering[kindA] second, bok := ordering[kindB] From cf1225427faa584545976c7bef5a08cbf0a70ac5 Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Sat, 18 Jul 2026 12:01:20 +0530 Subject: [PATCH 3/7] release: address Copilot review feedback Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 2 +- pkg/release/v1/util/kind_sorter.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index bfa90540e..9db7bd69d 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -138,7 +138,7 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes return manifests } -// sort hooks by kind, using an out-of-place sort to preserve the input parameters. +// sort hooks by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index 72b317c81..8b12760e6 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -139,7 +139,7 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes return manifests } -// sort hooks by kind, using an out-of-place sort to preserve the input parameters. +// sort hooks by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { From 20a1ca2345a667ecb611aed87b5c515c334c3de8 Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Sun, 19 Jul 2026 09:19:31 +0530 Subject: [PATCH 4/7] Fix whitespace lint issues Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 1 - pkg/release/v1/util/kind_sorter.go | 1 - 2 files changed, 2 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index 9db7bd69d..000fbf1b6 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -161,7 +161,6 @@ func lessByKind( kindB string, ordering map[string]int, ) bool { - first, aok := ordering[kindA] second, bok := ordering[kindB] diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index 8b12760e6..ae8dae76a 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -158,7 +158,6 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H } func lessByKind(kindA string, kindB string, ordering map[string]int) bool { - first, aok := ordering[kindA] second, bok := ordering[kindB] From db8da0a937da41e0d7c145861dfb0b6ca3a6f2de Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Sun, 19 Jul 2026 19:38:53 +0530 Subject: [PATCH 5/7] release: simplify hook sorting Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 9 ++++----- pkg/release/v1/util/kind_sorter.go | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index 000fbf1b6..c7912f7f9 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -144,16 +144,15 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { orderMap := buildKindOrderMap(ordering) - h := hooks - sort.SliceStable(h, func(i, j int) bool { + sort.SliceStable(hooks, func(i, j int) bool { return lessByKind( - h[i].Kind, - h[j].Kind, + hooks[i].Kind, + hooks[j].Kind, orderMap, ) }) - return h + return hooks } func lessByKind( diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index ae8dae76a..427ee22c4 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -145,16 +145,15 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { orderMap := buildKindOrderMap(ordering) - h := hooks - sort.SliceStable(h, func(i, j int) bool { + sort.SliceStable(hooks, func(i, j int) bool { return lessByKind( - h[i].Kind, - h[j].Kind, + hooks[i].Kind, + hooks[j].Kind, orderMap, ) }) - return h + return hooks } func lessByKind(kindA string, kindB string, ordering map[string]int) bool { From ca5ca56275010f5444fdd3ef6e85c4bcaa3e5578 Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Sun, 19 Jul 2026 19:53:30 +0530 Subject: [PATCH 6/7] release: clarify order map naming Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 6 +++--- pkg/release/v1/util/kind_sorter.go | 10 +++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index c7912f7f9..353106ff2 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -158,10 +158,10 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H func lessByKind( kindA string, kindB string, - ordering map[string]int, + orderMap map[string]int, ) bool { - first, aok := ordering[kindA] - second, bok := ordering[kindB] + first, aok := orderMap[kindA] + second, bok := orderMap[kindB] if !aok && !bok { // if both are unknown then sort alphabetically by kind, keep original order if same kind diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index 427ee22c4..577b6a632 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -156,9 +156,13 @@ func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.H return hooks } -func lessByKind(kindA string, kindB string, ordering map[string]int) bool { - first, aok := ordering[kindA] - second, bok := ordering[kindB] +func lessByKind( + kindA string, + kindB string, + orderMap map[string]int, +) bool { + first, aok := orderMap[kindA] + second, bok := orderMap[kindB] if !aok && !bok { // if both are unknown then sort alphabetically by kind, keep original order if same kind From 9ec011e9f1706172452d675899d123c88e63bf44 Mon Sep 17 00:00:00 2001 From: Raushan Kumar Date: Sun, 19 Jul 2026 20:15:42 +0530 Subject: [PATCH 7/7] release: clarify comparison for unknown kinds Signed-off-by: Raushan Kumar --- internal/release/v2/util/kind_sorter.go | 38 +++++++++++-------------- pkg/release/v1/util/kind_sorter.go | 36 +++++++++++------------ 2 files changed, 34 insertions(+), 40 deletions(-) diff --git a/internal/release/v2/util/kind_sorter.go b/internal/release/v2/util/kind_sorter.go index 353106ff2..9f885e1a4 100644 --- a/internal/release/v2/util/kind_sorter.go +++ b/internal/release/v2/util/kind_sorter.go @@ -114,24 +114,24 @@ var UninstallOrder KindSortOrder = []string{ "PriorityClass", } -func buildKindOrderMap(o KindSortOrder) map[string]int { - ordering := make(map[string]int, len(o)) - for i, kind := range o { - ordering[kind] = i +type KindOrderMap map[string]int + +func NewKindOrderMap(ordering KindSortOrder) KindOrderMap { + orderMap := make(KindOrderMap, len(ordering)) + for i, kind := range ordering { + orderMap[kind] = i } - return ordering + return orderMap } // sort manifests by kind. // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { - orderMap := buildKindOrderMap(ordering) - + orderMap := NewKindOrderMap(ordering) sort.SliceStable(manifests, func(i, j int) bool { - return lessByKind( + return orderMap.Less( manifests[i].Head.Kind, manifests[j].Head.Kind, - orderMap, ) }) @@ -142,34 +142,29 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { - orderMap := buildKindOrderMap(ordering) - + orderMap := NewKindOrderMap(ordering) sort.SliceStable(hooks, func(i, j int) bool { - return lessByKind( + return orderMap.Less( hooks[i].Kind, hooks[j].Kind, - orderMap, ) }) return hooks } -func lessByKind( - kindA string, - kindB string, - orderMap map[string]int, -) bool { - first, aok := orderMap[kindA] - second, bok := orderMap[kindB] +func (k KindOrderMap) Less(kindA, kindB string) bool { + first, aok := k[kindA] + second, bok := k[kindB] if !aok && !bok { // if both are unknown then sort alphabetically by kind, keep original order if same kind if kindA != kindB { return kindA < kindB } - return first < second + return false } + // unknown kind is last if !aok { return false @@ -177,6 +172,7 @@ func lessByKind( if !bok { return true } + // sort different kinds, keep original order if same priority return first < second } diff --git a/pkg/release/v1/util/kind_sorter.go b/pkg/release/v1/util/kind_sorter.go index 577b6a632..676788566 100644 --- a/pkg/release/v1/util/kind_sorter.go +++ b/pkg/release/v1/util/kind_sorter.go @@ -114,25 +114,26 @@ var UninstallOrder KindSortOrder = []string{ "PriorityClass", } -func buildKindOrderMap(o KindSortOrder) map[string]int { - ordering := make(map[string]int, len(o)) - for i, kind := range o { - ordering[kind] = i +type KindOrderMap map[string]int + +func NewKindOrderMap(ordering KindSortOrder) KindOrderMap { + orderMap := make(KindOrderMap, len(ordering)) + for i, kind := range ordering { + orderMap[kind] = i } - return ordering + return orderMap } // sort manifests by kind. // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest { - orderMap := buildKindOrderMap(ordering) + orderMap := NewKindOrderMap(ordering) sort.SliceStable(manifests, func(i, j int) bool { - return lessByKind( + return orderMap.Less( manifests[i].Head.Kind, manifests[j].Head.Kind, - orderMap, ) }) @@ -143,34 +144,30 @@ func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifes // // Results are sorted by 'ordering', keeping order of items with equal kind/priority func sortHooksByKind(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook { - orderMap := buildKindOrderMap(ordering) + orderMap := NewKindOrderMap(ordering) sort.SliceStable(hooks, func(i, j int) bool { - return lessByKind( + return orderMap.Less( hooks[i].Kind, hooks[j].Kind, - orderMap, ) }) return hooks } -func lessByKind( - kindA string, - kindB string, - orderMap map[string]int, -) bool { - first, aok := orderMap[kindA] - second, bok := orderMap[kindB] +func (k KindOrderMap) Less(kindA, kindB string) bool { + first, aok := k[kindA] + second, bok := k[kindB] if !aok && !bok { // if both are unknown then sort alphabetically by kind, keep original order if same kind if kindA != kindB { return kindA < kindB } - return first < second + return false } + // unknown kind is last if !aok { return false @@ -178,6 +175,7 @@ func lessByKind( if !bok { return true } + // sort different kinds, keep original order if same priority return first < second }