diff --git a/tools/codegen/cmd/featuregate-test-analyzer.go b/tools/codegen/cmd/featuregate-test-analyzer.go
index bdc12f9f105..a70397b27a2 100644
--- a/tools/codegen/cmd/featuregate-test-analyzer.go
+++ b/tools/codegen/cmd/featuregate-test-analyzer.go
@@ -262,18 +262,10 @@ func (o *FeatureGateTestAnalyzerOptions) Run(ctx context.Context) error {
func buildHTMLFeatureGateData(name string, testingResults map[JobVariant]*TestingResults, blockingErrors []error, release string) utils.HTMLFeatureGate {
jobVariantsSet := sets.KeySet(testingResults)
- jobVariants := jobVariantsSet.UnsortedList()
+ jobVariants := OrderedJobVariants(jobVariantsSet.UnsortedList())
+
+ sort.Sort(jobVariants)
- // For HTML sort so that the network stacks are in the same order.
- var networkStackOrder = map[string]int{
- "": 0,
- "ipv4": 1,
- "ipv6": 2,
- "dual": 3,
- }
- sort.SliceStable(jobVariants, func(i, j int) bool {
- return networkStackOrder[jobVariants[i].NetworkStack] < networkStackOrder[jobVariants[j].NetworkStack]
- })
variants := make([]utils.HTMLVariantColumn, 0, len(jobVariants))
for i, jv := range jobVariants {
variants = append(variants, utils.HTMLVariantColumn{
@@ -645,14 +637,41 @@ func (a OrderedJobVariants) Less(i, j int) bool {
return false
}
+ // Map these to an ordered list of strings so that we can define the order
+ // rather than them being alphabetical.
+ var networkStackOrder = map[string]string{
+ "": "0",
+ "ipv4": "1",
+ "ipv6": "2",
+ "dual": "3",
+ }
+
+ if strings.Compare(networkStackOrder[a[i].NetworkStack], networkStackOrder[a[j].NetworkStack]) < 0 {
+ return true
+ } else if strings.Compare(networkStackOrder[a[i].NetworkStack], networkStackOrder[a[j].NetworkStack]) > 0 {
+ return false
+ }
+
+ if strings.Compare(a[i].OS, a[j].OS) < 0 {
+ return true
+ } else if strings.Compare(a[i].OS, a[j].OS) > 0 {
+ return false
+ }
+
+ if strings.Compare(a[i].JobTiers, a[j].JobTiers) < 0 {
+ return true
+ } else if strings.Compare(a[i].JobTiers, a[j].JobTiers) > 0 {
+ return false
+ }
+
return false
}
type TestingResults struct {
JobVariant JobVariant
- TestResults []TestResults
- HasCandidateTierResults bool // true if candidate-tier queries returned any test data
+ TestResults []TestResults
+ HasCandidateTierResults bool // true if candidate-tier queries returned any test data
}
type TestResults struct {
diff --git a/tools/codegen/pkg/utils/html.go b/tools/codegen/pkg/utils/html.go
index 84d99b490dd..92fa7598557 100644
--- a/tools/codegen/pkg/utils/html.go
+++ b/tools/codegen/pkg/utils/html.go
@@ -47,6 +47,7 @@ const HTMLTemplateSrc = `