Skip to content

Commit ad9eb11

Browse files
Merge pull request #2789 from yuqi-zhang/fix-candidate-reporting
Include candidate tier in default sippy queries for feature promotion
2 parents d0af9d7 + 72cac06 commit ad9eb11

3 files changed

Lines changed: 46 additions & 5 deletions

File tree

tools/codegen/cmd/featuregate-test-analyzer.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -618,7 +618,7 @@ type JobVariant struct {
618618
Topology string
619619
NetworkStack string
620620
OS string
621-
JobTiers string // Comma-separated tiers (e.g., "standard,informing,blocking"). If empty, defaults to "standard,informing,blocking"
621+
JobTiers string // Comma-separated tiers (e.g., "standard,informing,blocking"). If empty, defaults to "standard,informing,blocking,candidate"
622622
Optional bool // If true, validation failures for this variant are non-blocking warnings
623623
}
624624

@@ -680,7 +680,7 @@ func testResultByName(results []TestResults, testName string) *TestResults {
680680

681681
func validateJobTiers(jobVariant JobVariant) error {
682682
if jobVariant.JobTiers == "" {
683-
return nil // Empty is valid - will default to standard,informing,blocking
683+
return nil // Empty is valid - will default to standard,informing,blocking,candidate
684684
}
685685

686686
validTiers := map[string]bool{

tools/codegen/cmd/featuregate-test-analyzer_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"testing"
77

88
"k8s.io/apimachinery/pkg/util/sets"
9+
10+
"github.com/openshift/api/tools/codegen/pkg/sippy"
911
)
1012

1113
func Test_listTestResultFor(t *testing.T) {
@@ -475,3 +477,42 @@ func Test_checkIfTestingIsSufficient_OptionalVariants(t *testing.T) {
475477
})
476478
}
477479
}
480+
481+
func Test_defaultQueriesIncludeCandidateTier(t *testing.T) {
482+
// When JobTiers is empty, QueriesFor should generate queries for all tiers
483+
// including candidate. This test is added to prevent regressions for candidate-tier
484+
// jobs being excluded, which is used by some TP jobs.
485+
queries := sippy.QueriesFor("vsphere", "amd64", "ha", "", "", "", "FeatureGate:TestGate]")
486+
487+
tierNames := sets.New[string]()
488+
for _, q := range queries {
489+
tierNames.Insert(q.TierName)
490+
}
491+
492+
expectedTiers := []string{"standard", "informing", "blocking", "candidate"}
493+
for _, tier := range expectedTiers {
494+
if !tierNames.Has(tier) {
495+
t.Errorf("default queries missing tier %q - got tiers: %v", tier, sets.List(tierNames))
496+
}
497+
}
498+
}
499+
500+
func Test_allRequiredVariantsQueryCandidateTier(t *testing.T) {
501+
// Verify that all required variant definitions will query for the candidate
502+
// tier, either explicitly via JobTiers or via the default.
503+
allVariants := append(append([]JobVariant{}, requiredSelfManagedJobVariants...), requiredHypershiftJobVariants...)
504+
505+
for _, variant := range allVariants {
506+
queries := sippy.QueriesFor(variant.Cloud, variant.Architecture, variant.Topology, variant.NetworkStack, variant.OS, variant.JobTiers, "FeatureGate:Test]")
507+
hasCandidateQuery := false
508+
for _, q := range queries {
509+
if q.TierName == "candidate" {
510+
hasCandidateQuery = true
511+
break
512+
}
513+
}
514+
if !hasCandidateQuery {
515+
t.Errorf("variant %+v does not query candidate tier - some platforms only run TechPreview tests in candidate-tier jobs", variant)
516+
}
517+
}
518+
}

tools/codegen/pkg/sippy/json_types.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,10 @@ func QueriesFor(cloud, architecture, topology, networkStack, os, jobTiers, testP
101101
})
102102
}
103103

104-
// Parse JobTiers - comma-separated string, default to standard/informing/blocking if empty
104+
// Parse JobTiers - comma-separated string, default to standard/informing/blocking/candidate if empty
105105
var jobTiersList []string
106106
if jobTiers == "" {
107-
jobTiersList = []string{"standard", "informing", "blocking"}
107+
jobTiersList = []string{"standard", "informing", "blocking", "candidate"}
108108
} else {
109109
// Split by comma, trim whitespace, and deduplicate using sets
110110
tierSet := sets.New[string]()
@@ -115,7 +115,7 @@ func QueriesFor(cloud, architecture, topology, networkStack, os, jobTiers, testP
115115
}
116116
// If all tiers were whitespace/empty after trimming, use defaults
117117
if tierSet.Len() == 0 {
118-
jobTiersList = []string{"standard", "informing", "blocking"}
118+
jobTiersList = []string{"standard", "informing", "blocking", "candidate"}
119119
} else {
120120
jobTiersList = sets.List(tierSet)
121121
}

0 commit comments

Comments
 (0)