Skip to content

Commit c3056f0

Browse files
committed
branchcuts: add bumping of release gating jobs from sippy config
1 parent bd7f225 commit c3056f0

File tree

3 files changed

+617
-6
lines changed

3 files changed

+617
-6
lines changed

pkg/branchcuts/bumper/gen-release-jobs-bumper.go

Lines changed: 67 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ type GeneratedReleaseGatingJobsBumper struct {
2626
getFilesRegexp *regexp.Regexp
2727
jobsDir string
2828
newIntervalValue int
29+
sippyConfigPath string // could be fetched from https://github.com/openshift/sippy/blob/main/config/openshift.yaml
30+
useSippyConfig bool
2931
}
3032

3133
var _ Bumper[*cioperatorcfg.DataWithInfo] = &GeneratedReleaseGatingJobsBumper{}
@@ -38,14 +40,40 @@ func NewGeneratedReleaseGatingJobsBumper(ocpVer, jobsDir string, newIntervalValu
3840
mmRegexp := fmt.Sprintf("%d\\.%d", mm.Major, mm.Minor)
3941
getFilesRegexp := regexp.MustCompile(fmt.Sprintf(releaseJobsRegexPatternFormat, mmRegexp))
4042
return &GeneratedReleaseGatingJobsBumper{
41-
mm,
42-
getFilesRegexp,
43-
jobsDir,
44-
newIntervalValue,
43+
mm: mm,
44+
getFilesRegexp: getFilesRegexp,
45+
jobsDir: jobsDir,
46+
newIntervalValue: newIntervalValue,
47+
useSippyConfig: false,
48+
}, nil
49+
}
50+
51+
// NewGeneratedReleaseGatingJobsBumperWithSippy creates a bumper that uses Sippy config to determine which files to bump
52+
func NewGeneratedReleaseGatingJobsBumperWithSippy(ocpVer, jobsDir, sippyConfigPath string, newIntervalValue int) (*GeneratedReleaseGatingJobsBumper, error) {
53+
mm, err := ocplifecycle.ParseMajorMinor(ocpVer)
54+
if err != nil {
55+
return nil, fmt.Errorf("parse release: %w", err)
56+
}
57+
mmRegexp := fmt.Sprintf("%d\\.%d", mm.Major, mm.Minor)
58+
getFilesRegexp := regexp.MustCompile(fmt.Sprintf(releaseJobsRegexPatternFormat, mmRegexp))
59+
return &GeneratedReleaseGatingJobsBumper{
60+
mm: mm,
61+
getFilesRegexp: getFilesRegexp,
62+
jobsDir: jobsDir,
63+
newIntervalValue: newIntervalValue,
64+
sippyConfigPath: sippyConfigPath,
65+
useSippyConfig: true,
4566
}, nil
4667
}
4768

4869
func (b *GeneratedReleaseGatingJobsBumper) GetFiles() ([]string, error) {
70+
if b.useSippyConfig {
71+
return b.getFilesFromSippy()
72+
}
73+
return b.getFilesFromRegex()
74+
}
75+
76+
func (b *GeneratedReleaseGatingJobsBumper) getFilesFromRegex() ([]string, error) {
4977
files := make([]string, 0)
5078
err := filepath.Walk(b.jobsDir, func(path string, info fs.FileInfo, err error) error {
5179
if b.getFilesRegexp.Match([]byte(path)) {
@@ -56,6 +84,25 @@ func (b *GeneratedReleaseGatingJobsBumper) GetFiles() ([]string, error) {
5684
return files, err
5785
}
5886

87+
func (b *GeneratedReleaseGatingJobsBumper) getFilesFromSippy() ([]string, error) {
88+
releaseVersion := fmt.Sprintf("%d.%d", b.mm.Major, b.mm.Minor)
89+
configRootDir := filepath.Dir(filepath.Dir(b.jobsDir))
90+
91+
configFiles, err := GetConfigFilesForReleaseFromSippy(b.sippyConfigPath, releaseVersion, configRootDir)
92+
if err != nil {
93+
logrus.WithError(err).Warnf("failed to get config files from Sippy for release %s, falling back to regex", releaseVersion)
94+
return b.getFilesFromRegex()
95+
}
96+
97+
if len(configFiles) == 0 {
98+
logrus.Warnf("no config files found from Sippy for release %s, falling back to regex", releaseVersion)
99+
return b.getFilesFromRegex()
100+
}
101+
102+
logrus.Infof("found %d config files from Sippy for release %s", len(configFiles), releaseVersion)
103+
return configFiles, nil
104+
}
105+
59106
func (b *GeneratedReleaseGatingJobsBumper) Unmarshall(file string) (*cioperatorcfg.DataWithInfo, error) {
60107
cfgDataByFilename, err := cioperatorcfg.LoadDataByFilename(file)
61108
if err != nil {
@@ -79,6 +126,12 @@ func (b *GeneratedReleaseGatingJobsBumper) BumpFilename(
79126
return "", err
80127
}
81128
dataWithInfo.Info.Metadata.Variant = newVariant
129+
newBranch, err := ReplaceWithNextVersion(dataWithInfo.Info.Metadata.Branch, b.mm.Major)
130+
if err != nil {
131+
return "", err
132+
}
133+
dataWithInfo.Info.Metadata.Branch = newBranch
134+
82135
return dataWithInfo.Info.Metadata.Basename(), nil
83136
}
84137

@@ -102,10 +155,16 @@ func (b *GeneratedReleaseGatingJobsBumper) BumpContent(dataWithInfo *cioperatorc
102155
return nil, err
103156
}
104157

158+
// Bump variant in zz_generated_metadata
105159
if err := ReplaceWithNextVersionInPlace(&config.Metadata.Variant, major); err != nil {
106160
return nil, err
107161
}
108162

163+
// Bump branch in zz_generated_metadata (e.g., release-4.21 -> release-4.22)
164+
if err := ReplaceWithNextVersionInPlace(&config.Metadata.Branch, major); err != nil {
165+
return nil, err
166+
}
167+
109168
if config.Tests != nil {
110169
for i := 0; i < len(config.Tests); i++ {
111170
if config.Tests[i].Interval != nil {
@@ -188,8 +247,10 @@ func bumpTests(config *cioperatorapi.ReleaseBuildConfiguration, major int) error
188247
return err
189248
}
190249

191-
if err := ReplaceWithNextVersionInPlace(test.MultiStageTestConfiguration.Workflow, major); err != nil {
192-
return err
250+
if test.MultiStageTestConfiguration.Workflow != nil {
251+
if err := ReplaceWithNextVersionInPlace(test.MultiStageTestConfiguration.Workflow, major); err != nil {
252+
return err
253+
}
193254
}
194255

195256
config.Tests[i] = test

0 commit comments

Comments
 (0)