@@ -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
3133var _ 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
4869func (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+
59106func (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