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
4 changes: 2 additions & 2 deletions cmd/sippy/seed_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ type SeedDataFlags struct {
func NewSeedDataFlags() *SeedDataFlags {
return &SeedDataFlags{
DBFlags: flags.NewPostgresDatabaseFlags(),
Releases: []string{"4.20", "4.19"}, // Default releases
JobsPerRelease: 3, // Default jobs per release
Releases: []string{"5.0", "4.22", "4.21"}, // Default releases
JobsPerRelease: 3, // Default jobs per release
TestNames: []string{
"install should succeed: infrastructure",
"install should succeed: overall",
Expand Down
7 changes: 6 additions & 1 deletion sippy-ng/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,13 @@ const FeatureGateRedirectWrapper = () => {

const FeatureGatesWrapper = () => {
const { release } = useParams()
const releases = React.useContext(ReleasesContext)
return RedirectLatestReleaseWrapper(
<FeatureGates key={'jobs-' + release} release={release} />
<FeatureGates
key={'jobs-' + release}
release={release}
releases={releases}
/>
)
}

Expand Down
26 changes: 11 additions & 15 deletions sippy-ng/src/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -308,22 +308,18 @@ export function not(filter) {
return filter
}

// Utility for parsing release versions that include a version like "X.Y"
// We don't want to be too picky here as the release name could have extra bits like "X.Y-okd"
// and it's good enough just to know the major and minor version numbers.
export function parseVersion(versionStr) {
const match = String(versionStr).match(/(\d+)\.(\d+)/)
if (!match) return {}
return { major: Number(match[1]), minor: Number(match[2]) }
}

export function useNewInstallTests(release) {
let digits = release.split('.', 2)
if (digits.length < 2) {
return false
}
const major = parseInt(digits[0])
const minor = parseInt(digits[1])
if (isNaN(major) || isNaN(minor)) {
return false
}
if (major < 4) {
return false
} else if (major == 4 && minor < 11) {
return false
}
return true
const { major, minor } = parseVersion(release)
return major > 4 || (major === 4 && minor >= 11)
}

export function getReportStartDate(reportDate) {
Expand Down
81 changes: 55 additions & 26 deletions sippy-ng/src/tests/FeatureGates.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { DataGrid } from '@mui/x-data-grid'
import { Link, useNavigate } from 'react-router-dom'
import { NumberParam, StringParam, useQueryParam } from 'use-query-params'
import {
parseVersion,
pathForTestSubstringByVariant,
safeEncodeURIComponent,
SafeJSONParam,
Expand All @@ -19,17 +20,33 @@ import SimpleBreadcrumbs from '../components/SimpleBreadcrumbs'
export default function FeatureGates(props) {
const navigate = useNavigate()

const { classes } = props
const { release, releases } = props
const [fetchError, setFetchError] = React.useState('')
const [isLoaded, setLoaded] = React.useState(false)
const [rows, setRows] = React.useState([])

const defaultFilterModel = React.useMemo(() => {
if (!props.release) return { items: [] }
// Walk two releases back for comparison, but only if those releases had feature gates
function walkBackForFGLimits(release, releases) {
if (!release || !releases?.release_attrs) return []
let fgLimit = releases.release_attrs[release]
if (!fgLimit) return []

for (let i = 0; i < 2; i++) {
let prev = fgLimit.previous_release
if (!prev) break
prev = releases.release_attrs[prev]
if (!prev || !prev.capabilities?.featureGates) break
fgLimit = prev
}

const [major, minor] = props.release.split('.').map(Number)
const { major, minor } = parseVersion(fgLimit.name)
if (!major) return [] // version filters only work with "X.Y" style releases

return {
return [String(major), String(minor)]
}

const defaultFilterModel = React.useMemo(() => {
let filterItems = {
items: [
{
columnField: 'enabled',
Expand All @@ -43,6 +60,12 @@ export default function FeatureGates(props) {
operatorValue: 'has entry containing',
value: 'Default:SelfManagedHA',
},
],
}

const [major, minor] = walkBackForFGLimits(release, releases)
if (major) {
filterItems.items.push(
{
columnField: 'first_seen_in_major',
operatorValue: '=',
Expand All @@ -51,42 +74,47 @@ export default function FeatureGates(props) {
{
columnField: 'first_seen_in_minor',
operatorValue: '>=',
value: String(Math.max(minor - 2, 15)), // don't go below 4.15
},
],
value: String(minor),
}
)
}
}, [props.release])
return filterItems
}, [props.release, props.releases])

const staleFeatureGates = React.useMemo(() => {
if (!props.release) return []

const [major, minor] = props.release.split('.').map(Number)

return [
let filterItems = [
{
columnField: 'enabled',
not: true,
operatorValue: 'has entry',
operatorValue: 'has entry containing',
value: 'Default:Hypershift',
},
{
columnField: 'enabled',
not: true,
operatorValue: 'has entry',
operatorValue: 'has entry containing',
value: 'Default:SelfManagedHA',
},
{
columnField: 'first_seen_in_major',
operatorValue: '=',
value: String(major),
},
{
columnField: 'first_seen_in_minor',
operatorValue: '<=',
value: String(Math.max(minor - 2, 15)),
},
]
}, [props.release])

const [major, minor] = walkBackForFGLimits(release, releases)
if (major) {
filterItems.push(
{
columnField: 'first_seen_in_major',
operatorValue: '=',
value: String(major),
},
{
columnField: 'first_seen_in_minor',
operatorValue: '<=',
value: String(minor),
}
)
}
return filterItems
}, [props.release, props.releases])

const [filterModel = defaultFilterModel, setFilterModel] = useQueryParam(
'filters',
Expand Down Expand Up @@ -398,6 +426,7 @@ FeatureGates.defaultProps = {
FeatureGates.propTypes = {
classes: PropTypes.object,
release: PropTypes.string.isRequired,
releases: PropTypes.object.isRequired,
pageSize: PropTypes.number,
sort: PropTypes.string,
sortField: PropTypes.string,
Expand Down