Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
3 changes: 2 additions & 1 deletion pkg/api/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import (
// First entry is the primary previous. If not in map, natural progression (X.Y-1) is used.
var VersionTransitionOverrides = map[string][]string{
"5.0": {"4.22"},
// "5.1": {"5.0", "4.23"},
"5.1": {"5.0", "4.23"},
"5.2": {"5.1"},
}

type ParsedVersion struct {
Expand Down
8 changes: 4 additions & 4 deletions pkg/api/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ func TestGetPreviousVersion(t *testing.T) {
expected: "4.22",
},
{
name: "5.1 computes previous as 5.0 (natural progression)",
name: "5.1 uses override to 5.0",
version: "5.1",
availableVersions: availableVersions,
expected: "5.0",
},
{
name: "5.2 computes previous as 5.1 (natural progression)",
name: "5.2 uses override to 5.1",
version: "5.2",
availableVersions: availableVersions,
expected: "5.1",
Expand Down Expand Up @@ -149,12 +149,12 @@ func TestGetPreviousVersionSimple(t *testing.T) {
expected: "4.22",
},
{
name: "5.1 computes previous as 5.0 (natural progression)",
name: "5.1 uses override to 5.0 (cross-major transition)",
version: "5.1",
expected: "5.0",
},
{
name: "5.2 computes previous as 5.1 (natural progression)",
name: "5.2 uses override to 5.1",
version: "5.2",
expected: "5.1",
},
Expand Down
51 changes: 37 additions & 14 deletions pkg/branchcuts/bumper/gen-release-jobs-bumper.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,17 +283,29 @@ func bumpStepEnvVars(env cioperatorapi.TestEnvironment, major int) error {

for k, v := range env {
mm, err := ocplifecycle.ParseMajorMinor(v)
// value does not look like a version => nothing to bump
if err != nil {
if err == nil {
// Value is exactly a version string like "5.0"
if k == ocpReleaseEnvVarName || mm.Major == major {
if err := ReplaceWithNextVersionInPlace(&v, major); err != nil {
errs = append(errs, err)
continue
}
env[k] = v
}
continue
}

if k == ocpReleaseEnvVarName || mm.Major == major {
if err := ReplaceWithNextVersionInPlace(&v, major); err != nil {
errs = append(errs, err)
continue
}
env[k] = v
// Fallback: value is not a bare version but may contain an embedded
// version pattern (e.g., "agent-ove-5.0.x86_64.iso",
// "prow-ocp-5.0-component-readiness", "template_5_0").
// Use ReplaceVersionVariants to bump all variant formats.
bumped, bumpErr := ReplaceVersionVariants(v, major)
if bumpErr != nil {
errs = append(errs, bumpErr)
continue
}
if bumped != v {
env[k] = bumped
}
}

Expand Down Expand Up @@ -323,15 +335,26 @@ func bumpTestStepEnvVars(multistageTest cioperatorapi.TestStep, major int) error
if env.Default == nil {
continue
}
// value does not look like a version => nothing to bump

mm, err := ocplifecycle.ParseMajorMinor(*env.Default)
if err != nil {
if err == nil {
// Value is exactly a version string like "5.0"
if env.Name == ocpReleaseEnvVarName || mm.Major == major {
if err := ReplaceWithNextVersionInPlace(env.Default, major); err != nil {
return err
}
}
multistageTest.Environment[i] = env
continue
}
if env.Name == ocpReleaseEnvVarName || mm.Major == major {
if err := ReplaceWithNextVersionInPlace(env.Default, major); err != nil {
return err
}

// Fallback: value contains an embedded version pattern
bumped, bumpErr := ReplaceVersionVariants(*env.Default, major)
if bumpErr != nil {
return bumpErr
}
if bumped != *env.Default {
*env.Default = bumped
}
multistageTest.Environment[i] = env
}
Expand Down
170 changes: 170 additions & 0 deletions pkg/branchcuts/bumper/gen-release-jobs-bumper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,81 @@ func TestBumpStepEnvVars(t *testing.T) {
env: nil,
wantEnv: nil,
},
// Fallback: embedded version in env var values
{
id: "Bumps AGENT_ISO with embedded dot version",
major: 5,
env: cioperatorapi.TestEnvironment{
"AGENT_ISO": "agent-ove-5.0.x86_64.iso",
},
wantEnv: cioperatorapi.TestEnvironment{
"AGENT_ISO": "agent-ove-5.1.x86_64.iso",
},
},
{
id: "Bumps TELEMETRY_GROUP with embedded dot version",
major: 5,
env: cioperatorapi.TestEnvironment{
"TELEMETRY_GROUP": "prow-ocp-5.0-component-readiness",
},
wantEnv: cioperatorapi.TestEnvironment{
"TELEMETRY_GROUP": "prow-ocp-5.1-component-readiness",
},
},
{
id: "Bumps JOB_NAME with embedded dot version",
major: 5,
env: cioperatorapi.TestEnvironment{
"JOB_NAME": "periodic-ci-openshift-release-master-nightly-5.0-e2e-aws",
},
wantEnv: cioperatorapi.TestEnvironment{
"JOB_NAME": "periodic-ci-openshift-release-master-nightly-5.1-e2e-aws",
},
},
{
id: "Bumps REPORTER_TEMPLATE_NAME with underscore version",
major: 5,
env: cioperatorapi.TestEnvironment{
"REPORTER_TEMPLATE_NAME": "component_readiness_5_0",
},
wantEnv: cioperatorapi.TestEnvironment{
"REPORTER_TEMPLATE_NAME": "component_readiness_5_1",
},
},
{
id: "Bumps embedded hyphen version",
major: 5,
env: cioperatorapi.TestEnvironment{
"CHANNEL": "cnv-release-5-0-z",
},
wantEnv: cioperatorapi.TestEnvironment{
"CHANNEL": "cnv-release-5-1-z",
},
},
{
id: "Does not bump embedded version with different major",
major: 4,
env: cioperatorapi.TestEnvironment{
"AGENT_ISO": "agent-ove-5.0.x86_64.iso",
},
wantEnv: cioperatorapi.TestEnvironment{
"AGENT_ISO": "agent-ove-5.0.x86_64.iso",
},
},
{
id: "Bumps mix of bare and embedded versions",
major: 5,
env: cioperatorapi.TestEnvironment{
"OCP_VERSION": "5.0",
"AGENT_ISO": "agent-ove-5.0.x86_64.iso",
"UNRELATED_VAR": "hello-world",
},
wantEnv: cioperatorapi.TestEnvironment{
"OCP_VERSION": "5.1",
"AGENT_ISO": "agent-ove-5.1.x86_64.iso",
"UNRELATED_VAR": "hello-world",
},
},
}
for _, test := range tests {
t.Run(test.id, func(t *testing.T) {
Expand Down Expand Up @@ -391,6 +466,101 @@ func TestBumpTestStepEnvVars(t *testing.T) {
},
},
},
// Fallback: embedded version in step parameter values
{
id: "Bumps AGENT_ISO with embedded version in step param",
major: 5,
testStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "AGENT_ISO", Default: strRef("agent-ove-5.0.x86_64.iso")},
},
},
},
wantStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "AGENT_ISO", Default: strRef("agent-ove-5.1.x86_64.iso")},
},
},
},
},
{
id: "Bumps REPORTER_TEMPLATE_NAME with underscore version in step param",
major: 5,
testStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "REPORTER_TEMPLATE_NAME", Default: strRef("component_readiness_5_0")},
},
},
},
wantStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "REPORTER_TEMPLATE_NAME", Default: strRef("component_readiness_5_1")},
},
},
},
},
{
id: "Bumps TELEMETRY_GROUP with embedded version in step param",
major: 5,
testStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "TELEMETRY_GROUP", Default: strRef("prow-ocp-5.0-component-readiness")},
},
},
},
wantStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "TELEMETRY_GROUP", Default: strRef("prow-ocp-5.1-component-readiness")},
},
},
},
},
{
id: "Does not bump embedded version with different major in step param",
major: 4,
testStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "AGENT_ISO", Default: strRef("agent-ove-5.0.x86_64.iso")},
},
},
},
wantStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "AGENT_ISO", Default: strRef("agent-ove-5.0.x86_64.iso")},
},
},
},
},
{
id: "Bumps mix of bare and embedded versions in step params",
major: 5,
testStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "OCP_VERSION", Default: strRef("5.0")},
{Name: "AGENT_ISO", Default: strRef("agent-ove-5.0.x86_64.iso")},
{Name: "UNRELATED", Default: strRef("hello-world")},
},
},
},
wantStep: cioperatorapi.TestStep{
LiteralTestStep: &cioperatorapi.LiteralTestStep{
Environment: []cioperatorapi.StepParameter{
{Name: "OCP_VERSION", Default: strRef("5.1")},
{Name: "AGENT_ISO", Default: strRef("agent-ove-5.1.x86_64.iso")},
{Name: "UNRELATED", Default: strRef("hello-world")},
},
},
},
},
}
for _, test := range tests {
t.Run(test.id, func(t *testing.T) {
Expand Down
Loading