Add Jetson CI periodic jobs and fix JETSON_HOSTNAME to use direct IP - #83181
Add Jetson CI periodic jobs and fix JETSON_HOSTNAME to use direct IP#83181ggordaniRed wants to merge 1 commit into
Conversation
- Fix JETSON_HOSTNAME from unresolvable FQDN to direct IP 10.26.2.85 - Add jp6-rhel9 and jp7-rhel10 variant configs with 4 weekly periodics each: - e2e-sanity, e2e-hardware, e2e-peripherals, e2e-bootc test suites - Staggered cron schedules to avoid overlap between variants - Add qe-rhel-jetson-e2e and qe-rhel-jetson-bootc-e2e workflows to step-registry - Regenerate periodic and presubmit Prow job YAML Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
WalkthroughAdds JP6 RHEL 9 and JP7 RHEL 10 Jetson CI configurations. Adds standard and bootc E2E workflows. Updates the configured Jetson host to ChangesJetson CI coverage
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant Scheduler
participant JetsonCI
participant E2EWorkflow
participant JetsonDevice
Scheduler->>JetsonCI: Start scheduled test job
JetsonCI->>E2EWorkflow: Invoke suite workflow
E2EWorkflow->>JetsonDevice: Run pytest tests over SSH
Possibly related PRs
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (2 errors)
✅ Passed checks (13 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: ggordaniRed 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 |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
ci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml (1)
1-9: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDefine the required workflow phases.
The standard workflow omits
preandpost. The bootc workflow omitspostafter changing the device boot configuration. Define the required phases, or document why the standard workflow qualifies as smoke-only. Runmake validate-step-registry.
ci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml#L1-L9: addpreandpostphases, or establish the smoke-only exception.ci-operator/step-registry/qe-rhel-jetson/bootc-e2e/qe-rhel-jetson-bootc-e2e-workflow.yaml#L1-L11: add apostphase for required cleanup or recovery.As per coding guidelines, new workflows should define
pre,test, andpostphases. Based on learnings, only smoke-only workflows may omit empty phases.🤖 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/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml` around lines 1 - 9, The standard workflow at ci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml:1-9 must define the required pre, test, and post phases, or explicitly document and qualify it as smoke-only if empty phases are intentionally omitted. The bootc workflow at ci-operator/step-registry/qe-rhel-jetson/bootc-e2e/qe-rhel-jetson-bootc-e2e-workflow.yaml:1-11 must add a post phase covering cleanup or recovery after changing device boot configuration. Run make validate-step-registry.Sources: Coding guidelines, Learnings
🤖 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/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yaml`:
- Around line 13-22: Update both
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yaml:13-22
and
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp7-rhel10.yaml:13-22
so the final test image runs as a non-root user after the root-only package
installation; ensure that user can execute pytest from /workspace and access the
mounted SSH key.
---
Nitpick comments:
In
`@ci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml`:
- Around line 1-9: The standard workflow at
ci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml:1-9
must define the required pre, test, and post phases, or explicitly document and
qualify it as smoke-only if empty phases are intentionally omitted. The bootc
workflow at
ci-operator/step-registry/qe-rhel-jetson/bootc-e2e/qe-rhel-jetson-bootc-e2e-workflow.yaml:1-11
must add a post phase covering cleanup or recovery after changing device boot
configuration. Run make validate-step-registry.
🪄 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: Pro Plus
Run ID: 16884916-e2d4-4b07-bd7b-0b67882515ca
⛔ Files ignored due to path filters (2)
ci-operator/jobs/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main-periodics.yamlis excluded by!ci-operator/jobs/**ci-operator/jobs/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main-presubmits.yamlis excluded by!ci-operator/jobs/**
📒 Files selected for processing (9)
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main.yamlci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yamlci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp7-rhel10.yamlci-operator/step-registry/qe-rhel-jetson/bootc-e2e/OWNERSci-operator/step-registry/qe-rhel-jetson/bootc-e2e/qe-rhel-jetson-bootc-e2e-workflow.metadata.jsonci-operator/step-registry/qe-rhel-jetson/bootc-e2e/qe-rhel-jetson-bootc-e2e-workflow.yamlci-operator/step-registry/qe-rhel-jetson/e2e/OWNERSci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.metadata.jsonci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml
| - dockerfile_literal: | | ||
| FROM ubi-python | ||
| USER 0 | ||
| RUN dnf install -y git && \ | ||
| ln -sf /usr/bin/python3.12 /usr/bin/python && \ | ||
| ln -sf /usr/bin/pip3.12 /usr/bin/pip && \ | ||
| pip install --no-cache-dir ruff pytest PyYAML requests paramiko && \ | ||
| dnf clean all | ||
| COPY . /workspace/ | ||
| WORKDIR /workspace |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== target files =="
for f in \
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yaml \
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp7-rhel10.yaml \
ci-operator/step-registry/qe-rhel-jetson/e2e/qe-rhel-jetson-e2e-workflow.yaml \
ci-operator/step-registry/qe-rhel-jetson/bootc-e2e/qe-rhel-jetson-bootc-e2e-workflow.yaml
do
if [ -f "$f" ]; then
echo "--- $f ($(wc -l < "$f") lines) ---"
sed -n '1,120p' "$f"
else
echo "MISSING $f"
fi
done
echo "== locate generated periodic job metadata if present =="
fd -a 'zz_generated_metadata|_metadata|_*.yaml' ci-operator 2>/dev/null | sed 's#^\./##' | grep -E 'rh-ecosystem-edge-qe-rhel-jetson|zz_generated_metadata' | head -100 || true
echo "== search credential mounting/periodic references =="
rg -n "qp.*ssh|ssh|credential|mount|workflow|dockerfile_literal|periodic|test|workspace" ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson ci-operator/step-registry/qe-rhel-jetson -S || trueRepository: openshift/release
Length of output: 20901
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== pytest command script =="
sed -n '1,120p' ci-operator/step-registry/qe-rhel-jetson/pytest/qe-rhel-jetson-pytest-commands.sh
echo "== generated periodic job sample =="
sed -n '1,220p' ci-operator/jobs/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main-periodics.yaml | rg -n "periodics|qe-rhel-jetson|jetpack|test|command|env|ssh-key|workflow|images|cluster-autoscaler|service-account|periodic" -C 2 || true
echo "== dockerfile USER/WORKDIR directives in target configs =="
python3 - <<'PY'
from pathlib import Path
for path in [
"ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yaml",
"ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp7-rhel10.yaml",
]:
text = Path(path).read_text()
block_start = text.find("dockerfile_literal:")
end = text.find(" from:", block_start)
dockerfile = text[block_start:end] if end != -1 else text[block_start:]
lines = dockerfile.splitlines()
print(f"\n{path}")
for i,row in enumerate(lines,1):
stripped=rows.strip()
if any(stripped.startswith(cmd) for cmd in ["USER","WORKDIR","COPY","RUN","FROM"]):
print(f"{i}: {row}")
last_user=None
for row in lines:
s=row.strip()
if s.startswith("USER"):
last_user=s.split(None,1)[1] if " " in s else None
print("final USER:", last_user if last_user else "(none)")
PYRepository: openshift/release
Length of output: 5042
Run the final test image as a non-root user.
USER 0 is required for dnf install, but the image remains root when WORKDIR /workspace runs. The test reference mounts qe-rhel-jetson-jetson-ssh-key and qe-rhel-jetson-pytest-commands.sh reads the private key from /var/run/secrets/jetson-ssh-key/id_rsa before running pytest from /workspace. Add a later non-root USER after package installation or adjust the test command to write/run from a writable temp directory. Apply the same change to both jp6-rhel9 and jp7-rhel10 images.
📍 Affects 2 files
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yaml#L13-L22(this comment)ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp7-rhel10.yaml#L13-L22
🤖 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/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yaml`
around lines 13 - 22, Update both
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp6-rhel9.yaml:13-22
and
ci-operator/config/rh-ecosystem-edge/qe-rhel-jetson/rh-ecosystem-edge-qe-rhel-jetson-main__jp7-rhel10.yaml:13-22
so the final test image runs as a non-root user after the root-only package
installation; ensure that user can execute pytest from /workspace and access the
mounted SSH key.
Source: Coding guidelines
|
[REHEARSALNOTIFIER]
The following jobs are not rehearsable without the
Prior to this PR being merged, you will need to either run and acknowledge or opt to skip these rehearsals. Interacting with pj-rehearseComment: Once you are satisfied with the results of the rehearsals, comment: |
|
/pj-rehearse network-access-allowed |
|
@onaim500: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
/pj-rehearse pull-ci-rh-ecosystem-edge-qe-rhel-jetson-main-pytest |
|
@ggordaniRed: now processing your pj-rehearse request. Please allow up to 10 minutes for jobs to trigger or cancel. |
|
@ggordaniRed: The following test failed, say
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. |
Summary
JETSON_HOSTNAMEfrom unresolvable FQDN to direct IP10.26.2.85(was causing DNS failures in CI pods on build07)qe-rhel-jetson-e2eandqe-rhel-jetson-bootc-e2estep-registry workflows__jp6-rhel9.yaml) with 4 weekly periodic jobs:__jp7-rhel10.yaml) with 4 weekly periodic jobs (staggered):Combines and replaces #83160 and #83170.
Test plan
make checkconfig)make validate-step-registry)/test pytestpresubmit onrh-ecosystem-edge/qe-rhel-jetsonreaches device at10.26.2.85🤖 Generated with Claude Code
Summary by CodeRabbit
JETSON_HOSTNAMEto the direct IP10.26.2.85.