Skip to content

ci: auto-derive CI_IMAGE_TAG in cidemo-init.sh#1933

Merged
NirWolfer merged 1 commit into
ai-dynamo:mainfrom
NirWolfer:ci-auto-ci-image-tag
Jul 15, 2026
Merged

ci: auto-derive CI_IMAGE_TAG in cidemo-init.sh#1933
NirWolfer merged 1 commit into
ai-dynamo:mainfrom
NirWolfer:ci-auto-ci-image-tag

Conversation

@NirWolfer

@NirWolfer NirWolfer commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

What?

Replace the manual CI_IMAGE_TAG bump requirement with automatic workspace-level derivation. When CI source files (Dockerfiles, build.sh, common.sh) change, the tag now updates automatically with no developer action required.

How it works:

  • cidemo-init.sh derives CI_IMAGE_TAG as the short git hash of the most recent commit touching any CI source file, using: git log -1 --format=%h -- "${CI_FILES[@]}"
  • It then patches all five matrix YAML files in the Jenkins workspace via sed before the matrix library reads them. No commit or push is made.
  • The YAML files now carry CI_IMAGE_TAG: "CI_MANAGED" as a placeholder that signals the value is managed automatically and must not be hand-edited.

Caching is preserved: identical CI file history produces the same tag across PRs, so Artifactory base images are reused when nothing changed. A PR that modifies a Dockerfile or build script gets a new tag and triggers a rebuild automatically.

Removes the old validation gate that failed CI when developers forgot to bump the tag manually.

Why?

HPCINFRA-4578

How?

It is optional, but for complex PRs, please provide information about the design,
architecture, approach, etc.

Summary by CodeRabbit

  • New Features
    • CI Docker image tags are now managed automatically: Jenkins matrix configs use a CI_MANAGED placeholder that’s replaced at the start of each CI run with a derived tag.
    • Improves CI efficiency by keeping the derived tag stable when CI inputs haven’t changed.
  • Bug Fixes
    • Ensures cached Docker image rebuilds correctly when CI-related scripts/configs are updated, without requiring manual tag bumps.
  • Documentation
    • Added/updated a “CI_IMAGE_TAG management” section explaining how the derived tag is computed and how the placeholder is applied across the Jenkins matrices.

@NirWolfer NirWolfer requested a review from a team as a code owner July 13, 2026 16:12
@github-actions

Copy link
Copy Markdown

👋 Hi NirWolfer! Thank you for contributing to ai-dynamo/nixl.

Your PR reviewers will review your contribution then trigger the CI to test your changes.

🚀

@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

cidemo-init.sh now derives CI image tags from CI-source history and patches six Jenkins matrix YAMLs containing CI_MANAGED. Documentation describes the workflow, while each matrix uses the managed placeholder instead of a hardcoded tag.

Changes

CI image tag management

Layer / File(s) Summary
Matrix tag placeholders
.ci/jenkins/lib/*-matrix.yaml
Six Jenkins matrix configurations replace fixed CI_IMAGE_TAG values with CI_MANAGED; sanitizer documentation identifies the placeholder as automatically managed.
Tag derivation and documentation
.ci/cidemo-init.sh, .ci/docs/ci-overview.md
cidemo-init.sh derives a tag from the latest commit affecting CI files, falls back to a content hash, patches all placeholders, and documents the resulting workflow.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Jenkins
  participant cidemo-init.sh
  participant Git
  participant MatrixYAML
  Jenkins->>cidemo-init.sh: start CI initialization
  cidemo-init.sh->>Git: find latest commit affecting CI files
  Git-->>cidemo-init.sh: return commit hash or content-hash fallback
  cidemo-init.sh->>MatrixYAML: replace CI_MANAGED with derived tag
  MatrixYAML-->>Jenkins: provide patched image configuration
Loading

Possibly related PRs

Suggested reviewers: isdrk, ovidiusm, ntsemah

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and accurately summarizes the main change: auto-deriving CI_IMAGE_TAG in cidemo-init.sh.
Description check ✅ Passed The description covers the required What and Why sections and gives enough implementation detail, with How left optional.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/cidemo-init.sh:
- Around line 37-40: Update the YAML patching loop in .ci/cidemo-init.sh to
verify that each sed replacement actually matched the exact CI_IMAGE_TAG
placeholder. Track whether the placeholder exists before or after replacement,
and exit nonzero with a clear error identifying the affected yaml file when it
is missing; retain the existing patched message only after successful
replacement.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 81c79f78-1a31-4656-b8ca-1daddb94e30f

📥 Commits

Reviewing files that changed from the base of the PR and between d996eab and b387c6e.

📒 Files selected for processing (7)
  • .ci/cidemo-init.sh
  • .ci/docs/ci-overview.md
  • .ci/jenkins/lib/build-matrix.yaml
  • .ci/jenkins/lib/test-dl-ep-matrix.yaml
  • .ci/jenkins/lib/test-dl-matrix.yaml
  • .ci/jenkins/lib/test-matrix.yaml
  • .ci/jenkins/lib/test-sanitizer-matrix.yaml

Comment thread .ci/cidemo-init.sh
@NirWolfer NirWolfer force-pushed the ci-auto-ci-image-tag branch from b387c6e to 0d3623a Compare July 13, 2026 16:24
@NirWolfer

Copy link
Copy Markdown
Contributor Author

/build

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/cidemo-init.sh:
- Around line 25-34: Update the fallback in the CI tag derivation to fail closed
when any file in CI_FILES cannot be read: validate the complete input before
calculating NEW_TAG, and exit nonzero with a clear error instead of hashing
partial or empty content. Preserve the existing sha256sum truncation behavior
when all files are readable.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: ee924a77-aa47-43d6-96af-1bdc19487280

📥 Commits

Reviewing files that changed from the base of the PR and between b387c6e and 0d3623a.

📒 Files selected for processing (7)
  • .ci/cidemo-init.sh
  • .ci/docs/ci-overview.md
  • .ci/jenkins/lib/build-matrix.yaml
  • .ci/jenkins/lib/test-dl-ep-matrix.yaml
  • .ci/jenkins/lib/test-dl-matrix.yaml
  • .ci/jenkins/lib/test-matrix.yaml
  • .ci/jenkins/lib/test-sanitizer-matrix.yaml

Comment thread .ci/cidemo-init.sh

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/cidemo-init.sh:
- Around line 26-27: Update the NEW_TAG derivation in the CI initialization
script to include the patched matrix YAML files alongside the existing
Dockerfiles and common scripts when determining the latest commit hash. Ensure
changes to YAML-defined BASE_IMAGE or build_args produce a new CI_IMAGE_TAG
rather than reusing an older image tag.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 80043307-8543-4cc9-bdd1-ac85c14e6cc7

📥 Commits

Reviewing files that changed from the base of the PR and between 0d3623a and 49f14b4.

📒 Files selected for processing (7)
  • .ci/cidemo-init.sh
  • .ci/docs/ci-overview.md
  • .ci/jenkins/lib/build-matrix.yaml
  • .ci/jenkins/lib/test-dl-ep-matrix.yaml
  • .ci/jenkins/lib/test-dl-matrix.yaml
  • .ci/jenkins/lib/test-matrix.yaml
  • .ci/jenkins/lib/test-sanitizer-matrix.yaml

Comment thread .ci/cidemo-init.sh
@NirWolfer

Copy link
Copy Markdown
Contributor Author

/build

@svc-nixl

Copy link
Copy Markdown
Collaborator

🤖 CI Triage Agentnixl-ci-gpu · commit a62714ce

TL;DR: The "Run Nixlbench tests" stage was killed (exit 143) after a ~48-minute hang, not a slowness — the UCCL WRITE VRAM→DRAM benchmark printed its results and "Engine destroyed" at 17:42:49 but one nixlbench process never exited, so parallel (and the test loop) hung until Jenkins aborted it. Root cause is a hang in the UCCL backend engine shutdown, not the PR under test.

Full analysis

Summary: Jenkins stage Run Nixlbench tests (node 343) aborted with exit code 143 after hanging for ~48 minutes during the UCCL WRITE VRAM→DRAM case.

Root cause: Wall-clock kill is a symptom. Log timestamps show continuous activity until 17:42:49.585Z (Engine destroyed + [WARN ... Error/HUP on connection: 1.1.101.2:45653 for the UCCL WRITE / initiator=VRAM / target=DRAM test), then total silence until 18:30:28.253Z (Sending interrupt signal to process) — a ~48-minute gap that is essentially the whole remaining runtime. The two parallel nixlbench UCCL processes reached teardown (Destroying Engine... / Stop background accept...), but one process never returned from engine destruction (only one clean "Engine destroyed" pairing with the other's HUP warning), so the parallel --line-buffer --halt now,fail=1 invocation in run_nixlbench_two_workers_asio never completed and the shell for loop stalled. This is a hang in the UCCL backend's connection/engine shutdown path (background accept thread not joining / socket HUP not cleanly closing the engine), exposed here but preceded by repeated Error/HUP on connection warnings on every UCCL run.

Implicated commit: Not the PR under test. PR #1933 ("ci: auto-derive CI_IMAGE_TAG in cidemo-init.sh") is CI-config-only and unrelated. The hanging component's most recent functional changes are in the UCCL backend: [REDACTED:Hex High Entropy String] "Enable local xfer for UCCL backend (#1428)" and [REDACTED:Hex High Entropy String] "UCCL: Simplify and Optimize for batch transfers (#1271)" (Pravein Govindan Kannan) — most likely region for the shutdown/teardown hang.

File: .gitlab/test_nixlbench.sh:84 (the parallel ... UCCL invocation that hung); underlying defect in the UCCL plugin engine-destroy path under src/plugins/uccl (the Destroying Engine / Stop background accept / accept-thread-join logic).

Suggested fix:

  1. Immediate CI robustness: wrap the nixlbench invocation in a hard timeout so a hung process fails fast instead of consuming the whole stage — e.g. timeout --kill-after=30s 300 parallel --line-buffer --halt now,fail=1 ::: ... in run_nixlbench_two_workers_asio (and the etcd variant). This turns a 48-minute silent hang into a prompt, diagnosable failure.
  2. Real fix: investigate the UCCL engine shutdown in src/plugins/uccl — ensure the background accept thread is joined and the engine destructor returns even when the peer connection closes with an Error/HUP (as logged on line epoll_client.h:207). The teardown should not block waiting to accept a connection that will never arrive.
  3. Re-run the build to confirm this is a flaky UCCL teardown hang rather than a deterministic regression from ci: auto-derive CI_IMAGE_TAG in cidemo-init.sh #1933 (which does not touch this code).

Related: UCCL backend PRs #1428, #1271, #1151, #895; test-harness sleep/timeout history #1560, #1081. No existing issue specifically tracking the UCCL teardown hang was found — consider filing one.

🛡️ This comment had 1 potential secret(s) redacted (Hex High Entropy String). See request_id cbaaf891-14b9-4c65-88b1-c96a087db4b1 in the triage console for the audit trail.

@svc-nixl

Copy link
Copy Markdown
Collaborator

🤖 CI Triage Agentnixl-ci-dl-gpu-ep · commit a62714ce

TL;DR: The "Allocate DL EP Environment" stage failed because a Slurm salloc for the gb200nvl72_cx8 partition sat queued for the full 1-hour --immediate=3600 window and then errored with "Unable to allocate resources: Connection timed out" — a cluster capacity/infra issue, not a code bug.

Full analysis

Summary: Stage 226 (Allocate DL EP Environment) failed when the SSH-driven Slurm salloc on dlcluster.nvidia.com could not obtain a GB200 node within the immediate timeout; the parallel v1.22.x branch (stage 151) then reported FAILURE for the same reason (its UCX build/image steps all succeeded).

Root cause: GB200 (gb200nvl72_cx8) partition had no free resources. The allocation was queued at 17:41:45 (salloc: Pending job allocation 1543509 ... queued and waiting for resources) and at 18:41:54 — after the --immediate=3600 (1 hour) window — Slurm returned Unable to allocate resources: Connection timed out. This is an environment/capacity failure, not a defect introduced by commit a62714c / PR #1933. The build, install, and container push (stages 176/194) all completed successfully beforehand.

Implicated commit: unknown (not code-related; infrastructure/cluster capacity)

File: N/A — failure occurs in the CI Slurm allocation step (slurm.allocationsalloc -N 1 -p gb200nvl72_cx8 --immediate=3600 --time=01:30:00 --no-shell --account=blackwell)

Suggested fix: Re-run the build; this is a transient cluster-capacity failure. If it recurs, the CI infra owners should (a) check GB200 partition availability/quota for the blackwell account, and (b) consider making the allocation step retry or fail with a clearer "no capacity" signal rather than consuming the full 1-hour immediate window. No source change is warranted for this PR.

Related: none

@ovidiusm

Copy link
Copy Markdown
Contributor

Amazing, thanks for implementing this!

@NirWolfer

Copy link
Copy Markdown
Contributor Author

/build

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 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/docs/ci-overview.md:
- Line 169: Add blank lines after the `nixl-ci-build-wheel` and corresponding
heading near the second referenced location, ensuring each heading is separated
from following content to satisfy MD022.
- Around line 30-33: Reconcile the Jenkins job counts in the Jenkins jobs
section and the note around proj-jjb.yaml: change the total to 11, identify 6 PR
CI jobs and 5 standalone jobs, and add cleanup-artifacts to the standalone list.
Ensure both sections use the same totals and job names.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 63901e93-9138-4942-a132-aee067988c54

📥 Commits

Reviewing files that changed from the base of the PR and between 49f14b4 and db4d199.

📒 Files selected for processing (8)
  • .ci/cidemo-init.sh
  • .ci/docs/ci-overview.md
  • .ci/jenkins/lib/build-matrix.yaml
  • .ci/jenkins/lib/build-wheel-matrix.yaml
  • .ci/jenkins/lib/test-dl-ep-matrix.yaml
  • .ci/jenkins/lib/test-dl-matrix.yaml
  • .ci/jenkins/lib/test-matrix.yaml
  • .ci/jenkins/lib/test-sanitizer-matrix.yaml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Inline review comments failed to post. This is likely due to GitHub's internal server error or limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.

Actionable comments posted: 2

🤖 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/docs/ci-overview.md:
- Line 169: Add blank lines after the `nixl-ci-build-wheel` and corresponding
heading near the second referenced location, ensuring each heading is separated
from following content to satisfy MD022.
- Around line 30-33: Reconcile the Jenkins job counts in the Jenkins jobs
section and the note around proj-jjb.yaml: change the total to 11, identify 6 PR
CI jobs and 5 standalone jobs, and add cleanup-artifacts to the standalone list.
Ensure both sections use the same totals and job names.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 63901e93-9138-4942-a132-aee067988c54

📥 Commits

Reviewing files that changed from the base of the PR and between 49f14b4 and db4d199.

📒 Files selected for processing (8)
  • .ci/cidemo-init.sh
  • .ci/docs/ci-overview.md
  • .ci/jenkins/lib/build-matrix.yaml
  • .ci/jenkins/lib/build-wheel-matrix.yaml
  • .ci/jenkins/lib/test-dl-ep-matrix.yaml
  • .ci/jenkins/lib/test-dl-matrix.yaml
  • .ci/jenkins/lib/test-matrix.yaml
  • .ci/jenkins/lib/test-sanitizer-matrix.yaml
🛑 Comments failed to post (2)
.ci/docs/ci-overview.md (2)

30-33: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=".ci/docs/ci-overview.md"

echo "== line count =="
wc -l "$file"

echo
echo "== relevant excerpts =="
sed -n '1,240p' "$file" | nl -ba | sed -n '1,240p'

echo
echo "== job-count mentions =="
grep -nE '11 Jenkins jobs|10 jobs|cleanup-artifacts|nixl-ci-dispatcher|build-container|build-wheel-nightly|build-llm-container|test-llm-container' "$file" || true

echo
echo "== markdown heading spacing candidates =="
python3 - <<'PY'
from pathlib import Path
p = Path(".ci/docs/ci-overview.md")
lines = p.read_text().splitlines()
for i, line in enumerate(lines[:-1]):
    if line.startswith('#') and lines[i+1].strip() and not lines[i+1].startswith(' '):
        # heading followed by non-blank line
        print(f"heading@{i+1}: {line!r} -> next line: {lines[i+2]!r}" if i+2 < len(lines) else f"heading@{i+1}: {line!r}")
PY

Repository: ai-dynamo/nixl

Length of output: 263


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=".ci/docs/ci-overview.md"

echo "== line count =="
wc -l "$file"

echo
echo "== relevant excerpts =="
nl -ba "$file" | sed -n '1,240p'

echo
echo "== job-count mentions =="
grep -nE '11 Jenkins jobs|10 jobs|cleanup-artifacts|nixl-ci-dispatcher|build-container|build-wheel-nightly|build-llm-container|test-llm-container' "$file" || true

echo
echo "== markdown heading spacing candidates =="
python3 - <<'PY'
from pathlib import Path
p = Path(".ci/docs/ci-overview.md")
lines = p.read_text().splitlines()
for i, line in enumerate(lines[:-1]):
    if line.startswith('#') and lines[i+1].strip() and not lines[i+1].startswith(' '):
        print(f"heading@{i+1}: {line!r} -> next line@{i+2}: {lines[i+1]!r}")
PY

Repository: ai-dynamo/nixl

Length of output: 263


🏁 Script executed:

pwd

Repository: ai-dynamo/nixl

Length of output: 171


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=".ci/docs/ci-overview.md"

echo "== line count =="
wc -l "$file"

echo
echo "== relevant excerpts =="
nl -ba "$file" | sed -n '1,240p'

echo
echo "== job-count mentions =="
grep -nE '11 Jenkins jobs|10 jobs|cleanup-artifacts|nixl-ci-dispatcher|build-container|build-wheel-nightly|build-llm-container|test-llm-container' "$file" || true

Repository: ai-dynamo/nixl

Length of output: 263


🏁 Script executed:

#!/bin/bash
set -euo pipefail

file=".ci/docs/ci-overview.md"

echo "== 25-40 =="
awk 'NR>=25 && NR<=40 { printf "%4d  %s\n", NR, $0 }' "$file"

echo
echo "== 135-160 =="
awk 'NR>=135 && NR<=160 { printf "%4d  %s\n", NR, $0 }' "$file"

echo
echo "== 165-210 =="
awk 'NR>=165 && NR<=210 { printf "%4d  %s\n", NR, $0 }' "$file"

echo
echo "== job-count mentions =="
grep -nE '11 Jenkins jobs|10 jobs|cleanup-artifacts|nixl-ci-dispatcher|build-container|build-wheel-nightly|build-llm-container|test-llm-container' "$file" || true

Repository: ai-dynamo/nixl

Length of output: 11209


Reconcile the Jenkins job counts and standalone list. The Jenkins jobs section still says proj-jjb.yaml defines 10 jobs and lists only four standalone jobs, while the note above says 11 and five. Update both sections to use the same totals and include cleanup-artifacts.

🤖 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/docs/ci-overview.md around lines 30 - 33, Reconcile the Jenkins job
counts in the Jenkins jobs section and the note around proj-jjb.yaml: change the
total to 11, identify 6 PR CI jobs and 5 standalone jobs, and add
cleanup-artifacts to the standalone list. Ensure both sections use the same
totals and job names.

169-169: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Add blank lines below these headings.

Both headings violate MD022 and may fail the documentation lint gate.

Proposed fix
 ### `nixl-ci-build-wheel` (dispatcher-triggered)
+
 - **Config:** `.ci/jenkins/lib/build-wheel-matrix.yaml`
...
 ### `nixl-ci-cleanup-artifacts` (standalone)
+
 - **Trigger:** Daily cron at 6 AM, or manual run with optional `DRY_RUN=true` parameter.

Also applies to: 189-189

🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 169-169: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below

(MD022, blanks-around-headings)

🤖 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/docs/ci-overview.md at line 169, Add blank lines after the
`nixl-ci-build-wheel` and corresponding heading near the second referenced
location, ensuring each heading is separated from following content to satisfy
MD022.

Source: Linters/SAST tools

@NirWolfer

Copy link
Copy Markdown
Contributor Author

/build

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/jenkins/lib/build-matrix.yaml:
- Line 48: Add the existing “auto-derived/patched by cidemo-init.sh; do not
hand-edit” comment immediately above CI_IMAGE_TAG: "CI_MANAGED" in
.ci/jenkins/lib/build-matrix.yaml:48, .ci/jenkins/lib/test-matrix.yaml:57,
.ci/jenkins/lib/test-dl-matrix.yaml:57, and
.ci/jenkins/lib/test-dl-ep-matrix.yaml:63, matching the wording and formatting
used by the already documented matrix files.
🪄 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: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Enterprise

Run ID: 1ce5d7d5-55db-459c-bff7-f3469bf3e5ef

📥 Commits

Reviewing files that changed from the base of the PR and between db4d199 and 54b0d4f.

📒 Files selected for processing (8)
  • .ci/cidemo-init.sh
  • .ci/docs/ci-overview.md
  • .ci/jenkins/lib/build-matrix.yaml
  • .ci/jenkins/lib/build-wheel-matrix.yaml
  • .ci/jenkins/lib/test-dl-ep-matrix.yaml
  • .ci/jenkins/lib/test-dl-matrix.yaml
  • .ci/jenkins/lib/test-matrix.yaml
  • .ci/jenkins/lib/test-sanitizer-matrix.yaml

Comment thread .ci/jenkins/lib/build-matrix.yaml
Replace the manual CI_IMAGE_TAG bump requirement with automatic
workspace-level derivation. When CI source files (Dockerfiles, build.sh,
common.sh) change, the tag now updates automatically with no developer
action required.

How it works:
- cidemo-init.sh derives CI_IMAGE_TAG as the short git hash of the most
  recent commit touching any CI source file, using:
    git log -1 --format=%h -- "${CI_FILES[@]}"
- It then patches all five matrix YAML files in the Jenkins workspace via
  sed before the matrix library reads them. No commit or push is made.
- The YAML files now carry CI_IMAGE_TAG: "CI_MANAGED" as a placeholder
  that signals the value is managed automatically and must not be
  hand-edited.

Caching is preserved: identical CI file history produces the same tag
across PRs, so Artifactory base images are reused when nothing changed.
A PR that modifies a Dockerfile or build script gets a new tag and
triggers a rebuild automatically.

Removes the old validation gate that failed CI when developers forgot to
bump the tag manually.

Signed-off-by: NirWolfer <nwolfer@nvidia.com>
@NirWolfer

Copy link
Copy Markdown
Contributor Author

/build

Comment thread .ci/cidemo-init.sh
@NirWolfer NirWolfer requested a review from Alexey-Rivkin July 15, 2026 11:23
@NirWolfer NirWolfer merged commit b392820 into ai-dynamo:main Jul 15, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants