Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
155 commits
Select commit Hold shift + click to select a range
0fdb0b5
CI: Target IB-capable nodes for tests
Alexey-Rivkin Feb 9, 2026
a55b980
CI: Add Bluefield tests
Alexey-Rivkin Feb 10, 2026
ec3581c
CI: Dynamiclayy set CPU affinity
Alexey-Rivkin Feb 11, 2026
d934d93
CI: Test SRIOV settings
Alexey-Rivkin Feb 23, 2026
6bdf90c
CI: Rename to IB as opposed to RoCE
Alexey-Rivkin Feb 23, 2026
886bdca
CI: address PR comments
Alexey-Rivkin Feb 24, 2026
e1b1d7d
CI: remove ASAN-only override from gtest matrix run
Alexey-Rivkin Feb 25, 2026
c0def8f
CI: document CPU affinity limitation in gtest matrix
Alexey-Rivkin Feb 26, 2026
1e41a32
CI: Add RoCE (CX7) test target alongside IB (CX8)
Alexey-Rivkin Apr 23, 2026
3bc509a
CI: Drop RoCE (CX7) target from this PR
Alexey-Rivkin May 19, 2026
33d6056
CI: Add RoCE (CX7) test target alongside IB (CX8)
Alexey-Rivkin Apr 23, 2026
77f4c12
CI: Use NPROC in remaining Jenkins jobs
Alexey-Rivkin May 19, 2026
bfc4886
CI: Kill leaf jobs when aborting stale PR dispatchers
Alexey-Rivkin May 26, 2026
be0fa8b
CI: Load the dispatcher from the integration PR (temporary)
Alexey-Rivkin Oct 15, 2026
2d470cd
CI: Align stale dispatcher cleanup with NIXL
Alexey-Rivkin Oct 15, 2026
25bb37d
CI: Match Azure build modes and images in the build job
Alexey-Rivkin Oct 15, 2026
f7042d3
CI: Size gtest pods for shared memory and VF limits
Alexey-Rivkin Oct 15, 2026
8b873f8
CI: Add temporary registry probe
Alexey-Rivkin Oct 15, 2026
4ae4056
CI: Add ASan gtest targets and per-fabric TEST_PERF
Alexey-Rivkin Oct 15, 2026
7ae90e6
CI: Run the GPU job through the slurmCI library module
Alexey-Rivkin Oct 15, 2026
21966c5
CI: Add temporary Blossom GPU probe
Alexey-Rivkin Oct 15, 2026
44f471f
CI: Add temporary IL Artifactory push probe
Alexey-Rivkin Oct 15, 2026
1e90995
CI: Skip the CUDA build in the ROCm build row
Alexey-Rivkin Oct 15, 2026
0e1e70e
CI: Drop temporary registry and GPU probes
Alexey-Rivkin Oct 15, 2026
d62ca89
CI: Match Azure rows in the static build job
Alexey-Rivkin Oct 15, 2026
2fbdf67
CI: Shorten CI comments and run gtest without perf checks
Alexey-Rivkin Oct 15, 2026
0b3bcea
CI: Add EFA test matrix for Jenkins
Alexey-Rivkin Oct 15, 2026
b673fad
CI: Add Jenkins Go and JUCX binding tests
Alexey-Rivkin Oct 15, 2026
3713845
CI: Add namespace and wire-compat test matrices
Alexey-Rivkin Oct 15, 2026
054f661
CI: Add temporary CPU mask probe
Alexey-Rivkin Oct 15, 2026
8fde76d
CI: Fit job timeouts to their steps
Alexey-Rivkin Oct 15, 2026
05283a5
CI: Run EFA tests on an RDMA VF node
Alexey-Rivkin Oct 15, 2026
8f15ac4
CI: Let the Jenkins Go format step tolerate no Go changes
Alexey-Rivkin Oct 15, 2026
0184afd
CI: Give the Jenkins binding test pods a RAM-backed /dev/shm
Alexey-Rivkin Oct 15, 2026
10d1278
CI: Add temporary unpinned gtest probe
Alexey-Rivkin Oct 15, 2026
2f5a5aa
CI: Create ibmock uverbs nodes in the EFA job
Alexey-Rivkin Oct 15, 2026
c7eff42
CI: Run namespace tests in the host PID namespace
Alexey-Rivkin Oct 15, 2026
4c5c299
CI: Probe wire-compat shm crash on the Ubuntu 22.04 image
Alexey-Rivkin Oct 15, 2026
4ae8d09
CI: Probe shm hugetlb state in the EFA job
Alexey-Rivkin Oct 15, 2026
01f7298
CI: Request huge pages for the wire-compat probe pods
Alexey-Rivkin Oct 15, 2026
695c5b5
CI: Run the Jenkins JUCX tests on IB CX8 VF pods
Alexey-Rivkin Oct 15, 2026
00aea5f
CI: Run wire-compat on Ubuntu 22.04 with huge pages
Alexey-Rivkin Oct 15, 2026
31732d9
CI: Give the EFA pod a hugepage allowance
Alexey-Rivkin Oct 15, 2026
982265a
CI: Add temporary VF sysfs probe
Alexey-Rivkin Oct 15, 2026
20d2e6b
CI: Add temporary JUCX device diagnostics on RoCE and IB pods
Alexey-Rivkin Oct 15, 2026
eae928f
CI: Probe wire-compat in the host IPC namespace
Alexey-Rivkin Oct 15, 2026
9bf8db3
CI: Drop temporary JUCX device diagnostics
Alexey-Rivkin Oct 15, 2026
9730097
CI: Probe wire-compat on CX8 IB with DDP disabled
Alexey-Rivkin Oct 15, 2026
f8e47e2
CI: Drop the EFA hugetlb probe
Alexey-Rivkin Oct 15, 2026
b689117
CI: Remove temporary VF sysfs probe
Alexey-Rivkin Oct 15, 2026
f947e94
CI: Stop stale dispatcher builds before killing them
Alexey-Rivkin Oct 15, 2026
c3a2d3a
CI: Add rdmacm non-exist-ip probe matrix
Alexey-Rivkin Oct 15, 2026
0d96afa
CI: Add temporary VF context-limit probe
Alexey-Rivkin Oct 15, 2026
fbaaede
CI: Add temporary UD stale private EP probe
Alexey-Rivkin Oct 15, 2026
0f39f2d
CI: Add temporary VF perf-check probe
Alexey-Rivkin Oct 15, 2026
4d857ff
CI: Restore wire-compat matrix after the DDP probe
Alexey-Rivkin Oct 15, 2026
1d4e9c7
CI: Probe DDP caps on the CX8 IB VF
Alexey-Rivkin Oct 15, 2026
73e97e0
CI: Restore wire-compat matrix after the DDP caps probe
Alexey-Rivkin Oct 15, 2026
a0177c8
CI: Drop the rdmacm non-exist-ip probe matrix
Alexey-Rivkin Oct 15, 2026
17d28fc
CI: Trace UD stale private EP probe under CPU load
Alexey-Rivkin Oct 15, 2026
dbd45cd
CI: Add temporary JUCX assert probe
Alexey-Rivkin Oct 15, 2026
4a9aa7a
CI: Drop the VF context-limit and perf probes
Alexey-Rivkin Oct 15, 2026
4b21052
CI: Skip VF-incompatible tests in the Jenkins test matrices
Alexey-Rivkin Oct 15, 2026
4be32d2
CI: Add temporary aarch64 RDMA probe matrix
Alexey-Rivkin Oct 15, 2026
6271f52
CI: Probe the funk GPU container for wire-compat and namespace tests
Alexey-Rivkin Oct 15, 2026
b52b3aa
CI: Add temporary MAD, PGI and BlueField probes
Alexey-Rivkin Oct 15, 2026
d947dc3
CI: Add Jenkins GPU bindings tests on the funk Slurm cluster
Alexey-Rivkin Oct 15, 2026
fb86f81
CI: Add JUCX aarch64 test on the DL cluster
Alexey-Rivkin Oct 15, 2026
9aeb703
CI: Drop the aarch64 RDMA probe matrix
Alexey-Rivkin Oct 15, 2026
2cd11b0
CI: Mount /hpc/local into the funk GPU bindings containers
Alexey-Rivkin Oct 15, 2026
701dd56
CI: Remove temporary UD stale private EP probe
Alexey-Rivkin Oct 15, 2026
d664e5d
CI: Add GPU wire-compat and namespace test matrices on funk
Alexey-Rivkin Oct 15, 2026
df389a8
CI: Probe RDMA devices on BlueField pods
Alexey-Rivkin Oct 15, 2026
1e514f5
CI: Add MAD RTE perftest matrix for Jenkins
Alexey-Rivkin Oct 15, 2026
bdbddd0
CI: Expose the funk GPUs to the bindings containers
Alexey-Rivkin Oct 15, 2026
5a382a7
CI: Try privileged BlueField probe pods
Alexey-Rivkin Oct 15, 2026
6f636e8
CI: Install sudo for the GPU namespace test on funk
Alexey-Rivkin Oct 15, 2026
e38afb1
CI: Allocate a GPU for the funk bindings jobs
Alexey-Rivkin Oct 15, 2026
6da8cf0
CI: Drop the MAD, PGI and BlueField probes
Alexey-Rivkin Oct 15, 2026
df16282
CI: Probe BF3 RoCE networking for the BlueField port
Alexey-Rivkin Oct 15, 2026
cc55934
CI: Note the shared pod in the MAD RTE matrix
Alexey-Rivkin Oct 15, 2026
50be477
CI: Print CUDA fabric IPC state when the GPU namespace test fails
Alexey-Rivkin Oct 15, 2026
386937b
CI: Load Maven and CUDA once in the funk JUCX job
Alexey-Rivkin Oct 15, 2026
ee516f8
CI: Keep printing GPU namespace diagnostics after a failed check
Alexey-Rivkin Oct 15, 2026
619ff8d
CI: Drop /hpc/local from the BF3 probe
Alexey-Rivkin Oct 15, 2026
d525252
CI: Load the Slurm library before the funk bindings rows
Alexey-Rivkin Oct 15, 2026
188be2d
CI: Drop the GPU namespace fabric diagnostics
Alexey-Rivkin Oct 15, 2026
f99c7e9
CI: Add BlueField test matrix for Jenkins
Alexey-Rivkin Oct 15, 2026
28bbff3
CI: Expose the GPU and CUDA to the funk gtest job
Alexey-Rivkin Oct 15, 2026
e439623
CI: Run the BlueField matrix in two batches
Alexey-Rivkin Oct 15, 2026
b714474
CI: Check out the funk gtest job into its own directory
Alexey-Rivkin Oct 15, 2026
f0cd51f
CI: Check CUDA transports in the funk Go perftest
Alexey-Rivkin Oct 15, 2026
1edb458
CI: Probe duplicate UCT ib module loads in JUCX
Alexey-Rivkin Oct 15, 2026
af75bc5
CI: Skip rdmacm-first sockaddr gtests on BlueField
Alexey-Rivkin Oct 15, 2026
71b26ac
CI: Remove temporary JUCX assert probe
Alexey-Rivkin Oct 15, 2026
56bf830
CI: Give the funk GPU gtest job Azure-like time
Alexey-Rivkin Oct 15, 2026
983e78d
CI: Add Jenkins jobs for the ported Azure test stages
Alexey-Rivkin Oct 15, 2026
dce91e7
CI: Probe ASan runtime on BF3
Alexey-Rivkin Oct 15, 2026
827033d
CI: Use gcc 11 for the BlueField ASan row
Alexey-Rivkin Oct 15, 2026
4e2cacf
CI: Drop the BlueField ASan probe
Alexey-Rivkin Oct 15, 2026
0e71e85
CI: Run BlueField tests from the dispatcher
Alexey-Rivkin Oct 16, 2026
e5f6546
CI: Skip tests that fail only on the Jenkins targets
Alexey-Rivkin Oct 16, 2026
d67e38d
CI: Make JUCX tests fail fast on UCX asserts
Alexey-Rivkin Oct 16, 2026
fcfb57b
CI: Skip JUCX testMmapFile on GB200
Alexey-Rivkin Oct 16, 2026
6fb8892
CI: Add the AddressSanitizer GPU row to the funk GPU job
Alexey-Rivkin Oct 16, 2026
7803685
CI: Add CUDA memory hooks and SONAME suffix job on funk
Alexey-Rivkin Oct 16, 2026
135d352
CI: Load the Slurm library before the funk GPU rows
Alexey-Rivkin Oct 16, 2026
8e65e6c
CI: Fix CUDA memory hooks job script permissions and home
Alexey-Rivkin Oct 16, 2026
dddb371
CI: Skip the nv_peer_mem check in CUDA hooks containers
Alexey-Rivkin Oct 16, 2026
5a9e10c
CI: Load the Slurm library before the CUDA job rows
Alexey-Rivkin Oct 16, 2026
b178887
CI: Init /hpc/local modules in the funk GPU gtest step
Alexey-Rivkin Oct 17, 2026
37bc689
CI: Link MPI tests against the in-tree UCX libraries
Alexey-Rivkin Oct 17, 2026
9760af0
CI: Drop the CPU pin and run perf checks on the IB test rows
Alexey-Rivkin Oct 17, 2026
6f9ecf0
CI: Run the CUDA and aarch64 JUCX jobs from the dispatcher
Alexey-Rivkin Oct 17, 2026
ca34a28
CI: Add temporary MPI launch probe on funk
Alexey-Rivkin Oct 18, 2026
47f4dc1
CI: Remove the temporary MPI launch probe
Alexey-Rivkin Oct 18, 2026
d938f96
CI: Drop the Slurm step env before the GPU tests
Alexey-Rivkin Oct 18, 2026
8d2577d
CI: Skip the dc_x recv_align test on BF3
Alexey-Rivkin Oct 18, 2026
6427b41
CI: Add iproute2 to the DL image and skip GB200-only failures
Alexey-Rivkin Oct 18, 2026
0f9b4aa
CI: Move the scctl installer URL to artifactory.nvidia.com
Alexey-Rivkin Oct 18, 2026
ad494e7
CI: Cap the output of each Jenkins test step
Alexey-Rivkin Oct 18, 2026
acfca9d
CI: Skip MPI tests on the Jenkins GPU job
Alexey-Rivkin Oct 18, 2026
75537c9
CI: Drop the shallow clone in the Jenkins jobs
Alexey-Rivkin Oct 18, 2026
98f672a
CI: Install scctl from sw-swx-lab-infra-generic-local
Alexey-Rivkin Oct 18, 2026
99cf14a
CI: Fail the build_helper image build when scctl does not install
Alexey-Rivkin Oct 18, 2026
96dc0a8
CI: Pass RUN_MPI_TESTS into the GPU test container
Alexey-Rivkin Oct 18, 2026
ff15981
CI: Add the UCXX build scripts and RAPIDS wrapper images
Alexey-Rivkin Oct 18, 2026
61148ee
CI: Add UCXX build and test jobs
Alexey-Rivkin Oct 18, 2026
a501b75
CI: Build GPU tests with 16 jobs and fit job timeouts to steps
Alexey-Rivkin Oct 18, 2026
f359e61
CI: Set RAPIDS_DATETIME_STRING for the UCXX builds
Alexey-Rivkin Oct 18, 2026
96874f9
CI: Run the RAPIDS CI scripts as local builds in the UCXX jobs
Alexey-Rivkin Oct 18, 2026
eee9e77
CI: Install gdb without PowerTools in the UCXX wheel image
Alexey-Rivkin Oct 18, 2026
b4326a7
CI: Give the UCXX wrapper images a one-line description label
Alexey-Rivkin Oct 18, 2026
f5f00a2
CI: Keep the UCXX GPU job state in /ws between Slurm steps
Alexey-Rivkin Oct 18, 2026
347aba9
CI: Release each row's Slurm allocation when the row ends
Alexey-Rivkin Oct 18, 2026
bcbfc64
CI: Report leaf job results in the dispatcher the way NIXL does
Alexey-Rivkin Oct 18, 2026
8b5d5a8
CI: Build the ICC/PGI compilers row on Rocky 8.9
Alexey-Rivkin Oct 19, 2026
a2bc53d
CI: Fail the static checks job on analyzer errors outside Azure
Alexey-Rivkin Oct 21, 2026
e348e2f
CI: Let UCX TCP use the bridge netdev on BF3
Alexey-Rivkin Oct 21, 2026
028b9be
CI: Gate Jenkins leaf jobs on a basic compile
Alexey-Rivkin Oct 25, 2026
7cca551
CI: Keep the Jenkinsfile clone between Jenkins builds
Alexey-Rivkin Oct 25, 2026
394f4d2
CI: Run MPI tests in the Jenkins gtest job
Alexey-Rivkin Oct 25, 2026
553933e
CI: Run MPI tests in the Jenkins GPU job
Alexey-Rivkin Oct 25, 2026
d9bcc49
CI: Skip MPI tests on the Jenkins BlueField and DL jobs
Alexey-Rivkin Oct 25, 2026
f89c845
CI: Skip MPI tests on the Jenkins gtest and GPU jobs
Alexey-Rivkin Oct 25, 2026
26bb2f8
CI: Fix review findings in the Jenkins jobs
Alexey-Rivkin Oct 25, 2026
e0c8a2e
CI: Request a GPU share on the DL cluster instead of a node
Alexey-Rivkin Oct 26, 2026
ae6acd4
CI: Pull the DL cluster image in its own step
Alexey-Rivkin Oct 26, 2026
9422002
CI: Run all gtests on the DL cluster
Alexey-Rivkin Oct 26, 2026
ab14560
CI: Run Jenkins Coverity with Coverity 2026 at high aggressiveness
Alexey-Rivkin Oct 26, 2026
b00a06a
CI: Give Jenkins Coverity time for Coverity 2026
Alexey-Rivkin Oct 26, 2026
ca8c937
UCT: Remove duplicate typedefs
Alexey-Rivkin Oct 20, 2026
61d70cc
UCT/ROCM: Drop unused cache forward declaration
Alexey-Rivkin Oct 25, 2026
100ecd1
CI: Load the Jenkins dispatcher from master
Alexey-Rivkin Nov 2, 2026
6210b93
CI: Wait up to 4h for Slurm allocations
Alexey-Rivkin Nov 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ci/dockerfiles/Dockerfile.build_helper
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ RUN apt update && \

# Install scctl for slurm client management (x86_64 only, not available for ARM64)
RUN if [ "$(uname -m)" = "x86_64" ]; then \
curl -s https://urm.nvidia.com/artifactory/sw-swx-lab-infra-generic/scctl/get-app.sh | bash -s -- --output-dir /usr/local/bin || echo "INFO: scctl installation failed, continuing..."; \
curl -fsS https://artifactory.nvidia.com/artifactory/sw-swx-lab-infra-generic-local/scctl/get-app.sh | bash -s -- --output-dir /usr/local/bin; \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The scctl URL fix will not reach the x86_64 jobs: all consumers still pin CI_IMAGE_TAG: "20260223-1" (test_gpu, test_cuda, test_bindings_gpu, test_ucxx_gpu, test_namespace_gpu, test_wirecompat_gpu), and ci-demo only builds a file:-based image when the tag is missing (hence the build_dockers force parameter in the job template). Dockerfile.dl-base got its tag bumped (20260906-1 → 20261018-1) in the same diff — pls bump the build_helper tag too. Dropping the || echo "... continuing" also means a failed download now fails the image build, which makes the stale-image case silent rather than loud.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Dropping || echo does not make this fatal: the pipeline status is bash's, and with -f curl prints nothing on error, so bash reads empty stdin and exits 0 — a 404 still produces an image without scctl. pls fetch to a file first:

Suggested change
curl -fsS https://artifactory.nvidia.com/artifactory/sw-swx-lab-infra-generic-local/scctl/get-app.sh | bash -s -- --output-dir /usr/local/bin; \
curl -fsS https://artifactory.nvidia.com/artifactory/sw-swx-lab-infra-generic-local/scctl/get-app.sh -o /tmp/get-app.sh && bash /tmp/get-app.sh --output-dir /usr/local/bin; \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Dropping the || echo ... continuing was meant to make this fail loud, but a pipeline's exit status is bash's, and the default RUN shell has no pipefail — so a 404/401 from curl still leaves the image without scctl and the RUN succeeds.

Suggested change:

        curl -fsS https://artifactory.nvidia.com/artifactory/sw-swx-lab-infra-generic-local/scctl/get-app.sh -o /tmp/get-app.sh && \
        bash /tmp/get-app.sh --output-dir /usr/local/bin && rm /tmp/get-app.sh; \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The || echo "...continuing..." was dropped to make a failed scctl install fatal, but the pipe still hides it: RUN uses /bin/sh (dash, no pipefail), so the exit status is bash's, not curl's. On a 404/auth error curl -fsS writes nothing to stdout, bash -s -- reads an empty script and exits 0, and the image builds without scctl — surfacing much later as scctl: command not found in the allocation step of test_gpu/test_cuda/test_bindings_gpu/test_ucxx_gpu.

Suggestion:

        curl -fsS https://artifactory.nvidia.com/artifactory/sw-swx-lab-infra-generic-local/scctl/get-app.sh -o /tmp/get-app.sh && bash /tmp/get-app.sh --output-dir /usr/local/bin; \

else \
echo "INFO: Skipping scctl installation on $(uname -m) architecture (not available)"; \
fi
Expand Down
6 changes: 3 additions & 3 deletions .ci/dockerfiles/Dockerfile.dl-base
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# UCX's aarch64 CUDA 13 + MOFED 24.10 release image plus what the DL cluster job
# needs on top: gdrcopy, which the cluster has no environment module for, and
# the Python packaging module test_ucx_tls.py imports.
# needs on top: gdrcopy, which the cluster has no environment module for, the
# Python packaging module test_ucx_tls.py imports, and ip for the io_demo test.

FROM harbor.mellanox.com/ucx/aarch64/ubuntu24.04-mofed24.10-cuda13:1

ARG GDRCOPY_VERSION=2.5.1

RUN apt-get update && \
apt-get install -y --no-install-recommends python3-setuptools && \
apt-get install -y --no-install-recommends python3-setuptools iproute2 && \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor — iproute2 installed twice

iproute2 is now baked into dl-base, but test_bindings_arm_matrix.yaml:99 still apt-installs it at runtime and its comment still says "ip (used by get_ip) come[s] from apt". Can we drop it from the Checkout step and fix the comment?

rm -rf /var/lib/apt/lists/*

# configure finds gdrcopy under /usr/local on its own.
Expand Down
152 changes: 121 additions & 31 deletions .ci/jenkins/Jenkinsfile.dispatcher
Original file line number Diff line number Diff line change
Expand Up @@ -13,58 +13,148 @@ withCredentials([usernamePassword(credentialsId: 'github-token', passwordVariabl
githubHelper = GithubHelper.getInstance("${GIT_PASSWORD}", VARIABLE_FROM_POST)
}

// Abort previous dispatcher runs for the same PR
// Abort previous dispatcher runs for the same PR and their leaf jobs
def currentPrNumber = githubHelper.getPRNumber()?.toString()
if (currentPrNumber) {
def slurper = new groovy.json.JsonSlurper()
try {
Jenkins.instance.getItemByFullName(env.JOB_NAME).builds.findAll {
def staleBuilds = Jenkins.instance.getItemByFullName(env.JOB_NAME).builds.findAll {
it.isBuilding() && it.number < currentBuild.number
}.each { b ->
}.findAll { b ->
def gd = b.getAction(hudson.model.ParametersAction)?.getParameters()?.find { it.name == 'VARIABLE_FROM_POST' }?.value
def otherPr = gd ? slurper.parseText(gd)?.issue?.number?.toString() : null
if (otherPr == currentPrNumber) {
echo "Aborting dispatcher #${b.number} for same PR #${currentPrNumber}"
b.doStop()
// JsonSlurper is created per call: it is not Serializable, and holding it in
// a local across the sleep below fails the pipeline state checkpoint.
def otherPr = gd ? new groovy.json.JsonSlurper().parseText(gd)?.issue?.number?.toString() : null
otherPr == currentPrNumber
}

if (staleBuilds) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

staleBuilds still holds WorkflowRun objects here and echo is a pipeline step, so this hits the same checkpoint problem the comments on L24 and L34 work around. The catch below would swallow the NotSerializableException and skip the whole abort. pls keep the count in an int and move this echo after staleBuilds = null.

echo "PR #${currentPrNumber}: found ${staleBuilds.size()} stale dispatcher(s) to abort"

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Residual coverage gap (needs CI run links): CPS-safety of the rewritten dispatcher abort loop — staleBuilds still holds WorkflowRun objects live across this echo.

}

// Targets to kill as [jobFullName, buildNumber] pairs - holding Run objects
// across the sleep below breaks the pipeline state checkpoint (WorkflowRun is
// not serializable). Leaf builds are collected from each stale dispatcher's
// console log and listed first, so they are killed before their dispatcher.
// Leaf jobs are logged as "UCX-OSS » <job>".
def targets = []
staleBuilds.each { b ->
b.getLog(1000).each { line ->

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Leaf builds found by scraping console text: Run.getLog(1000) returns only the tail of the log, while the Starting building: lines are printed at the very beginning of the dispatcher run, so a verbose run silently finds no leaf builds. Why not find leaf builds by their githubData/VARIABLE_FROM_POST parameter, like the dispatcher matching above, instead of parsing the console log?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Leaf discovery via console-log scraping is fragile. Run.getLog(1000) returns only the tail of the log, so the Starting building: lines (emitted at the very beginning of the parallel fanout) can fall out of the window and the leaves will silently survive. The match also depends on the " » " display-name format. Instead of parsing the console log, can we locate the leaf builds via their UpstreamCause (upstream project + build number)?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor: getLog(1000) returns the last 1000 lines, while Starting building: is printed at the start of the dispatcher log, so leaf builds can silently stop being found once the dispatcher log grows beyond 1000 lines. The " » "→/ display-name mapping is also fragile. Why not locate the downstream runs via hudson.model.Cause$UpstreamCause (upstreamProject/upstreamBuild) instead of parsing the console log?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

getLog(1000) returns the last 1000 lines, but "Starting building:" is logged at the very start of the fanout (when parallel fanout launches the 8 leaf jobs). For a long-running stale dispatcher (it uses wait: true on 8 branches, so it keeps logging), those early lines fall outside the last 1000 and no leaf targets are collected — silently reproducing the exact bug this PR fixes. Can we use b.getDownstreamBuilds() (or raise the limit) instead of parsing the tail of the console log?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Run.getLog(n) returns the last n lines, but Starting building: ... lines are emitted at the beginning of the dispatcher log. A dispatcher log longer than 1000 lines would yield no leaf targets, silently leaving leaf jobs running — the main goal of the change. Can we instead look up each leaf job's builds and match the upstream cause to the stale dispatcher?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Run.getLog(1000) returns the last 1000 lines, not the head. The Starting building: lines are emitted at the very start of parallel fanout, while the tail of a stale dispatcher's log is its leaf-job progress output. On a dispatcher that has been running a while, those lines fall outside the last 1000, targets then contains only the dispatcher itself, and the leaf jobs this PR is meant to kill survive — which is the whole point of the change. Can we use the full getLog() or read the start of the log instead?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor: getLog(1000) returns the last 1000 lines, but "Starting building" is logged early — a longer stale log means its leaf jobs are not found and keep running, which is the case this block is meant to fix.

def m = (line =~ /Starting building: (.+) #(\d+)/)
if (m) {
targets.add([m[0][1].replace(' » ', '/'), m[0][2] as int])
}
}
}
targets.addAll(staleBuilds.collect { [env.JOB_NAME, it.number] })
staleBuilds = null

// Stop gracefully first so pipeline_stop can release Slurm allocations.
targets.each { t ->
if (Jenkins.instance.getItemByFullName(t[0])?.getBuildByNumber(t[1])?.isBuilding()) {
echo "Stopping ${t[0]} #${t[1]}"
Jenkins.instance.getItemByFullName(t[0])?.getBuildByNumber(t[1])?.doStop()
}
}
for (int i = 0; i < 30; i++) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

The graceful-stop wait is up to 30 * 10s plus 2 * 5s between kill attempts — ~5 min of blocking before the new dispatcher launches any leaf job, which is exactly the common re-push case. Can we shorten the graceful window, or move the wait+kill after the new leaf jobs are queued?

def stopping = targets.findAll { t ->
Jenkins.instance.getItemByFullName(t[0])?.getBuildByNumber(t[1])?.isBuilding()
}
if (!stopping) break
sleep 10
}

for (int attempt = 1; attempt <= 3; attempt++) {
def alive = targets.findAll { t ->
Jenkins.instance.getItemByFullName(t[0])?.getBuildByNumber(t[1])?.isBuilding()
}
if (!alive) break
alive.each { t ->
echo "${attempt > 1 ? 'Retry ' + attempt + ': ' : ''}Killing ${t[0]} #${t[1]}"
Jenkins.instance.getItemByFullName(t[0])?.getBuildByNumber(t[1])?.doKill()

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

doKill() skips pipeline cleanup. doKill() is Jenkins' hard kill and does not run post/finally sections. Two concrete consequences:

  • pipeline_stop in test_gpu_matrix.yaml and test_dl_matrix.yaml releases the Slurm allocations (SLURM_JOB_TIMEOUT: '02:45:00' / '03:20:00'); hard-killing the leaf leaks the allocation and the /mnt/pvc/job_id_* file until the Slurm timeout expires, holding funk/gb200nvl72_ci nodes.
  • Hard-killing the stale dispatcher skips its catch block, so updateCommitStatus(... FAILURE) never runs and the PR keeps a stale "Blossom CI started" pending status.

Can we doStop() on the first attempts and only doKill() on the last one?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

doKill() is a hard kill, so the leaf build's pipeline_stop never runs and aborted ucx-test-gpu-oss/ucx-test-dl-gpu-oss builds leak their Slurm allocation until SLURM_JOB_TIMEOUT (up to 3h20m). can we call doStop() on the first attempt and escalate to doKill() only if the build is still alive?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

doKill() is a hard kill: the leaf pipeline's post/pipeline_stop never runs. For ucx-test-gpu-oss that means stopAllForBuild is skipped and the SLURM allocations (and any still-queued downstream items) leak. Can we use doStop() on the first attempt and escalate to doKill() only on retry?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

blocker: the abort path changed from doStop() to doKill(). doKill() is a hard kill that tears down the CPS VM without running the leaf pipeline's finally block (Jenkinsfile.github) or ci-demo's pipeline_stop. For ucx-test-gpu-oss that pipeline_stop is exactly what runs slurmCI stopAllForBuild / scancel, so aborting a stale run now leaks the Slurm allocation until SLURM_JOB_TIMEOUT (02:45:00) expires. The same applies to githubHelper.updateCommitStatus(...) in the leaf's finally, so the commit status is left dangling at "CI started". Pls use doStop() on the first attempt and only fall back to doKill() on the retries — that is also what the 3-attempt loop is for.

}
if (attempt < 3) sleep 5
}
} catch(Exception e) {
echo "Could not abort previous dispatchers: ${e.message}"
echo "Could not abort previous builds: ${e.message}"
}
}

def sha = githubHelper.getMergedSHA()
def pipelineOverviewUrl = "${env.BUILD_URL}pipeline-overview/"

githubHelper.updateCommitStatus(pipelineOverviewUrl, "Blossom CI started", GitHubCommitState.PENDING)
githubHelper.updateCommitStatus(pipelineOverviewUrl, "UCX CI started", GitHubCommitState.PENDING)
currentBuild.description = githubHelper.getBuildDescription()

def jobs = [
'ucx-codestyle-oss',
'ucx-static-checks-oss',
'ucx-coverity-oss',
'ucx-build-oss',
'ucx-build-static-oss',
'ucx-test-oss',
'ucx-test-gpu-oss',
'ucx-test-dl-gpu-oss',
// Basic compile gates every leaf but codestyle, as on Azure: a PR that does
// not build must not take GPU, BlueField or Slurm slots.
def gateJob = 'UCX-OSS/ucx-basic-compile-oss'

// Leaf jobs to dispatch, keyed by parallel-branch name
def gateStageJobs = [
'codestyle': 'UCX-OSS/ucx-codestyle-oss',
]
def leafJobs = [
'static-checks': 'UCX-OSS/ucx-static-checks-oss',
'coverity': 'UCX-OSS/ucx-coverity-oss',
'build': 'UCX-OSS/ucx-build-oss',
'build-static': 'UCX-OSS/ucx-build-static-oss',
'test': 'UCX-OSS/ucx-test-oss',
'gpu': 'UCX-OSS/ucx-test-gpu-oss',
'cuda': 'UCX-OSS/ucx-test-cuda-oss',
'dl-gpu': 'UCX-OSS/ucx-test-dl-gpu-oss',
'bindings': 'UCX-OSS/ucx-test-bindings-oss',
'bindings-gpu': 'UCX-OSS/ucx-test-bindings-gpu-oss',
'bindings-arm': 'UCX-OSS/ucx-test-bindings-arm-oss',
'ucxx': 'UCX-OSS/ucx-test-ucxx-oss',
'ucxx-gpu': 'UCX-OSS/ucx-test-ucxx-gpu-oss',
'namespace': 'UCX-OSS/ucx-test-namespace-oss',
'wirecompat': 'UCX-OSS/ucx-test-wirecompat-oss',
'wirecompat-gpu': 'UCX-OSS/ucx-test-wirecompat-gpu-oss',
'efa': 'UCX-OSS/ucx-test-efa-oss',
'mad': 'UCX-OSS/ucx-test-mad-oss',
'bf': 'UCX-OSS/ucx-test-bf-oss',
]

try {
def fanout = [:]
for (def j in jobs) {
def jobName = "UCX-OSS/${j}"
fanout[jobName] = {
build job: jobName, parameters: [
string(name: 'sha1', value: sha),
string(name: 'githubData', value: VARIABLE_FROM_POST),
], propagate: false, wait: true
// Compute the merged SHA once so all leaf jobs test the same commit
def mergedSHA = githubHelper.getMergedSHA()
def leafParams = [
string(name: 'sha1', value: mergedSHA),
string(name: 'githubData', value: VARIABLE_FROM_POST)
]

// Leaf jobs report their own GitHub statuses; the dispatcher build stays
// SUCCESS unless dispatching itself fails. catchError paints a failed
// leaf's branch red without failing the build, and all branches run to
// completion regardless of sibling failures.
def leafBranches = { jobs ->
jobs.collectEntries { branchName, jobName ->
[(branchName): {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', catchInterruptions: false) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

catchError here also swallows a dispatch failure, e.g. a leaf name not yet registered in JJB: the branch turns red but the dispatcher still reports SUCCESS and the leaf posts no GitHub status at all (Jenkinsfile.github:24), so the PR looks green with a check silently missing. The basic-compile branch guards exactly this with the gate?.result re-check — can we do the same for the leaves?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

with buildResult: 'SUCCESS' on every leaf branch the dispatcher build stays SUCCESS, so this sets the commit status to SUCCESS even when e.g. ucx-test-oss failed. is a green aggregate status intended, given the per-leaf statuses are then the only real signal?

build job: jobName, parameters: leafParams, wait: true
}
}]
}
}
parallel fanout
githubHelper.updateCommitStatus(pipelineOverviewUrl, "Blossom CI passed", GitHubCommitState.SUCCESS)

// Any non-SUCCESS gate result, an abort included, skips the leaf jobs.
def gate = null
parallel(leafBranches(gateStageJobs) + ['basic-compile': {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE', catchInterruptions: false) {
gate = build job: gateJob, parameters: leafParams, wait: true, propagate: false
if (gate.result != 'SUCCESS') {
error("Basic compile ${gate.result}: ${gate.absoluteUrl}")
}
}
}])
if (gate?.result != 'SUCCESS') {
error("Basic compile did not pass, skipping the other jobs: ${gate?.absoluteUrl}")
}

parallel(leafBranches(leafJobs))

githubHelper.updateCommitStatus(pipelineOverviewUrl, "UCX CI ended", GitHubCommitState.SUCCESS)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor: Both the success and failure paths now post the same description, "UCX CI ended", so the text next to the GitHub check no longer says whether CI passed (only the state icon differs). Can we keep distinct wording, e.g. "UCX CI passed" / "UCX CI failed"? (also applies at line 158)

} catch(Exception ex) {
println ex
githubHelper.updateCommitStatus(pipelineOverviewUrl, "Blossom CI failed", GitHubCommitState.FAILURE)
githubHelper.updateCommitStatus(pipelineOverviewUrl, "UCX CI ended", GitHubCommitState.FAILURE)
throw ex
}
118 changes: 114 additions & 4 deletions .ci/jenkins/proj_jjb_oss.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,10 @@
- git:
url: "https://github.com/openucx/ucx.git"
branches: [ 'master' ]
shallow-clone: true
depth: 100
refspec: "+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin/pr/*"
browser: githubweb
browser-url: "https://github.com/openucx/ucx"
wipe-workspace: false

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Why wipe-workspace: false (also at line 105)? Dropping the shallow clone is understandable (a depth-100 PR fetch may not contain $sha1), but this changes checkout semantics for all leaf jobs: the workspace is no longer deleted between builds and no matrix step runs git clean, so untracked leftovers from the previous build in the same workspace are reused — e.g. install/, ucx-install-current/, the ucx_v1.15.x…v1.18.x clones created by test_wirecompat_matrix.yaml (whose git_clone_with_retry would target an existing dir), and .deps.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

why were shallow-clone: true / depth: 100 dropped and wipe-workspace: false added? A full-history clone plus a reused workspace on every leaf job looks like a leftover from testing this PR. (same change at :105)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

why wipe-workspace: false? (same at line 105) JJB defaults it to true, and steps added here fail on a reused workspace: mkdir build in test_bindings_matrix.yaml:97 and git_clone_with_retry into ${WORKSPACE}/ucx_${ucx_tag} in test_wirecompat_matrix.yaml:78 (plain git clone into an existing non-empty dir). Removing shallow-clone looks justified — test_bindings_matrix.yaml:162 needs git describe --tags — but this one looks like debug leftover.

script-path: ".ci/jenkins/Jenkinsfile.dispatcher"

- job-template:
Expand Down Expand Up @@ -100,11 +99,10 @@
- git:
url: "https://github.com/openucx/ucx.git"
branches: [ '$sha1' ]
shallow-clone: true
depth: 100
refspec: "+refs/heads/*:refs/remotes/origin/* +refs/pull/*:refs/remotes/origin/pr/*"
browser: githubweb
browser-url: "https://github.com/openucx/ucx"
wipe-workspace: false

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Same concern as line 55: wipe-workspace: false leaves untracked leftovers from previous builds in the workspace since no step runs git clean.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

minor: why wipe-workspace: false on the leaf job template? The leaf jobs lose shallow-clone/depth and gain wipe-workspace: false, so untracked files survive between builds in the same workspace slot (the git plugin does not clean by default). Several new steps assume a clean tree: test_bindings_matrix.yaml "Go Build UCX" runs mkdir build (no -p) which fails the second time, and test_wirecompat_matrix.yaml runs git_clone_with_retry "${ucx_tag}" "${WORKSPACE}/ucx_${ucx_tag}" 1 — git clone into a non-empty dir fails, then retries 5x and fails the step.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

why wipe-workspace: false? JJB defaults it to true, and no clean extension replaces it. The new steps assume a clean tree: test_bindings_matrix.yaml:97 runs mkdir build (no -p) and test_wirecompat_matrix.yaml:74,78 clones into ${WORKSPACE}/ucx_${ucx_tag}, which git clone refuses if the directory already exists — both fail on the second build in a reused workspace. The Azure jobs these mirror (buildlib/pr/go/go-test.yml, buildlib/pr/wire_compat.yml) use workspace: clean: all.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

blocker: wipe-workspace: false (JJB default is true) keeps untracked files between builds, and the git SCM does no git clean unless asked. Two of the new matrices then fail on the second build in a reused workspace: test_bindings_matrix.yaml:97 does mkdir build (not -p), and test_wirecompat_matrix.yaml:74-78 clones into ${WORKSPACE}/ucx_${ucx_tag}, which git_clone_with_retry cannot do over an existing dir. Both are safe on Azure only because those jobs use workspace: clean: all. Suggest:

Suggested change
wipe-workspace: false
wipe-workspace: false
clean:
before: true

That keeps the local git objects (which is presumably why shallow-clone was dropped — JUCX needs git describe --tags) while removing stale build output.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

wipe-workspace: false (leaf template): JJB defaults wipe-workspace to true, so this keeps the previous build's tree in the workspace. steps that create fresh dirs then fail: mkdir build in test_bindings_matrix.yaml and git_clone_with_retry into ${WORKSPACE}/ucx_<tag> in test_wirecompat_matrix.yaml. why is it needed?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Are wipe-workspace: false and dropping shallow-clone/depth: 100 intended, or part of the same debug change as the origin/pr/12094/head pin above? Without the wipe, untracked leftovers from a previous build persist in the leaf-job workspace.

script-path: ".ci/jenkins/Jenkinsfile.github"

- project:
Expand All @@ -121,6 +119,14 @@
jobs:
- "{jjb_proj}"

- project:
name: ucx-basic-compile
jjb_proj: "ucx-basic-compile-oss"
jjb_conf_file: ".ci/pipeline/basic_compile_matrix.yaml"
jjb_description: "UCX Basic compile gate (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-static-checks
jjb_proj: "ucx-static-checks-oss"
Expand Down Expand Up @@ -169,10 +175,114 @@
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-cuda
jjb_proj: "ucx-test-cuda-oss"
jjb_conf_file: ".ci/pipeline/test_cuda_matrix.yaml"
jjb_description: "UCX CUDA memory hooks and SONAME suffix tests on funk (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-dl-gpu
jjb_proj: "ucx-test-dl-gpu-oss"
jjb_conf_file: ".ci/pipeline/test_dl_matrix.yaml"
jjb_description: "UCX GTest on DL cluster (GB200/aarch64). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-bindings
jjb_proj: "ucx-test-bindings-oss"
jjb_conf_file: ".ci/pipeline/test_bindings_matrix.yaml"
jjb_description: "UCX Go and JUCX bindings tests (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-bindings-gpu
jjb_proj: "ucx-test-bindings-gpu-oss"
jjb_conf_file: ".ci/pipeline/test_bindings_gpu_matrix.yaml"
jjb_description: "UCX Go and JUCX GPU bindings tests on funk (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Two new jobs are registered but never dispatched: ucx-test-bindings-arm-oss and ucx-test-namespace-gpu-oss get - project: entries here (lines 196-202, 212-218), but unlike the other eight new jobs they are absent from the jobs list in Jenkinsfile.dispatcher:94-105. Their matrix files (test_bindings_arm_matrix.yaml, 202 lines; test_namespace_gpu_matrix.yaml, 142 lines) are therefore only manually triggerable. Is that intentional (manual-only, to limit DL/funk usage), or an omission?

name: ucx-test-bindings-arm
jjb_proj: "ucx-test-bindings-arm-oss"
jjb_conf_file: ".ci/pipeline/test_bindings_arm_matrix.yaml"
jjb_description: "UCX JUCX tests on DL cluster (GB200/aarch64) (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-ucxx
jjb_proj: "ucx-test-ucxx-oss"
jjb_conf_file: ".ci/pipeline/test_ucxx_matrix.yaml"
jjb_description: "UCXX builds and CPU tests against UCX (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-ucxx-gpu
jjb_proj: "ucx-test-ucxx-gpu-oss"
jjb_conf_file: ".ci/pipeline/test_ucxx_gpu_matrix.yaml"
jjb_description: "UCXX wheel and GPU tests against UCX on funk (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-namespace
jjb_proj: "ucx-test-namespace-oss"
jjb_conf_file: ".ci/pipeline/test_namespace_matrix.yaml"
jjb_description: "UCX namespace tests (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Existing thread (+1, still true): ucx-test-namespace-gpu-oss is registered here (lines 242-248) but absent from the dispatcher leafJobs.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

+1 (existing thread, still true): ucx-test-namespace-gpu-oss is registered here but absent from the dispatcher's leafJobs — 22 leaf projects defined, 21 dispatched; namespace-gpu is the only dead one, making test_namespace_gpu_matrix.yaml's 154 lines unreachable.

name: ucx-test-namespace-gpu
jjb_proj: "ucx-test-namespace-gpu-oss"
jjb_conf_file: ".ci/pipeline/test_namespace_gpu_matrix.yaml"
jjb_description: "UCX GPU namespace tests on funk (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-wirecompat
jjb_proj: "ucx-test-wirecompat-oss"
jjb_conf_file: ".ci/pipeline/test_wirecompat_matrix.yaml"
jjb_description: "UCX wire compatibility tests (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-wirecompat-gpu
jjb_proj: "ucx-test-wirecompat-gpu-oss"
jjb_conf_file: ".ci/pipeline/test_wirecompat_gpu_matrix.yaml"
jjb_description: "UCX GPU wire compatibility tests on funk (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-efa
jjb_proj: "ucx-test-efa-oss"
jjb_conf_file: ".ci/pipeline/test_efa_matrix.yaml"
jjb_description: "UCX EFA tests on AWS (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-mad
jjb_proj: "ucx-test-mad-oss"
jjb_conf_file: ".ci/pipeline/test_mad_matrix.yaml"
jjb_description: "UCX MAD tests (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"

- project:
name: ucx-test-bf
jjb_proj: "ucx-test-bf-oss"
jjb_conf_file: ".ci/pipeline/test_bf_matrix.yaml"
jjb_description: "UCX GTest on BlueField (GitHub Blossom). Do NOT edit via Web GUI!"
jobs:
- "{jjb_proj}"
Loading