CNTRLPLANE-3509: Resolve N-minor release images via release controller API - #79627
Conversation
|
Skipping CI for Draft Pull Request. |
|
@jparrill: This pull request references CNTRLPLANE-3509 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the task to target the "5.0.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughAdds a CI step that resolves NODEPOOL_N{1..4}_VERSION to OCP_IMAGE_N{n} pull specs, wires that step into HyperShift e2e workflows, updates job configs to accept NODEPOOL_N{n}_VERSION inputs, and makes e2e and guest scripts source ${SHARED_DIR}/nodepool_release_images. ChangesNodepool Release Image Resolution for HyperShift E2E
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 14 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (14 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-ref.yaml (1)
72-77: ⚡ Quick win
NODEPOOL_N3_VERSION/NODEPOOL_N4_VERSIONare unused in the self-managed flow.The self-managed commands script only constructs
--e2e.n1/n2-minor-release-imageargs (and thedependenciesblock here only declaresOCP_IMAGE_N1/OCP_IMAGE_N2), so these two env entries have no effect. Drop them, or wire up N3/N4 args + dependencies if n-3/n-4 skew is intended for self-managed.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-ref.yaml` around lines 72 - 77, The NODEPOOL_N3_VERSION and NODEPOOL_N4_VERSION environment entries are unused in the self-managed flow; either remove them from the job spec or wire them into the self-managed commands and dependencies. If removing: delete NODEPOOL_N3_VERSION and NODEPOOL_N4_VERSION from the env list and any related references. If enabling n-3/n-4 skew: add corresponding dependency entries (e.g. OCP_IMAGE_N3/OCP_IMAGE_N4) to the dependencies block and update the self-managed command construction to include --e2e.n3-minor-release-image and --e2e.n4-minor-release-image flags sourced from NODEPOOL_N3_VERSION/NODEPOOL_N4_VERSION so the variables are actually used.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh`:
- Around line 53-55: The curl call that populates pullspec in
resolve_release_image uses --retry/--retry-delay but no per-attempt timeouts, so
add --connect-timeout and --max-time flags to the curl invocation that sets
pullspec (the command assigned to the pullspec variable) to bound each attempt
(e.g. short connect and overall per-attempt limits); update the same helper
occurrences duplicated in hypershift AWS nested/external and Azure scripts
(where resolve_release_image or the pullspec assignment is present), and either
parameterize the releasestream host by arch or add a note/check after retrieving
pullSpec to ensure the returned pullSpec matches AWS_MULTI_ARCH handling.
In
`@ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh`:
- Around line 62-67: The two unused resolution blocks for
NODEPOOL_N3_VERSION/NODEPOOL_N4_VERSION (which call resolve_release_image and
set OCP_IMAGE_N3/OCP_IMAGE_N4) are dead because the script only emits
--e2e.n1/n2-minor-release-image; remove the entire
NODEPOOL_N3_VERSION/NODEPOOL_N4_VERSION blocks and any references or exported
env vars for OCP_IMAGE_N3 and OCP_IMAGE_N4 to eliminate the dead assignments, or
alternatively if you intended to include N3/N4 skew tests, add the corresponding
e2e args (e.g., --e2e.n3-minor-release-image/--e2e.n4-minor-release-image)
wherever arguments are built so the resolve_release_image calls for
NODEPOOL_N3_VERSION/NODEPOOL_N4_VERSION are actually consumed.
---
Nitpick comments:
In
`@ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-ref.yaml`:
- Around line 72-77: The NODEPOOL_N3_VERSION and NODEPOOL_N4_VERSION environment
entries are unused in the self-managed flow; either remove them from the job
spec or wire them into the self-managed commands and dependencies. If removing:
delete NODEPOOL_N3_VERSION and NODEPOOL_N4_VERSION from the env list and any
related references. If enabling n-3/n-4 skew: add corresponding dependency
entries (e.g. OCP_IMAGE_N3/OCP_IMAGE_N4) to the dependencies block and update
the self-managed command construction to include --e2e.n3-minor-release-image
and --e2e.n4-minor-release-image flags sourced from
NODEPOOL_N3_VERSION/NODEPOOL_N4_VERSION so the variables are actually used.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: b668e5b1-a47f-4fe4-a9cc-1cec1e0e1614
📒 Files selected for processing (9)
ci-operator/config/openshift/hypershift/openshift-hypershift-main.yamlci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.shci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-ref.yamlci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.shci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-ref.yamlci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.shci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-ref.yamlci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.shci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-ref.yaml
✅ Files skipped from review due to trivial changes (1)
- ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-ref.yaml
| pullspec=$(curl -q -L -s --retry 5 --retry-delay 10 \ | ||
| "https://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/${version}.0-0.${stream}/latest" \ | ||
| | jq -r ".pullSpec // empty") |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
curl -q -L -s --connect-timeout 10 --max-time 30 \
"https://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/4.19.0-0.ci/latest" | jq '{name, phase, pullSpec}'Repository: openshift/release
Length of output: 230
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n --fixed-string 'api/v1/releasestream/${version}.0-0.${stream}/latest' ci-operator/step-registry || true
rg -n --fixed-string 'pullSpec // empty' ci-operator/step-registry || true
rg -n --fixed-string 'releasestream/' ci-operator/step-registry || trueRepository: openshift/release
Length of output: 1405
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n --fixed-strings 'api/v1/releasestream/${version}.0-0.${stream}/latest' ci-operator/step-registry || true
rg -n --fixed-strings 'pullSpec // empty' ci-operator/step-registry || true
rg -n --fixed-strings 'releasestream/' ci-operator/step-registry || trueRepository: openshift/release
Length of output: 3399
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate any multi-arch handling in hypershift AWS e2e scripts
rg -n 'AWS_MULTI_ARCH|MULTI_ARCH|multi[-_ ]arch|arch' ci-operator/step-registry/hypershift/aws/run-e2e ci-operator/step-registry/hypershift/aws || true
# Show the relevant curl blocks (and nearby variables) in the four hypershift scripts that match the releasestream URL.
for f in \
ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh \
ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh \
ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh \
ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh
do
echo "==== $f (around curl) ===="
sed -n '35,75p' "$f" | nl -ba
doneRepository: openshift/release
Length of output: 3345
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for f in \
ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh \
ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh \
ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh \
ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh
do
echo "==== $f (around curl) ===="
sed -n '45,65p' "$f"
echo
done
for f in \
ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh \
ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh
do
echo "==== $f (AWS_MULTI_ARCH handling & e2e args) ===="
sed -n '30,55p' "$f"
echo
sed -n '135,170p' "$f"
echo
doneRepository: openshift/release
Length of output: 7110
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n "arm64\.ocp\.releases\.ci\.openshift\.org|amd64\.ocp\.releases\.ci\.openshift\.org" ci-operator/step-registry/hypershift ci-operator/step-registry/telco5g ci-operator/step-registry/openshift || true
rg -n "latest-release-image|previous-release-image|OCP_IMAGE_LATEST|OCP_IMAGE_PREVIOUS|OCP_IMAGE_N1" ci-operator/step-registry/hypershift/aws/run-e2e ci-operator/step-registry/hypershift/azure/run-e2e || trueRepository: openshift/release
Length of output: 6976
Add per-attempt connect/transfer timeouts to release-resolver curl
resolve_release_image uses curl --retry/--retry-delay without --connect-timeout/--max-time, so a stalled connection to the releasestream API can block the step until the overall step timeout; bound each attempt with timeouts (same helper is duplicated in hypershift AWS nested/external and Azure self-managed/regular scripts). The releasestream/.../latest response includes a .pullSpec field (so the jq -r ".pullSpec // empty" extraction remains valid).
- Potential arch skew: these scripts enable
--e2e.aws-multi-arch=truewhenAWS_MULTI_ARCH=true, but still resolve the payload via theamd64.ocp...releasestream URL; confirm the returnedpullSpecis multi-arch (or parameterize by arch).
♻️ Bound each attempt
- pullspec=$(curl -q -L -s --retry 5 --retry-delay 10 \
+ pullspec=$(curl -q -L -s --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 10 \
"https://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/${version}.0-0.${stream}/latest" \
| jq -r ".pullSpec // empty")📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| pullspec=$(curl -q -L -s --retry 5 --retry-delay 10 \ | |
| "https://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/${version}.0-0.${stream}/latest" \ | |
| | jq -r ".pullSpec // empty") | |
| pullspec=$(curl -q -L -s --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 10 \ | |
| "https://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/${version}.0-0.${stream}/latest" \ | |
| | jq -r ".pullSpec // empty") |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In
`@ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh`
around lines 53 - 55, The curl call that populates pullspec in
resolve_release_image uses --retry/--retry-delay but no per-attempt timeouts, so
add --connect-timeout and --max-time flags to the curl invocation that sets
pullspec (the command assigned to the pullspec variable) to bound each attempt
(e.g. short connect and overall per-attempt limits); update the same helper
occurrences duplicated in hypershift AWS nested/external and Azure scripts
(where resolve_release_image or the pullspec assignment is present), and either
parameterize the releasestream host by arch or add a note/check after retrieving
pullSpec to ensure the returned pullSpec matches AWS_MULTI_ARCH handling.
|
@jparrill, Interacting with pj-rehearseComment: Once you are satisfied with the results of the rehearsals, comment: |
|
/pj-rehearse |
|
@jparrill: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
@jparrill, If the problem persists, please contact Test Platform. |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh (1)
70-92:⚠️ Potential issue | 🟠 Major | ⚡ Quick winSame unbound
OCP_IMAGE_N*risk undernounset.Identical pattern to the other run-e2e scripts: the source on Line 71 is optional but Lines 75/80/85/90 dereference
${OCP_IMAGE_N1..N4}without defaults, so a missing file or unwritten variable aborts underset -o nounset(Line 28). Add the non-empty guard.🛡️ Suggested guard
N1_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N1} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then N1_NP_VERSION_TEST_ARGS="--e2e.n1-minor-release-image=${OCP_IMAGE_N1}" fi N2_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N2} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N2:-}" && "${OCP_IMAGE_N2}" != "${OCP_IMAGE_LATEST}" ]]; then N2_NP_VERSION_TEST_ARGS="--e2e.n2-minor-release-image=${OCP_IMAGE_N2}" fi N3_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N3} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N3:-}" && "${OCP_IMAGE_N3}" != "${OCP_IMAGE_LATEST}" ]]; then N3_NP_VERSION_TEST_ARGS="--e2e.n3-minor-release-image=${OCP_IMAGE_N3}" fi N4_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N4} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N4:-}" && "${OCP_IMAGE_N4}" != "${OCP_IMAGE_LATEST}" ]]; then N4_NP_VERSION_TEST_ARGS="--e2e.n4-minor-release-image=${OCP_IMAGE_N4}" fi🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh` around lines 70 - 92, The script dereferences OCP_IMAGE_N1..OCP_IMAGE_N4 without guarding against unset values (breaking under set -o nounset); update the conditional checks that set N1_NP_VERSION_TEST_ARGS, N2_NP_VERSION_TEST_ARGS, N3_NP_VERSION_TEST_ARGS and N4_NP_VERSION_TEST_ARGS to use a non-empty guard or safe parameter expansion (e.g. test [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1:-}" != "${OCP_IMAGE_LATEST}" ]] before assigning) so the optional source of nodepool_release_images can be absent without causing an unbound variable error.ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh (1)
39-51:⚠️ Potential issue | 🟠 Major | ⚡ Quick winSame unbound
OCP_IMAGE_N1/OCP_IMAGE_N2risk undernounset.As in the AWS nested script, the source on Line 40 is optional (
-fguard) but Lines 44/49 reference${OCP_IMAGE_N1}/${OCP_IMAGE_N2}without a default. Withset -o nounset(Line 19), a missing shared file or an unwritten variable aborts the job. Apply the same non-empty guard.🛡️ Suggested guard
N1_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N1} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then N1_NP_VERSION_TEST_ARGS="--e2e.n1-minor-release-image=${OCP_IMAGE_N1}" fi N2_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N2} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N2:-}" && "${OCP_IMAGE_N2}" != "${OCP_IMAGE_LATEST}" ]]; then N2_NP_VERSION_TEST_ARGS="--e2e.n2-minor-release-image=${OCP_IMAGE_N2}" fi🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh` around lines 39 - 51, The comparisons reference OCP_IMAGE_N1 and OCP_IMAGE_N2 while the shared file is optional and nounset is enabled; update the conditions to avoid unbound variable errors by using parameter expansion or explicit non-empty checks — e.g. change the ifs to check that the variable is set and non-empty (if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then ...) and similarly for OCP_IMAGE_N2, or use ${OCP_IMAGE_N1:-} and ${OCP_IMAGE_N2:-} in the comparisons to provide safe defaults.ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh (1)
46-68:⚠️ Potential issue | 🟠 Major | ⚡ Quick winFix nounset failure from potentially-unset
OCP_IMAGE_N1..N4when sourcingnodepool_release_images
hypershift-aws-run-e2e-nested-commands.shruns withset -o nounsetand then unconditionally references${OCP_IMAGE_N1..N4}in the N1–N4 blocks. The resolve step always truncates/creates${SHARED_DIR}/nodepool_release_images, but it only appendsOCP_IMAGE_N${n}=...whenNODEPOOL_N${n}_VERSIONis non-empty—so the sourced file can be partial and${OCP_IMAGE_N*}may be unset, aborting the job.🛡️ Suggested guard for each N-version block
N1_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N1} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then N1_NP_VERSION_TEST_ARGS="--e2e.n1-minor-release-image=${OCP_IMAGE_N1}" fi N2_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N2} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N2:-}" && "${OCP_IMAGE_N2}" != "${OCP_IMAGE_LATEST}" ]]; then N2_NP_VERSION_TEST_ARGS="--e2e.n2-minor-release-image=${OCP_IMAGE_N2}" fi N3_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N3} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N3:-}" && "${OCP_IMAGE_N3}" != "${OCP_IMAGE_LATEST}" ]]; then N3_NP_VERSION_TEST_ARGS="--e2e.n3-minor-release-image=${OCP_IMAGE_N3}" fi N4_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N4} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N4:-}" && "${OCP_IMAGE_N4}" != "${OCP_IMAGE_LATEST}" ]]; then N4_NP_VERSION_TEST_ARGS="--e2e.n4-minor-release-image=${OCP_IMAGE_N4}" fi🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh` around lines 46 - 68, The script references potentially-undefined variables OCP_IMAGE_N1 OCP_IMAGE_N2 OCP_IMAGE_N3 and OCP_IMAGE_N4 under nounset; update each N*-block (where N1_NP_VERSION_TEST_ARGS, N2_NP_VERSION_TEST_ARGS, N3_NP_VERSION_TEST_ARGS, N4_NP_VERSION_TEST_ARGS are set) to guard the comparison against OCP_IMAGE_LATEST by first ensuring the OCP_IMAGE_N* variable is defined (for example check variable existence with [[ -v OCP_IMAGE_N1 ]] or use a safe default via parameter expansion) and only perform the != comparison/set the corresponding N*_NP_VERSION_TEST_ARGS when the variable is present; apply the same change to all four blocks that source the SHARED_DIR/nodepool_release_images.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In
`@ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh`:
- Around line 46-68: The script references potentially-undefined variables
OCP_IMAGE_N1 OCP_IMAGE_N2 OCP_IMAGE_N3 and OCP_IMAGE_N4 under nounset; update
each N*-block (where N1_NP_VERSION_TEST_ARGS, N2_NP_VERSION_TEST_ARGS,
N3_NP_VERSION_TEST_ARGS, N4_NP_VERSION_TEST_ARGS are set) to guard the
comparison against OCP_IMAGE_LATEST by first ensuring the OCP_IMAGE_N* variable
is defined (for example check variable existence with [[ -v OCP_IMAGE_N1 ]] or
use a safe default via parameter expansion) and only perform the !=
comparison/set the corresponding N*_NP_VERSION_TEST_ARGS when the variable is
present; apply the same change to all four blocks that source the
SHARED_DIR/nodepool_release_images.
In
`@ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh`:
- Around line 39-51: The comparisons reference OCP_IMAGE_N1 and OCP_IMAGE_N2
while the shared file is optional and nounset is enabled; update the conditions
to avoid unbound variable errors by using parameter expansion or explicit
non-empty checks — e.g. change the ifs to check that the variable is set and
non-empty (if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" !=
"${OCP_IMAGE_LATEST}" ]]; then ...) and similarly for OCP_IMAGE_N2, or use
${OCP_IMAGE_N1:-} and ${OCP_IMAGE_N2:-} in the comparisons to provide safe
defaults.
In
`@ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh`:
- Around line 70-92: The script dereferences OCP_IMAGE_N1..OCP_IMAGE_N4 without
guarding against unset values (breaking under set -o nounset); update the
conditional checks that set N1_NP_VERSION_TEST_ARGS, N2_NP_VERSION_TEST_ARGS,
N3_NP_VERSION_TEST_ARGS and N4_NP_VERSION_TEST_ARGS to use a non-empty guard or
safe parameter expansion (e.g. test [[ -n "${OCP_IMAGE_N1:-}" &&
"${OCP_IMAGE_N1:-}" != "${OCP_IMAGE_LATEST}" ]] before assigning) so the
optional source of nodepool_release_images can be absent without causing an
unbound variable error.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 5c337fad-01c6-4db3-ba84-f587b19d606b
📒 Files selected for processing (15)
ci-operator/config/openshift/hypershift/openshift-hypershift-main.yamlci-operator/step-registry/hypershift/aws/e2e/external/hypershift-aws-e2e-external-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/external/oidc/hypershift-aws-e2e-external-oidc-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/metrics/hypershift-aws-e2e-metrics-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/nested/hypershift-aws-e2e-nested-workflow.yamlci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.shci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.shci-operator/step-registry/hypershift/azure/aks/e2e/hypershift-azure-aks-e2e-workflow.yamlci-operator/step-registry/hypershift/azure/aks/external-oidc/hypershift-azure-aks-external-oidc-workflow.yamlci-operator/step-registry/hypershift/azure/e2e/self-managed/hypershift-azure-e2e-self-managed-workflow.yamlci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.shci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.shci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.shci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.metadata.jsonci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.yaml
✅ Files skipped from review due to trivial changes (3)
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.metadata.json
- ci-operator/step-registry/hypershift/azure/aks/e2e/hypershift-azure-aks-e2e-workflow.yaml
- ci-operator/step-registry/hypershift/aws/e2e/external/hypershift-aws-e2e-external-workflow.yaml
🚧 Files skipped from review as they are similar to previous changes (1)
- ci-operator/config/openshift/hypershift/openshift-hypershift-main.yaml
6467554 to
81f79a8
Compare
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-aws |
|
@jparrill: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (4)
ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh (1)
50-68:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winGuard
OCP_IMAGE_N1–OCP_IMAGE_N4against unset underset -o nounset.Same issue as in the AWS external script: the producer only writes
OCP_IMAGE_N${n}on successful resolution, so any of N1–N4 may be unset, and the bare${OCP_IMAGE_Nx}comparison aborts the step underset -o nounset(line 3) now that the job configs no longer supplyOCP_IMAGE_NXoverrides.🛡️ Proposed fix (apply to N1–N4)
N1_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N1} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then N1_NP_VERSION_TEST_ARGS="--e2e.n1-minor-release-image=${OCP_IMAGE_N1}" fi N2_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N2} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N2:-}" && "${OCP_IMAGE_N2}" != "${OCP_IMAGE_LATEST}" ]]; then N2_NP_VERSION_TEST_ARGS="--e2e.n2-minor-release-image=${OCP_IMAGE_N2}" fi N3_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N3} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N3:-}" && "${OCP_IMAGE_N3}" != "${OCP_IMAGE_LATEST}" ]]; then N3_NP_VERSION_TEST_ARGS="--e2e.n3-minor-release-image=${OCP_IMAGE_N3}" fi N4_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N4} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N4:-}" && "${OCP_IMAGE_N4}" != "${OCP_IMAGE_LATEST}" ]]; then N4_NP_VERSION_TEST_ARGS="--e2e.n4-minor-release-image=${OCP_IMAGE_N4}" fi🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh` around lines 50 - 68, The comparison against possibly unset OCP_IMAGE_N1..OCP_IMAGE_N4 will fail under set -o nounset; update each conditional that sets N1_NP_VERSION_TEST_ARGS, N2_NP_VERSION_TEST_ARGS, N3_NP_VERSION_TEST_ARGS and N4_NP_VERSION_TEST_ARGS to guard the referenced variables (e.g. use ${OCP_IMAGE_N1:-} != "${OCP_IMAGE_LATEST}" or default them earlier with : "${OCP_IMAGE_N1:=}" ) so the shell never expands an unset name; keep the same assignment to the N?_NP_VERSION_TEST_ARGS variables and only set them when the guarded comparison evaluates true.ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh (1)
74-92:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winGuard
OCP_IMAGE_N1–OCP_IMAGE_N4against unset underset -o nounset.Same root cause as the other run-e2e scripts:
OCP_IMAGE_N1–OCP_IMAGE_N4are now only populated by the sourced file when each version resolves, so any can be unset. The bare comparisons abort the step underset -o nounset(line 28) now that theOCP_IMAGE_NXjob dependencies were removed.🛡️ Proposed fix (apply to N1–N4)
N1_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N1} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then N1_NP_VERSION_TEST_ARGS="--e2e.n1-minor-release-image=${OCP_IMAGE_N1}" fi N2_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N2} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N2:-}" && "${OCP_IMAGE_N2}" != "${OCP_IMAGE_LATEST}" ]]; then N2_NP_VERSION_TEST_ARGS="--e2e.n2-minor-release-image=${OCP_IMAGE_N2}" fi N3_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N3} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N3:-}" && "${OCP_IMAGE_N3}" != "${OCP_IMAGE_LATEST}" ]]; then N3_NP_VERSION_TEST_ARGS="--e2e.n3-minor-release-image=${OCP_IMAGE_N3}" fi N4_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N4} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N4:-}" && "${OCP_IMAGE_N4}" != "${OCP_IMAGE_LATEST}" ]]; then N4_NP_VERSION_TEST_ARGS="--e2e.n4-minor-release-image=${OCP_IMAGE_N4}" fi🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh` around lines 74 - 92, The comparisons against OCP_IMAGE_N1..OCP_IMAGE_N4 will fail under set -o nounset if any of those variables are unset; update the logic that sets N1_NP_VERSION_TEST_ARGS (and N2_NP_VERSION_TEST_ARGS, N3..., N4...) to safely handle unset variables by using parameter expansion defaults or explicit existence checks before comparing to OCP_IMAGE_LATEST (e.g., test existence with a guard like checking -n "${OCP_IMAGE_N1-}" or use "${OCP_IMAGE_N1:-}" in the comparison), and only set the corresponding N*_NP_VERSION_TEST_ARGS when the variable is defined and not equal to OCP_IMAGE_LATEST.ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh (1)
50-68:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winGuard
OCP_IMAGE_N1–OCP_IMAGE_N4against unset underset -o nounset.These vars now come solely from the sourced
${SHARED_DIR}/nodepool_release_images. The producer (hypershift-resolve-nodepool-releases-commands.sh) only writesOCP_IMAGE_N${n}when a version resolves (it|| true's failures and logs a WARNING), so any of N1–N4 can be unset. Withset -o nounset(line 3), the bare${OCP_IMAGE_N1}in the comparison aborts the step with "unbound variable". Since the job configs dropped theOCP_IMAGE_NXdependency overrides, this is a reachable regression.🛡️ Proposed fix (apply to N1–N4)
N1_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N1} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then N1_NP_VERSION_TEST_ARGS="--e2e.n1-minor-release-image=${OCP_IMAGE_N1}" fi N2_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N2} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N2:-}" && "${OCP_IMAGE_N2}" != "${OCP_IMAGE_LATEST}" ]]; then N2_NP_VERSION_TEST_ARGS="--e2e.n2-minor-release-image=${OCP_IMAGE_N2}" fi N3_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N3} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N3:-}" && "${OCP_IMAGE_N3}" != "${OCP_IMAGE_LATEST}" ]]; then N3_NP_VERSION_TEST_ARGS="--e2e.n3-minor-release-image=${OCP_IMAGE_N3}" fi N4_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N4} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N4:-}" && "${OCP_IMAGE_N4}" != "${OCP_IMAGE_LATEST}" ]]; then N4_NP_VERSION_TEST_ARGS="--e2e.n4-minor-release-image=${OCP_IMAGE_N4}" fiUsing
-n "${OCP_IMAGE_Nx:-}"also prevents emitting an empty--e2e.nX-minor-release-image=when a version isn't resolved.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh` around lines 50 - 68, Guard the OCP_IMAGE_N1..N4 checks against unset by testing for non-empty with parameter expansion and only then comparing to OCP_IMAGE_LATEST; e.g. for each block that sets N1_NP_VERSION_TEST_ARGS/N2_NP_VERSION_TEST_ARGS/N3_NP_VERSION_TEST_ARGS/N4_NP_VERSION_TEST_ARGS, change the condition to require -n "${OCP_IMAGE_Nx:-}" AND that "${OCP_IMAGE_Nx}" != "${OCP_IMAGE_LATEST}", and when building the flag use the safe expansion ${OCP_IMAGE_Nx:-} so you never emit an empty --e2e.nX-minor-release-image= value.ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh (1)
43-51:⚠️ Potential issue | 🔴 Critical | ⚡ Quick winGuard
OCP_IMAGE_N1/OCP_IMAGE_N2against unset underset -o nounset.The resolve step only writes
OCP_IMAGE_N1/OCP_IMAGE_N2when their versions resolve, so they can be unset. Withset -o nounset(line 19) the bare${OCP_IMAGE_N1}/${OCP_IMAGE_N2}comparison will abort the step.🛡️ Proposed fix
N1_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N1} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1}" != "${OCP_IMAGE_LATEST}" ]]; then N1_NP_VERSION_TEST_ARGS="--e2e.n1-minor-release-image=${OCP_IMAGE_N1}" fi N2_NP_VERSION_TEST_ARGS="" -if [[ ${OCP_IMAGE_N2} != "${OCP_IMAGE_LATEST}" ]]; then +if [[ -n "${OCP_IMAGE_N2:-}" && "${OCP_IMAGE_N2}" != "${OCP_IMAGE_LATEST}" ]]; then N2_NP_VERSION_TEST_ARGS="--e2e.n2-minor-release-image=${OCP_IMAGE_N2}" fi🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh` around lines 43 - 51, The comparisons against OCP_IMAGE_N1 and OCP_IMAGE_N2 under set -o nounset can fail if those variables are unset; update the conditional checks in the blocks that set N1_NP_VERSION_TEST_ARGS and N2_NP_VERSION_TEST_ARGS to safely handle unset variables (e.g., use parameter expansion defaults or explicit -n checks) so the [[ ... ]] tests never reference bare unset variables; locate the two if blocks that set N1_NP_VERSION_TEST_ARGS and N2_NP_VERSION_TEST_ARGS and change the conditions to guard against unset OCP_IMAGE_N1/OCP_IMAGE_N2 (for example using ${OCP_IMAGE_N1:-} / ${OCP_IMAGE_N2:-} or [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1:-}" != "${OCP_IMAGE_LATEST}" ]]).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In
`@ci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.sh`:
- Around line 50-68: Guard the OCP_IMAGE_N1..N4 checks against unset by testing
for non-empty with parameter expansion and only then comparing to
OCP_IMAGE_LATEST; e.g. for each block that sets
N1_NP_VERSION_TEST_ARGS/N2_NP_VERSION_TEST_ARGS/N3_NP_VERSION_TEST_ARGS/N4_NP_VERSION_TEST_ARGS,
change the condition to require -n "${OCP_IMAGE_Nx:-}" AND that
"${OCP_IMAGE_Nx}" != "${OCP_IMAGE_LATEST}", and when building the flag use the
safe expansion ${OCP_IMAGE_Nx:-} so you never emit an empty
--e2e.nX-minor-release-image= value.
In
`@ci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.sh`:
- Around line 50-68: The comparison against possibly unset
OCP_IMAGE_N1..OCP_IMAGE_N4 will fail under set -o nounset; update each
conditional that sets N1_NP_VERSION_TEST_ARGS, N2_NP_VERSION_TEST_ARGS,
N3_NP_VERSION_TEST_ARGS and N4_NP_VERSION_TEST_ARGS to guard the referenced
variables (e.g. use ${OCP_IMAGE_N1:-} != "${OCP_IMAGE_LATEST}" or default them
earlier with : "${OCP_IMAGE_N1:=}" ) so the shell never expands an unset name;
keep the same assignment to the N?_NP_VERSION_TEST_ARGS variables and only set
them when the guarded comparison evaluates true.
In
`@ci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.sh`:
- Around line 43-51: The comparisons against OCP_IMAGE_N1 and OCP_IMAGE_N2 under
set -o nounset can fail if those variables are unset; update the conditional
checks in the blocks that set N1_NP_VERSION_TEST_ARGS and
N2_NP_VERSION_TEST_ARGS to safely handle unset variables (e.g., use parameter
expansion defaults or explicit -n checks) so the [[ ... ]] tests never reference
bare unset variables; locate the two if blocks that set N1_NP_VERSION_TEST_ARGS
and N2_NP_VERSION_TEST_ARGS and change the conditions to guard against unset
OCP_IMAGE_N1/OCP_IMAGE_N2 (for example using ${OCP_IMAGE_N1:-} /
${OCP_IMAGE_N2:-} or [[ -n "${OCP_IMAGE_N1:-}" && "${OCP_IMAGE_N1:-}" !=
"${OCP_IMAGE_LATEST}" ]]).
In
`@ci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.sh`:
- Around line 74-92: The comparisons against OCP_IMAGE_N1..OCP_IMAGE_N4 will
fail under set -o nounset if any of those variables are unset; update the logic
that sets N1_NP_VERSION_TEST_ARGS (and N2_NP_VERSION_TEST_ARGS, N3..., N4...) to
safely handle unset variables by using parameter expansion defaults or explicit
existence checks before comparing to OCP_IMAGE_LATEST (e.g., test existence with
a guard like checking -n "${OCP_IMAGE_N1-}" or use "${OCP_IMAGE_N1:-}" in the
comparison), and only set the corresponding N*_NP_VERSION_TEST_ARGS when the
variable is defined and not equal to OCP_IMAGE_LATEST.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 15180902-ea3c-4c2c-be4d-1701c6ccb421
📒 Files selected for processing (17)
ci-operator/config/openshift/hypershift/openshift-hypershift-main.yamlci-operator/step-registry/hypershift/aws/e2e/external/hypershift-aws-e2e-external-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/external/oidc/hypershift-aws-e2e-external-oidc-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/metrics/hypershift-aws-e2e-metrics-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/nested/hypershift-aws-e2e-nested-workflow.yamlci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.shci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.shci-operator/step-registry/hypershift/azure/aks/e2e/hypershift-azure-aks-e2e-workflow.yamlci-operator/step-registry/hypershift/azure/aks/external-oidc/hypershift-azure-aks-external-oidc-workflow.yamlci-operator/step-registry/hypershift/azure/e2e/self-managed/hypershift-azure-e2e-self-managed-workflow.yamlci-operator/step-registry/hypershift/azure/e2e/v2-self-managed/hypershift-azure-e2e-v2-self-managed-workflow.yamlci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.shci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.shci-operator/step-registry/hypershift/resolve-nodepool-releases/OWNERSci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.shci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.metadata.jsonci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.yaml
✅ Files skipped from review due to trivial changes (3)
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/OWNERS
- ci-operator/step-registry/hypershift/aws/e2e/nested/hypershift-aws-e2e-nested-workflow.yaml
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.metadata.json
🚧 Files skipped from review as they are similar to previous changes (9)
- ci-operator/step-registry/hypershift/aws/e2e/metrics/hypershift-aws-e2e-metrics-workflow.yaml
- ci-operator/step-registry/hypershift/aws/e2e/external/oidc/hypershift-aws-e2e-external-oidc-workflow.yaml
- ci-operator/step-registry/hypershift/azure/aks/e2e/hypershift-azure-aks-e2e-workflow.yaml
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.yaml
- ci-operator/step-registry/hypershift/aws/e2e/external/hypershift-aws-e2e-external-workflow.yaml
- ci-operator/step-registry/hypershift/azure/aks/external-oidc/hypershift-azure-aks-external-oidc-workflow.yaml
- ci-operator/step-registry/hypershift/azure/e2e/self-managed/hypershift-azure-e2e-self-managed-workflow.yaml
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.sh
- ci-operator/config/openshift/hypershift/openshift-hypershift-main.yaml
There was a problem hiding this comment.
♻️ Duplicate comments (1)
ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.sh (1)
15-17:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winAdd per-attempt timeouts to curl in
resolve_release_image.The curl command uses
--retryand--retry-delaybut lacks--connect-timeoutand--max-time, so a stalled connection to the release API can block the step until the overall step timeout. Bound each attempt with short timeouts.⏱️ Add connection and per-attempt timeouts
- pullspec=$(curl -q -L -s --retry 5 --retry-delay 10 \ + pullspec=$(curl -q -L -s --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 10 \ "https://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/${version}.0-0.${stream}/latest" \ | jq -r ".pullSpec // empty")🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.sh` around lines 15 - 17, The curl call that sets pullspec in resolve_release_image lacks per-attempt timeouts; update the curl invocation (the one assigning pullspec) to include --connect-timeout (e.g., 5) and --max-time (e.g., 15) so each retry attempt is bounded, keeping existing --retry and --retry-delay flags intact; modify only the curl arguments in the pullspec assignment to add these options.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Duplicate comments:
In
`@ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.sh`:
- Around line 15-17: The curl call that sets pullspec in resolve_release_image
lacks per-attempt timeouts; update the curl invocation (the one assigning
pullspec) to include --connect-timeout (e.g., 5) and --max-time (e.g., 15) so
each retry attempt is bounded, keeping existing --retry and --retry-delay flags
intact; modify only the curl arguments in the pullspec assignment to add these
options.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: c97aeca1-137a-4411-b29f-0e71311b178c
📒 Files selected for processing (19)
ci-operator/config/openshift/hypershift/openshift-hypershift-main.yamlci-operator/step-registry/hypershift/aws/e2e/external/hypershift-aws-e2e-external-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/external/oidc/hypershift-aws-e2e-external-oidc-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/metrics/hypershift-aws-e2e-metrics-workflow.yamlci-operator/step-registry/hypershift/aws/e2e/nested/hypershift-aws-e2e-nested-workflow.yamlci-operator/step-registry/hypershift/aws/run-e2e/external/hypershift-aws-run-e2e-external-commands.shci-operator/step-registry/hypershift/aws/run-e2e/nested/hypershift-aws-run-e2e-nested-commands.shci-operator/step-registry/hypershift/azure/aks/e2e/hypershift-azure-aks-e2e-workflow.yamlci-operator/step-registry/hypershift/azure/aks/external-oidc/hypershift-azure-aks-external-oidc-workflow.yamlci-operator/step-registry/hypershift/azure/create-selfmanaged-guests/hypershift-azure-create-selfmanaged-guests-commands.shci-operator/step-registry/hypershift/azure/create-selfmanaged-guests/hypershift-azure-create-selfmanaged-guests-ref.yamlci-operator/step-registry/hypershift/azure/e2e/self-managed/hypershift-azure-e2e-self-managed-workflow.yamlci-operator/step-registry/hypershift/azure/e2e/v2-self-managed/hypershift-azure-e2e-v2-self-managed-workflow.yamlci-operator/step-registry/hypershift/azure/run-e2e-self-managed/hypershift-azure-run-e2e-self-managed-commands.shci-operator/step-registry/hypershift/azure/run-e2e/hypershift-azure-run-e2e-commands.shci-operator/step-registry/hypershift/resolve-nodepool-releases/OWNERSci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-commands.shci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.metadata.jsonci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.yaml
✅ Files skipped from review due to trivial changes (3)
- ci-operator/step-registry/hypershift/azure/create-selfmanaged-guests/hypershift-azure-create-selfmanaged-guests-ref.yaml
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.metadata.json
- ci-operator/step-registry/hypershift/azure/e2e/self-managed/hypershift-azure-e2e-self-managed-workflow.yaml
🚧 Files skipped from review as they are similar to previous changes (8)
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/OWNERS
- ci-operator/step-registry/hypershift/azure/e2e/v2-self-managed/hypershift-azure-e2e-v2-self-managed-workflow.yaml
- ci-operator/step-registry/hypershift/aws/e2e/external/hypershift-aws-e2e-external-workflow.yaml
- ci-operator/step-registry/hypershift/aws/e2e/metrics/hypershift-aws-e2e-metrics-workflow.yaml
- ci-operator/step-registry/hypershift/azure/aks/external-oidc/hypershift-azure-aks-external-oidc-workflow.yaml
- ci-operator/step-registry/hypershift/aws/e2e/external/oidc/hypershift-aws-e2e-external-oidc-workflow.yaml
- ci-operator/step-registry/hypershift/resolve-nodepool-releases/hypershift-resolve-nodepool-releases-ref.yaml
- ci-operator/config/openshift/hypershift/openshift-hypershift-main.yaml
|
/pj-rehearse pull-ci-openshift-hypershift-main-e2e-aws |
|
@jparrill: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
/pj-rehearse |
|
@jparrill: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
… API
Replace static ci-operator release imports (n1minor through n4minor) with
runtime resolution via the release controller REST API. This eliminates
concurrent import pods that caused race conditions in ci-tools, failing
~40-45% of e2e runs before tests executed.
Changes:
- Remove n1minor..n4minor and unused latest-418/419/420 release definitions
- Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars
- Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows
- Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts
to prevent crashes when variables are unset
- Improve resolve script with retry logic, HTTP status checks, and hard
failure on resolution errors
Fixes the permafail introduced by openshift#79627 where unguarded variable expansion
under set -o nounset crashed run-e2e scripts before tests could execute.
Jira: CNTRLPLANE-3509
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com>
… API
Replace static ci-operator release imports (n1minor through n4minor) with
runtime resolution via the release controller REST API. This eliminates
concurrent import pods that caused race conditions in ci-tools, failing
~40-45% of e2e runs before tests executed.
Changes:
- Remove n1minor..n4minor and unused latest-418/419/420 release definitions
- Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars
- Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows
- Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts
to prevent crashes when variables are unset
- Improve resolve script with retry logic, HTTP status checks, and hard
failure on resolution errors
Fixes the permafail introduced by openshift#79627 where unguarded variable expansion
under set -o nounset crashed run-e2e scripts before tests could execute.
Jira: CNTRLPLANE-3509
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com>
… API
Replace static ci-operator release imports (n1minor through n4minor) with
runtime resolution via the release controller REST API. This eliminates
concurrent import pods that caused race conditions in ci-tools, failing
~40-45% of e2e runs before tests executed.
Changes:
- Remove n1minor..n4minor and unused latest-418/419/420 release definitions
- Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars
- Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows
- Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts
to prevent crashes when variables are unset
- Improve resolve script with retry logic, HTTP status checks, and hard
failure on resolution errors
Fixes the permafail introduced by openshift#79627 where unguarded variable expansion
under set -o nounset crashed run-e2e scripts before tests could execute.
Jira: CNTRLPLANE-3509
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com>
… API
Replace static ci-operator release imports (n1minor through n4minor) with
runtime resolution via the release controller REST API. This eliminates
concurrent import pods that caused race conditions in ci-tools, failing
~40-45% of e2e runs before tests executed.
Changes:
- Remove n1minor..n4minor and unused latest-418/419/420 release definitions
- Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars
- Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows
- Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts
to prevent crashes when variables are unset
- Improve resolve script with retry logic, HTTP status checks, and hard
failure on resolution errors
Fixes the permafail introduced by openshift#79627 where unguarded variable expansion
under set -o nounset crashed run-e2e scripts before tests could execute.
Jira: CNTRLPLANE-3509
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com>
… API
Replace static ci-operator release imports (n1minor through n4minor) with
runtime resolution via the release controller REST API. This eliminates
concurrent import pods that caused race conditions in ci-tools, failing
~40-45% of e2e runs before tests executed.
Changes:
- Remove n1minor..n4minor and unused latest-418/419/420 release definitions
- Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars
- Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows
- Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts
to prevent crashes when variables are unset
- Improve resolve script with retry logic, HTTP status checks, and hard
failure on resolution errors
Fixes the permafail introduced by openshift#79627 where unguarded variable expansion
under set -o nounset crashed run-e2e scripts before tests could execute.
Jira: CNTRLPLANE-3509
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com>
… API (#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by #79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#79627) Replace ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. Each nXminor entry in the releases: section spawned a concurrent import pod, causing race conditions that failed ~40-45% of e2e-aws runs before tests start. The release resolution logic lives in a single dedicated step ref (hypershift-resolve-nodepool-releases) that queries the release controller API and writes resolved pullspecs to SHARED_DIR. The 4 run-e2e scripts source this file instead of duplicating the logic. Versions are passed as NODEPOOL_NX_VERSION env vars from the job config. This follows the same pattern used by telco5g and hypershift-mce multi-version-test teams. Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ntroller API (openshift#79627)" (openshift#80349) This reverts commit b7407a3. Co-authored-by: Chai Bot <chai-bot@redhat.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#79627) Replace ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. Each nXminor entry in the releases: section spawned a concurrent import pod, causing race conditions that failed ~40-45% of e2e-aws runs before tests start. The release resolution logic lives in a single dedicated step ref (hypershift-resolve-nodepool-releases) that queries the release controller API and writes resolved pullspecs to SHARED_DIR. The 4 run-e2e scripts source this file instead of duplicating the logic. Versions are passed as NODEPOOL_NX_VERSION env vars from the job config. This follows the same pattern used by telco5g and hypershift-mce multi-version-test teams. Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ntroller API (openshift#79627)" (openshift#80349) This reverts commit b7407a3. Co-authored-by: Chai Bot <chai-bot@redhat.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#79627) Replace ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. Each nXminor entry in the releases: section spawned a concurrent import pod, causing race conditions that failed ~40-45% of e2e-aws runs before tests start. The release resolution logic lives in a single dedicated step ref (hypershift-resolve-nodepool-releases) that queries the release controller API and writes resolved pullspecs to SHARED_DIR. The 4 run-e2e scripts source this file instead of duplicating the logic. Versions are passed as NODEPOOL_NX_VERSION env vars from the job config. This follows the same pattern used by telco5g and hypershift-mce multi-version-test teams. Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ntroller API (openshift#79627)" (openshift#80349) This reverts commit b7407a3. Co-authored-by: Chai Bot <chai-bot@redhat.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#79627) Replace ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. Each nXminor entry in the releases: section spawned a concurrent import pod, causing race conditions that failed ~40-45% of e2e-aws runs before tests start. The release resolution logic lives in a single dedicated step ref (hypershift-resolve-nodepool-releases) that queries the release controller API and writes resolved pullspecs to SHARED_DIR. The 4 run-e2e scripts source this file instead of duplicating the logic. Versions are passed as NODEPOOL_NX_VERSION env vars from the job config. This follows the same pattern used by telco5g and hypershift-mce multi-version-test teams. Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ntroller API (openshift#79627)" (openshift#80349) This reverts commit b7407a3. Co-authored-by: Chai Bot <chai-bot@redhat.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#79627) Replace ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. Each nXminor entry in the releases: section spawned a concurrent import pod, causing race conditions that failed ~40-45% of e2e-aws runs before tests start. The release resolution logic lives in a single dedicated step ref (hypershift-resolve-nodepool-releases) that queries the release controller API and writes resolved pullspecs to SHARED_DIR. The 4 run-e2e scripts source this file instead of duplicating the logic. Versions are passed as NODEPOOL_NX_VERSION env vars from the job config. This follows the same pattern used by telco5g and hypershift-mce multi-version-test teams. Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ntroller API (openshift#79627)" (openshift#80349) This reverts commit b7407a3. Co-authored-by: Chai Bot <chai-bot@redhat.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#79627) Replace ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. Each nXminor entry in the releases: section spawned a concurrent import pod, causing race conditions that failed ~40-45% of e2e-aws runs before tests start. The release resolution logic lives in a single dedicated step ref (hypershift-resolve-nodepool-releases) that queries the release controller API and writes resolved pullspecs to SHARED_DIR. The 4 run-e2e scripts source this file instead of duplicating the logic. Versions are passed as NODEPOOL_NX_VERSION env vars from the job config. This follows the same pattern used by telco5g and hypershift-mce multi-version-test teams. Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… API (openshift#79627) Replace ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. Each nXminor entry in the releases: section spawned a concurrent import pod, causing race conditions that failed ~40-45% of e2e-aws runs before tests start. The release resolution logic lives in a single dedicated step ref (hypershift-resolve-nodepool-releases) that queries the release controller API and writes resolved pullspecs to SHARED_DIR. The 4 run-e2e scripts source this file instead of duplicating the logic. Versions are passed as NODEPOOL_NX_VERSION env vars from the job config. This follows the same pattern used by telco5g and hypershift-mce multi-version-test teams. Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ntroller API (openshift#79627)" (openshift#80349) This reverts commit b7407a3. Co-authored-by: Chai Bot <chai-bot@redhat.com>
… API (openshift#80360) Replace static ci-operator release imports (n1minor through n4minor) with runtime resolution via the release controller REST API. This eliminates concurrent import pods that caused race conditions in ci-tools, failing ~40-45% of e2e runs before tests executed. Changes: - Remove n1minor..n4minor and unused latest-418/419/420 release definitions - Replace OCP_IMAGE_NX dependencies with NODEPOOL_NX_VERSION env vars - Add hypershift-resolve-nodepool-releases step to all 8 e2e workflows - Add nounset-safe variable expansion (${OCP_IMAGE_NX:-}) in run-e2e scripts to prevent crashes when variables are unset - Improve resolve script with retry logic, HTTP status checks, and hard failure on resolution errors Fixes the permafail introduced by openshift#79627 where unguarded variable expansion under set -o nounset crashed run-e2e scripts before tests could execute. Jira: CNTRLPLANE-3509 Signed-off-by: Juan Manuel Parrilla Madrid <jparrill@redhat.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
n1minorthroughn4minor) with runtime resolution via the release controller REST APInXminorentry inreleases:spawned a concurrent import pod, causing race conditions that failed ~40-45% ofe2e-awsruns before tests even startresolve_release_image()function to the 4 run-e2e scripts that querieshttps://amd64.ocp.releases.ci.openshift.org/api/v1/releasestream/{version}.0-0.ci/latestNODEPOOL_NX_VERSIONenv vars from the job configmainbranch config only; release branches will follow in a separate PRChanges
openshift-hypershift-main.yamlnXminorrelease definitions (n1 through n4)OCP_IMAGE_NXdependency overrides from all jobsNODEPOOL_N1_VERSIONthroughNODEPOOL_N4_VERSIONenv vars to each job4 run-e2e ref YAMLs
NODEPOOL_NX_VERSION4 run-e2e command scripts
resolve_release_image()function that queries the release controller APITest plan
/pj-rehearseto validate affected jobsresolve_release_image()returns valid pullspecs in CI environmentjqis available in thehypershift-testsimageSummary by CodeRabbit
This PR updates OpenShift CI configuration for HyperShift end-to-end tests to resolve N-minor OpenShift release images at runtime via the release controller API instead of declaring them as static ci-operator release imports (n2/n3/n4).
What changed (practical impact)
Why this was done
Scope and notes