Prep oadp-1.4/1.5 with bundle promotion for future cross-repo e2e - #83286
Prep oadp-1.4/1.5 with bundle promotion for future cross-repo e2e#83286kaovilai wants to merge 1 commit into
Conversation
Same skip_building_index pattern as openshift#83282 (oadp-dev/oadp-1.6): builds and promotes oadp-operator's bundle image directly, no index. These branches had no operator: stanza at all before this - the bundle wasn't built here, let alone promoted. Prep work for openshift/oadp-operator#1832's Group A1 (velero + velero-plugin-for-* + openshift-velero-plugin), which spans 1.3->1.6/dev and will need a promoted bundle + e2e-test binary on each branch to install oadp-operator cross-repo the same way kubevirt-datamover-controller/plugin now do. Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
WalkthroughThe OADP 1.4 and 1.5 CI configurations now build operator bundles and test images. Index-image builds are disabled. Promotion separately publishes the bundle and test images with version-specific tags. ChangesOADP CI configuration
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested labels: 🚥 Pre-merge checks | ✅ 15✅ Passed checks (15 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: kaovilai The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
[REHEARSALNOTIFIER]
A total of 35 jobs have been affected by this change. The above listing is non-exhaustive and limited to 25 jobs. A full list of affected jobs can be found here Interacting with pj-rehearseComment: Once you are satisfied with the results of the rehearsals, comment: |
|
/pj-rehearse pull-ci-openshift-oadp-operator-oadp-1.4-ci-bundle-oadp-operator-bundle pull-ci-openshift-oadp-operator-oadp-1.4-images pull-ci-openshift-oadp-operator-oadp-1.5-ci-bundle-oadp-operator-bundle pull-ci-openshift-oadp-operator-oadp-1.5-images Note Responses generated with Claude |
|
@kaovilai: 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.
Actionable comments posted: 1
🤖 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/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yaml`:
- Around line 16-18: Add the version-specific operator.substitutions mappings to
the bundle definitions in
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yaml
at lines 16-18 and 25-29, and
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5.yaml
at lines 16-18 and 25-29, copying them from the corresponding __4.18 and __4.19
configurations; then run make update so the bundles use the CI-built
oadp-operator-1.4 and oadp-operator-1.5 images.
🪄 Autofix
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: ef7c08db-0ca8-452f-bf44-a925f52bccd8
⛔ Files ignored due to path filters (6)
ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4-periodics.yamlis excluded by!ci-operator/jobs/**ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4-postsubmits.yamlis excluded by!ci-operator/jobs/**ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4-presubmits.yamlis excluded by!ci-operator/jobs/**ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5-periodics.yamlis excluded by!ci-operator/jobs/**ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5-postsubmits.yamlis excluded by!ci-operator/jobs/**ci-operator/jobs/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5-presubmits.yamlis excluded by!ci-operator/jobs/**
📒 Files selected for processing (2)
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yamlci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5.yaml
| - as: oadp-operator-bundle | ||
| dockerfile_path: build/Dockerfile.bundle | ||
| skip_building_index: true |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
tmpdir="$(mktemp -d)"
trap 'rm -rf "$tmpdir"' EXIT
for version in 1.4 1.5; do
config="ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-${version}.yaml"
manifest="$tmpdir/oadp-${version}-csv.yaml"
curl -fsSL \
"https://raw.githubusercontent.com/openshift/oadp-operator/oadp-${version}/bundle/manifests/oadp-operator.clusterserviceversion.yaml" \
> "$manifest"
echo "=== OADP ${version} manifest pullspecs ==="
rg -n 'containerImage:|relatedImages:|value: quay.io/konveyor/' "$manifest"
echo "=== OADP ${version} configured substitutions and promotion ==="
rg -n -C3 'substitutions:|pullspec:|with:|promotion:|additional_images:|tag:' "$config" || true
doneRepository: openshift/release
Length of output: 3365
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo '=== target configurations ==='
for f in \
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yaml \
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5.yaml
do
echo "--- $f"
cat -n "$f"
done
echo '=== nearby OADP configurations with substitutions or bundle images ==='
rg -n -C4 'substitutions:|skip_building_index:|Dockerfile.bundle|additional_images:|oadp-operator-bundle' \
ci-operator/config/openshift/oadp-operator ci-operator/config/openshift 2>/dev/null | head -n 500
echo '=== ci-tools documentation and schema references ==='
rg -n -C4 'substitutions|skip_building_index|additional_images|bundle' \
ci-operator pkg 2>/dev/null | head -n 500 || true
echo '=== repository files related to OADP bundle build ==='
git ls-files | rg '(^|/)(Dockerfile\.bundle|bundle/|oadp-operator)' | head -n 300Repository: openshift/release
Length of output: 50374
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
for f in \
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4__4.18.yaml \
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5__4.19.yaml \
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.6.yaml
do
echo "=== $f: build, images, bundle, substitutions, promotion ==="
awk '
/^images:/ || /^operator:/ || /^promotion:/ {show=1}
show {print NR ":" $0}
/^resources:/ {show=0}
' "$f" | sed -n '1,150p'
done
echo '=== exact pullspec mappings in OADP release configurations ==='
rg -n -B1 -A1 'pullspec:|with:' ci-operator/config/openshift/oadp-operator \
| rg 'oadp-(1\.4|1\.5|1\.6)|pullspec:|with:' | head -n 240Repository: openshift/release
Length of output: 36335
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
import re
root = Path("ci-operator/config/openshift/oadp-operator")
cases = [
(
"1.4",
root / "openshift-oadp-operator-oadp-1.4.yaml",
root / "openshift-oadp-operator-oadp-1.4__4.18.yaml",
),
(
"1.5",
root / "openshift-oadp-operator-oadp-1.5.yaml",
root / "openshift-oadp-operator-oadp-1.5__4.19.yaml",
),
]
for version, target_path, reference_path in cases:
target = target_path.read_text()
reference = reference_path.read_text()
target_has_substitutions = bool(
re.search(r"(?m)^ substitutions:\s*$", target)
)
target_image = re.search(
rf"(?m)^\s+to: oadp-operator-{re.escape(version)}\s*$", target
)
required_operator_mapping = (
f" - pullspec: quay.io/konveyor/oadp-operator:oadp-{version}\n"
f" with: oadp-operator-{version}"
)
reference_has_mapping = required_operator_mapping in reference
promoted_additional = re.search(
rf"(?ms)^ - additional_images:\n(.*?)(?=^ - |^resources:)",
target,
)
additional_block = promoted_additional.group(1) if promoted_additional else ""
bundle_promoted = "oadp-operator-bundle: oadp-operator-bundle" in additional_block
operator_version_promoted = (
f"oadp-operator: oadp-operator-{version}" in additional_block
)
print(f"=== OADP {version} ===")
print(f"target image output present: {bool(target_image)}")
print(f"target substitutions present: {target_has_substitutions}")
print(f"reference operator substitution present: {reference_has_mapping}")
print(f"bundle promoted to oadp-{version}: {bundle_promoted}")
print(
"versioned operator image promoted in additional_images: "
f"{operator_version_promoted}"
)
PYRepository: openshift/release
Length of output: 613
Add the missing bundle substitutions.
Without operator.substitutions, the 1.4 and 1.5 bundles retain quay.io/konveyor/oadp-operator:oadp-1.4 and :oadp-1.5 instead of using the CI-built oadp-operator-1.4 and oadp-operator-1.5 images. Copy the corresponding version-specific substitution mappings from the __4.18 and __4.19 configurations, then run make update.
📍 Affects 2 files
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yaml#L16-L18(this comment)ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yaml#L25-L29ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5.yaml#L16-L18ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5.yaml#L25-L29
🤖 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/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yaml`
around lines 16 - 18, Add the version-specific operator.substitutions mappings
to the bundle definitions in
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.4.yaml
at lines 16-18 and 25-29, and
ci-operator/config/openshift/oadp-operator/openshift-oadp-operator-oadp-1.5.yaml
at lines 16-18 and 25-29, copying them from the corresponding __4.18 and __4.19
configurations; then run make update so the bundles use the CI-built
oadp-operator-1.4 and oadp-operator-1.5 images.
|
Broadening the rehearse to also cover the existing /pj-rehearse max Note Responses generated with Claude |
|
@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
/pj-rehearse pull-ci-openshift-oadp-operator-oadp-1.5-4.20-e2e-test-aws pull-ci-openshift-oadp-operator-oadp-1.5-4.20-e2e-test-kubevirt-aws Note Responses generated with Claude |
|
@kaovilai: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
The cluster-operator-status-to-JSON fallback path downloads a jq binary to /tmp and chmods it exec, then invokes it directly. Some CI nodes mount /tmp noexec, so the container fails with exit 126 "/tmp/jq: Permission denied" even though the script otherwise ran fine. Confirmed node-dependent rather than chronic: a rehearse run on openshift#83286 (pull-ci-openshift-oadp-operator-oadp-1.5-4.20-e2e-test-aws) hit this, while sibling jobs on the same commit (4.20-e2e-test-cli-aws, 4.20-e2e-test-hcp-aws) ran the identical script without issue. ARTIFACT_DIR is already used elsewhere in this script and is not subject to the same noexec mount, so download+chmod+exec jq there instead. Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
|
@kaovilai: all tests passed! Full PR test history. Your PR dashboard. DetailsInstructions 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 kubernetes-sigs/prow repository. I understand the commands that are listed here. |
The cluster-operator-status-to-JSON fallback path downloads a jq binary to /tmp and chmods it exec, then invokes it directly. Some CI nodes mount /tmp noexec, so the container fails with exit 126 "/tmp/jq: Permission denied" even though the script otherwise ran fine. Confirmed node-dependent rather than chronic: a rehearse run on openshift#83286 (pull-ci-openshift-oadp-operator-oadp-1.5-4.20-e2e-test-aws) hit this, while sibling jobs on the same commit (4.20-e2e-test-cli-aws, 4.20-e2e-test-hcp-aws) ran the identical script without issue. ARTIFACT_DIR is already used elsewhere in this script and is not subject to the same noexec mount, so download+chmod+exec jq there instead. Signed-off-by: Tiger Kaovilai <tkaovila@redhat.com>
Summary
Adds the same bundle-promotion setup as #83282 (oadp-dev/oadp-1.6) to
oadp-1.4andoadp-1.5: build and promote oadp-operator's OLM bundle image directly (operator.bundles[].skip_building_index: true), no index/catalog. Prep work, not a fix for anything currently broken — these two branches had nooperator:stanza at all before this; the bundle wasn't being built there, let alone promoted.Why
openshift/oadp-operator#1832's Group A1 (velero, velero-plugin-for-{aws,gcp,azure,legacy-aws}, openshift-velero-plugin, velero-plugin-for-csi) spans branches
1.3→1.6, devper that issue's backlog comment. Whichever of those repos gets cross-repo e2e coverage built will need to install oadp-operator via OLM the same waymigtools/kubevirt-datamover-controller/kubevirt-datamover-pluginnow do (#83049/#83282) — from a promoted bundle + the promotedoadp-operator-e2e-testsbinary — on whatever branch it targets. Doing this now avoids repeating, per-branch, theBundleUnpackFaileddiagnosis that #83049 already went through (see the comment linked below for the full writeup) the first time someone tries it on 1.4/1.5.Flagged the same risk directly on #1832: openshift/oadp-operator#1832 (comment)
oadp-1.3intentionally not included here — wasn't asked for and can follow the same pattern later if needed.Changes
Per branch (
openshift-oadp-operator-oadp-1.4.yaml,-oadp-1.5.yaml):images.itemsentry:build/ci-Dockerfile→test-oadp-operator(oadp-operator's own e2e test-suite binary — confirmed this Dockerfile exists on both branches before adding).operator.bundles:as: oadp-operator-bundle,dockerfile_path: build/Dockerfile.bundle,skip_building_index: true(confirmed this Dockerfile exists on both branches too).promotion.tosplit into two entries, same shape as oadp-dev/oadp-1.6: the existingoadp-operatorimage entry getsexcluded_images: [test-oadp-operator], plus a new entry promotingoadp-operator-bundleandoadp-operator-e2e-tests(test-oadp-operator), taggedoadp-1.4/oadp-1.5respectively so they don't collide with each other or withoadp-dev/oadp-1.6in the sharedkonveyornamespace.Testing
make ci-operator-config/make jobspass cleanly for both branches. Generated job diff is pure addition (newci-bundle-oadp-operator-bundlepresubmit, postsubmit--targetlist gainsoadp-operator-bundle/test-oadp-operator) — no existing job renamed or removed, since neither branch had any of this before.Test plan
build/Dockerfile.bundleandbuild/ci-Dockerfileexist on bothoadp-1.4andoadp-1.5before referencing them.make ci-operator-config/make jobspass for both branches.oadp-operator-bundle/oadp-operator-e2e-testsfor real (same bootstrapping caveat as Promote oadp-operator bundle directly instead of a broken index #83282 — promotion only happens on a real postsubmit, not on merge alone).Note
Responses generated with Claude
Summary by CodeRabbit
This PR updates OpenShift CI configuration for the
oadp-operatorrepository.oadp-operatorbundle builds foroadp-1.4andoadp-1.5.