Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
191 commits
Select commit Hold shift + click to select a range
bc17acf
refactor(errors): unify semantic error classification (#14395)
biswapanda Sep 15, 2026
c52945c
docs: refresh community events
dynamo-ops Sep 15, 2026
055e989
feat(llm): carry KServe requested outputs on tensor requests (#14618)
yinggeh Sep 15, 2026
5292fc9
test(operator): align DGDR goldens with current AIC backend slot (#14…
xianlubird Sep 15, 2026
95cadce
fix(vllm): support RL discovery with released vLLM 0.28 for dynamo re…
biswapanda Sep 15, 2026
a6fa367
feat(recipes): add A.X-K2 NVFP4 B200 serving and benchmark recipes (#…
vanshilshah97 Sep 15, 2026
c9a7299
test(benchmarks): cover trace command regression (#14861)
jthomson04 Sep 15, 2026
dbf505b
fix(operator): preserve alpha service metadata precedence (#14855)
julienmancuso Sep 15, 2026
db6774e
build(deps): bump AISimulate to 0.12.0.dev2 (#14831)
saturley-hall Sep 15, 2026
165fca7
fix(vllm): stop the embedding worker pool crashing at startup (#14449)
glamr-agent Sep 15, 2026
0949758
feat(rl): add Slime external rollout example (#12856)
Aphoh Sep 15, 2026
477d31d
feat(triton): drop FP16/BF16 input guard now that the tensor protocol…
Vinya567 Sep 15, 2026
f1cb3ae
refactor(http): consolidate to a single aiohttp backend; remove httpx…
nnshah1 Sep 15, 2026
5c76ed4
fix(frontend): label aliased model metrics with the primary name (#14…
glamr-agent Sep 15, 2026
4c89e3d
fix(gms): stop V1 snapshot save and load crashing at startup (#14797)
glamr-agent Sep 15, 2026
13ca6fd
test(router): isolate request lifecycle counters (#14875)
jthomson04 Sep 15, 2026
be9623d
fix(container): make TRT-LLM runtime Triton JIT independent of image …
nv-yna Sep 15, 2026
b43c373
fix(RL): stop RL worker discovery returning an empty list on Kubernet…
glamr-agent Sep 15, 2026
7163b48
feat(mm-routing): add Nemotron 3 Nano Omni image routing (#14564)
krishung5 Sep 15, 2026
9fcc771
fix(planner): allow scale-down while workers are starting (#14671)
tedzhouhk Sep 15, 2026
395fb8e
feat: KV DC Relay file based source mode (#14807)
Kaonael Sep 16, 2026
b94be66
feat(sglang): expose cross-encoder reranking through /v1/rerank (#14032)
xianlubird Sep 16, 2026
8309ffb
fix(profiler): explain inaccessible model paths during trust checks (…
tedzhouhk Sep 16, 2026
8c5a737
fix(sglang): sync discovery from native pause state (#13951)
Aphoh Sep 16, 2026
0bd2059
feat(recipes): add Solar Open2 250B NVFP4 aggregated and disaggregate…
snarravula-dl Sep 16, 2026
43b6344
refactor(agents): session_id reader from AgentContext + forward to vL…
karen-sy Sep 16, 2026
a5c242e
fix(discovery): allow served aliases for the same model source (#14857)
jthomson04 Sep 16, 2026
5e21f9c
fix(router): reject unknown explicit worker targets (#14858)
jthomson04 Sep 16, 2026
30e1580
fix(xpu): stabilize XPU test workers (#14539)
VincyZhang Sep 16, 2026
6aeee7f
feat(mm-routing): add Nemotron 3 Nano Omni video routing (#14653)
krishung5 Sep 16, 2026
7a77a5d
fix(sglang): validate diffusion input_reference and bound media fetch…
nnshah1 Sep 16, 2026
883db9b
chore(deps): upgrade fastokens to 0.3.2 (#14798)
jthomson04 Sep 16, 2026
c76d320
fix(vllm): ship codec-free OpenCV for image inputs (#14361)
glamr-agent Sep 16, 2026
059cae3
docs: refresh community events
dynamo-ops Sep 16, 2026
ef235cf
ci: refresh the compliance baseline in auto-upgrade pipeline (#14206)
nv-anants Sep 16, 2026
d866a9c
feat(triton): honor KServe classification on tensor outputs (#14783)
yinggeh Sep 16, 2026
ccda2d2
docs(rl): stop the verl guide sending readers to a vLLM version it ca…
glamr-agent Sep 16, 2026
e292c76
feat(mocker): publish native KV events from the vLLM gRPC server (#14…
jthomson04 Sep 16, 2026
8f95101
fix(kv-router): release unowned radix branches after eviction (#14878)
jthomson04 Sep 16, 2026
16d6048
fix: show correct backend versions in the install selectors (#13599)
nv-anants Sep 16, 2026
cfada2f
build(vllm): prepare v0.29.0 bump (#14543)
JulienDarve Sep 16, 2026
8950fe1
feat(triton): Update Triton Base Image to 26.08 (#14854)
whoisj Sep 16, 2026
fb7da85
fix(operator): normalize equivalent worker hash inputs (#14721)
bzsuni Sep 16, 2026
adeaae1
test(sglang): exercise NIXL in embedding cache E/PD test (#14795)
pskiran1 Sep 16, 2026
f937ad0
fix(sglang): stop the elastic-EP scale-up worker crash-looping at sta…
glamr-agent Sep 16, 2026
40a853b
fix(responses): honor tool_choice when parsing tool calls from text (…
xianlubird Sep 16, 2026
5743b3c
ci: accept trusted full-CI request comments (#14868)
MatejKosec Sep 16, 2026
c970209
docs: clarify EPP mode boundary and single-replica Dynamo mode fixes …
atchernych Sep 16, 2026
fd997d6
ci(docs): move the generated-tables determinism gate out of link chec…
dagil-nvidia Sep 16, 2026
61c51c7
ci(docs): generate the Kubernetes API reference at publish time (#14122)
dagil-nvidia Sep 16, 2026
f92f6f6
fix(operator): discover pull secrets for init containers (#14922)
bojiang-li Sep 16, 2026
5296909
fix(sglang): stop an unusable mooncake backend crashing workers after…
glamr-agent Sep 16, 2026
88c7770
fix(sglang): emit prefill handoff before completion in sidecar (#14260)
connorcarpenter15 Sep 16, 2026
0dbd9a8
test(trtllm): enable fault tolerance coverage (#14609)
tanmayv25 Sep 16, 2026
9922482
fix(frontend): evict async tokenizer executors when the tokenizer is …
panpan0000 Sep 16, 2026
18a75aa
fix(llm): report KServe datatypes by their wire names, not protobuf v…
Vinya567 Sep 16, 2026
633776f
docs(mm-routing): document video KV routing (#14958)
krishung5 Sep 16, 2026
a1c9d4c
fix(sidecar): honor worker namespace suffix (#14955)
biswapanda Sep 16, 2026
0cb120e
fix(bindings): drain bridge tasks before interpreter finalization (#1…
glamr-agent Sep 16, 2026
69f4476
fix(discovery): stop a Qwen3-VL worker from serving video with anothe…
glamr-agent Sep 16, 2026
4df3f3a
fix(gms): honor configured timeout during initial weights admission (…
glamr-agent Sep 16, 2026
232f881
feat(kv-router): add construction-time indexer delegates (#14945)
ryanolson Sep 17, 2026
e5ef9d7
fix(sglang): support min_tokens on tokenizer-free decode workers (#14…
glamr-agent Sep 17, 2026
adfe2aa
feat(router): add SessionPrefixIndexer for session-block lineage (#13…
karen-sy Sep 17, 2026
3dd603b
fix(vllm): settle kvwarm stages through a per-step round on every att…
Arsene12358 Sep 17, 2026
99dae1f
feat(vllm): benchmark hybrid caches with random KDA state (#14900)
tedzhouhk Sep 17, 2026
0951489
fix(runtime): fix QUIC reassembly and reduce response stalls (#14876)
jthomson04 Sep 17, 2026
e4853ad
feat(router): unify frontend and standalone selection core (#14570)
ishandhanani Sep 17, 2026
1dca16f
fix(planner): keep control APIs responsive during Prometheus collecti…
xianlubird Sep 17, 2026
9c98eba
fix(router): record SGLang prefill completion after stream ends (#14968)
jain-ria Sep 17, 2026
b5871f3
fix(frontend): send inline media once on the TCP request plane (#14801)
Sumit884-byte Sep 17, 2026
7831037
docs: refresh community events
dynamo-ops Sep 17, 2026
6744faa
fix(vllm): initialize synchronizer in KV warmup capacity test (#14984)
alec-flowers Sep 17, 2026
c0eb3fc
fix(recipes): make the Solar Open2 250B benchmark and docs link usabl…
snarravula-dl Sep 17, 2026
0f061b7
feat(recipes): add K-EXAONE 2.0 750B-A37B NVFP4 vLLM recipes for B200…
chw001 Sep 17, 2026
dc0f538
feat: KVCR Resiliency Deployment Example (#14695)
aranadive Sep 17, 2026
bbc55cb
feat(omni): add Nemotron Audex speech synthesis to /v1/audio/speech (…
tthakkal Sep 17, 2026
a10a46a
ci: allow glamr-agent to request CI on its own unsigned PRs (#14964)
MatejKosec Sep 17, 2026
2cd9c98
fix(vllm): isolate multimodal worker ports (#14751)
keivenchang Sep 17, 2026
5024ac9
fix(runtime): reject invalid DYN_REQUEST_PLANE values (#12612)
glamr-agent Sep 17, 2026
0b78716
fix(responses): preserve text instead of inferring tool calls (#14846)
xianlubird Sep 17, 2026
a28ecfb
chore: temporarily increase frontend build time limit 45 --> 90 min (…
dmitry-tokarev-nv Sep 17, 2026
4ed78bc
test(operator): cover scoped CA injection ownership (#14961)
julienmancuso Sep 17, 2026
6be0ab2
feat(frontend): map semantic errors to HTTP responses (#14396)
biswapanda Sep 17, 2026
cdadeb6
docs: correct fault-tolerance architecture details (#14880)
elizabetht Sep 17, 2026
f140f3a
build(deps): bump nats-server to v2.14.7 (#14919)
dagil-nvidia Sep 17, 2026
7d9cdd5
build(deps): bump AISimulate to 0.12.0 (#15012)
saturley-hall Sep 17, 2026
ddff098
feat(backends): expose native LoRA capacity in model registration (#1…
JulienDarve Sep 17, 2026
6e11aae
fix(planner): handle pending decisions in virtual connector wait (#14…
bzsuni Sep 17, 2026
1346923
feat(vllm): add sidecar LoRA lifecycle (#13068)
connorcarpenter15 Sep 18, 2026
3264d8f
fix(vllm/omni): pass response_format into video EngineInputs (#14667)…
Prudctual Sep 18, 2026
d07fcea
chore: bump version to 1.6.0 post 1.5.0 branch cut (#15009)
pvijayakrish Sep 18, 2026
460134d
fix(ci): Use `pytest --ignore` to Skip Tests Based on Framework (#14815)
whoisj Sep 18, 2026
e0a996b
feat(sidecar): add e2e CI testing for sidecar launch scripts (#14508)
tanmayv25 Sep 18, 2026
3322d1f
docs(operator): document the DGDR workload-creation trust boundary (#…
nnshah1 Sep 18, 2026
d419abc
test(efa): add the EFA disaggregated deploy test for sglang (#13893)
jh-nv Sep 18, 2026
99875cb
fix(runtime): support IPv6-only IP resolution (#13126)
jthomson04 Sep 18, 2026
12e8f63
docs(fault-tolerance): clarify migration after shutdown grace expires…
kthui Sep 18, 2026
72cb224
feat(vllm-omni): preserve generated video audio (#13707)
furionw Sep 18, 2026
01ac800
feat(vllm-omni): pass model-specific video parameters (#13708)
furionw Sep 18, 2026
0dc991c
feat(vllm-omni): qualify MiniMax-H3 T2VA on B200 (#13589)
furionw Sep 18, 2026
71c94bc
feat(responses): support allowed function tools (#14990)
xianlubird Sep 18, 2026
402c261
feat: Merge DSV4.1 changes from release branch to main (#15030)
indrajit96 Sep 18, 2026
ecb92bd
fix(frontend): reject boundary-only reasoning parsers at engine setup…
panpan0000 Sep 18, 2026
a9792db
fix(sglang): stop an unsupported --dcp-size worker from crashing mid-…
glamr-agent Sep 18, 2026
b522119
docs: refresh community events
dynamo-ops Sep 18, 2026
4067d08
test(operator): cover Grove compilation cache regression (#14960)
julienmancuso Sep 18, 2026
829a0a2
feat(vllm): add local LoRA sidecar launchers (#14574)
JulienDarve Sep 18, 2026
032d8fc
fix(sidecar): honor local KV indexing for decode workers (#14981)
alec-flowers Sep 18, 2026
0bc706b
fix(runtime): establish discovery watches before list_and_watch retur…
jorgeantonio21 Sep 18, 2026
8bfb587
docs: document the EPP endpoint-picker failure mode (#14811)
atchernych Sep 18, 2026
1f29d08
fix(operator): validate an existing DGD before a DGDR adopts it (#13885)
glamr-agent Sep 18, 2026
805a77f
fix(vllm): support hybrid DP ownership with released proto (#14697)
alec-flowers Sep 18, 2026
81fa669
fix(metrics): raise inter-token latency histogram ceiling to 80s (#14…
jh-nv Sep 18, 2026
9d3ce5d
fix(request-trace): stop audit records claiming completeness when the…
glamr-agent Sep 18, 2026
e46c7e9
fix: align NIXL Prometheus port handling (#14625)
glamr-agent Sep 18, 2026
ae5ca99
feat(router): add deadline-aware policy queue ordering (#14176)
ishandhanani Sep 18, 2026
b078517
docs: fix community calendar invite link (#15070)
rmccorm4 Sep 18, 2026
65fcc02
feat(router): add request classifier seam (#14177)
ishandhanani Sep 19, 2026
cedab72
feat(router): add pluggable router flow control (#14123)
ishandhanani Sep 19, 2026
cdcd721
fix(discovery): log metadata publication and capture deploy failure s…
xianlubird Sep 19, 2026
e35b963
fix(vllm): distinguish undeclared RL weight versions (#13041)
glamr-agent Sep 19, 2026
848206e
fix(common-http): pin validated DNS answers at connect time (#14474)
nnshah1 Sep 19, 2026
c3deae7
fix(ci): exclude lychee reports from retry scans (#14792)
bzsuni Sep 19, 2026
5593e88
feat(runtime): add per-request lifecycle instrumentation (#14101)
sbak5 Sep 19, 2026
6562e7d
docs: refresh community events
dynamo-ops Sep 19, 2026
25a8159
feat(router): unify native plugin setup and register classifiers (#14…
ishandhanani Sep 19, 2026
caafba8
feat(llm): support root-level thinking_token_budget for chat and resp…
flpanbin Sep 19, 2026
bcec7ea
feat: shard the SGLang worker gateway across processes (--gateway-wor…
peilii Sep 20, 2026
d7bfb35
docs: refresh community events
dynamo-ops Sep 20, 2026
38c9319
fix(sglang): abort decode requests cancelled before first token (#14781)
biswapanda Sep 21, 2026
908358c
fix(sglang): abort disaggregated prefill requests on cancellation (#1…
biswapanda Sep 21, 2026
c844b20
docs: refresh community events
dynamo-ops Sep 21, 2026
11f16cc
docs: Dynamo v1.5.0 release notes page and release ledger (#15113)
dagil-nvidia Sep 21, 2026
a67b954
fix(vllm): publish KV gauges from prefill workers (#12559)
gitover22 Sep 21, 2026
e539402
ci(release): push GA Helm charts to NGC OCI as well as ChartMuseum (#…
pvijayakrish Sep 21, 2026
3e48651
chore(xpu): upgrade vLLM and Omni to 0.29.0 (#15033)
VincyZhang Sep 21, 2026
b40d169
fix(frontend): make the HTTP listen backlog configurable, default 409…
peilii Sep 21, 2026
e0c29ae
fix(recipes): merge shared DGD environment variables by name (#15064)
yunzhoul-nv Sep 21, 2026
90a9ab3
fix(runtime): scope endpoint routing and cleanup by full identity (#1…
bzsuni Sep 21, 2026
d2b021f
feat(tokenspeed): support disaggregation with native KV routing (#9237)
nv-yna Sep 21, 2026
163b47a
docs(operator): refresh API references and platform upgrade notes (#1…
tmonty12 Sep 22, 2026
f3c7c22
fix(ci): fail test jobs whose pytest stage was cut off mid-run (#14759)
nv-tusharma Sep 22, 2026
7d4c346
fix(mocker): return token IDs from distributed workers (#15148)
jthomson04 Sep 22, 2026
07caf93
feat(router): bind subagents under their parent session's group (#14521)
peilii Sep 22, 2026
0020784
test(bindings): remove cancellation test timing races (#14974)
jthomson04 Sep 22, 2026
da27aa7
fix(frontend): complete tool calls after early finish (#15129)
biswapanda Sep 22, 2026
f36d2fa
fix(multimodal): return 400 for malformed data: URIs instead of opaqu…
flpanbin Sep 22, 2026
843d92a
fix(frontend): integrate Kimi dynamic tools from frontend-crates (#14…
luckyq Sep 22, 2026
7a96c16
fix: Update Qwen Utils to Match DeepStack Vision Embedding Size (#11244)
Victor49152 Sep 22, 2026
8612fc1
fix(frontend): prepend KServe batch dim for Triton metadata (#14996)
Sumit884-byte Sep 22, 2026
2e4998a
docs: refresh community events
dynamo-ops Sep 22, 2026
f9a2485
fix(sglang): require incremental streaming in sidecar discovery (#15150)
jain-ria Sep 22, 2026
0b0ea86
test(sglang): narrow the frontend port window in the tool-calling fix…
glamr-agent Sep 22, 2026
d9eb42d
feat(sglang): support cache salt routing (#14803)
jthomson04 Sep 22, 2026
5c0a79a
fix(sglang): handle structured output with reasoning enabled (#14465)
cmdy Sep 22, 2026
373bc9f
feat(vllm-omni): support FastH3 VSA (#14702)
GuanLuo Sep 22, 2026
70e094f
fix(sglang): propagate validation aborts as request errors (#15065)
luckyq Sep 22, 2026
21ff9e3
fix(ci): remove MinIO host port mappings (#15181)
sara4dev Sep 22, 2026
4176e3d
fix(multimodal): enforce media download limits (#15005)
host452b Sep 22, 2026
3710f93
fix(docs): keep tag copies of shared reference pages removed on main …
dagil-nvidia Sep 22, 2026
4a0547f
fix(tests): pin SGLang router worker NCCL ports and gate on /health (…
glamr-agent Sep 22, 2026
cb94f10
feat: Log frontend NUMA CPU affinity (#11184)
jthomson04 Sep 22, 2026
8a64474
docs(recipes): group sidebar by provider and order engines and GPUs c…
shwetha-krishnamurthy Sep 22, 2026
9c70a96
fix(llm): echo Responses API request metadata (#15102)
pskiran1 Sep 22, 2026
6e21a3a
fix(sidecar): register engine-reported vLLM KV block sizes (#14673)
JulienDarve Sep 23, 2026
dbca8da
feat(vllm): forward preprocessed multimodal features (#14244)
biswapanda Sep 23, 2026
f804218
refactor(router): move default worker selection into builtin plugin (…
ishandhanani Sep 23, 2026
6fad666
fix(frontend): accept null optional completion parameters (#14847)
cmdy Sep 23, 2026
5175723
fix(runtime): publish topology policy from Rust workers (#14909)
tmonty12 Sep 23, 2026
ff3ac59
docs: refresh community events
dynamo-ops Sep 23, 2026
80ae002
perf(frontend): avoid JSON round-trip for chunk metrics (#15115)
xianlubird Sep 23, 2026
a2e7da3
ci: retry transient compliance export failures (#14694)
xianlubird Sep 23, 2026
0fac8e8
fix(ci): harden DGDR profiling against disk pressure (#15034)
xianlubird Sep 23, 2026
1057726
perf(mocker): disable worker launch staggering by default (#15211)
jthomson04 Sep 23, 2026
4d60b59
docs(readme): give SGLang and vLLM equal quickstart examples (#15220)
alec-flowers Sep 23, 2026
cde7c9a
feat(router): ship ThunderAgent as a builtin plugin (#15164)
ishandhanani Sep 23, 2026
ad8778f
docs: refresh community events
dynamo-ops Sep 23, 2026
a83ba19
chore: Remove Defunct Triton Example (#15170)
whoisj Sep 23, 2026
7472c23
feat(vllm): add external encoder handoff (#13293)
furionw Sep 23, 2026
9ae086b
feat(multimodal): shared encoded-image cache with session scoping (#1…
ywang96 Sep 23, 2026
b759f3d
fix(tests): resolve AISimulate from NVIDIA index in wheel smoke tests…
glamr-agent Sep 23, 2026
d4866f9
docs(trtllm): correct the UCX env-var note and warn off the EFA host …
dagil-nvidia Sep 23, 2026
cdb5c54
test(frontend): fix SGLang metrics reasoning stub (#15238)
rmccorm4 Sep 23, 2026
00f0f59
fix(frontend): forward tool-message media in Python chat processors (…
sherlockwu Sep 23, 2026
a6a2001
chore: bump trtllm to v1.3.0rc27 (#15060)
dynamo-ops Sep 24, 2026
1584588
fix(sglang): gate auto tool-call grammars on reasoning (#15227)
sherlockwu Sep 24, 2026
2be370d
fix(frontend): align DeepSeek V4.1 tool image order (#15097)
alexeldeib Sep 24, 2026
db998b5
fix(sglang): pass the prefill dp rank to sglang decode (#15246)
peilii Sep 24, 2026
563d3d0
fix(trtllm): enable forward-pass metrics via the shared FPM opt-in (#…
jorgeantonio21 Sep 24, 2026
cfbd80c
fix(runtime): carry typed pre-stream errors on QUIC response plane
Prudctual Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 4 additions & 6 deletions .github/actions/compliance-extract/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,6 @@ runs:
GIT_SHA: ${{ inputs.git_sha }}
EPP_IMAGE: ${{ inputs.epp_image }}
run: |
mkdir -p /tmp/compliance
# Reuse the warm cache the build just populated by matching ALL the
# cache-key-affecting build-args the build passed. Otherwise the shared
# stages rebuild here instead of cache-hitting:
Expand Down Expand Up @@ -174,7 +173,8 @@ runs:
# --build-arg (it would clear the ARG and reintroduce the failure).
EPP_IMAGE_ARG=""
[ -n "${EPP_IMAGE:-}" ] && EPP_IMAGE_ARG="--build-arg EPP_IMAGE=${EPP_IMAGE}"
docker buildx build \
bash "${{ github.action_path }}/extract-with-retry.sh" /tmp/compliance \
docker buildx build \
--builder ${{ inputs.builder_name }} \
--platform ${{ inputs.platform }} \
--target compliance_artifact \
Expand All @@ -183,7 +183,6 @@ runs:
--build-arg SCCACHE_BUCKET="${SCCACHE_BUCKET}" \
--build-arg SCCACHE_REGION="${SCCACHE_REGION}" \
$EPP_IMAGE_ARG \
--output type=local,dest=/tmp/compliance \
--progress=plain \
-f "${DOCKERFILE_PATH}" \
$SECRET_ARGS \
Expand Down Expand Up @@ -357,7 +356,6 @@ runs:
GIT_SHA: ${{ inputs.git_sha }}
EPP_IMAGE: ${{ inputs.epp_image }}
run: |
mkdir -p /tmp/sources
# ENABLE_SOURCE_ARCHIVAL=true to actually run sources_collect; the other
# build-args match the build so this shares the warm cache (same reason
# as the compliance_artifact extract above). Same IRSA secrets too, so a
Expand Down Expand Up @@ -385,7 +383,8 @@ runs:
# resolves the GC'd default staging tag. Empty for non-frontend targets.
EPP_IMAGE_ARG=""
[ -n "${EPP_IMAGE:-}" ] && EPP_IMAGE_ARG="--build-arg EPP_IMAGE=${EPP_IMAGE}"
docker buildx build \
bash "${{ github.action_path }}/extract-with-retry.sh" /tmp/sources \
docker buildx build \
--builder ${{ inputs.builder_name }} \
--platform ${{ inputs.platform }} \
--target sources_archive \
Expand All @@ -395,7 +394,6 @@ runs:
--build-arg SCCACHE_REGION="${SCCACHE_REGION}" \
--build-arg ENABLE_SOURCE_ARCHIVAL=true \
$EPP_IMAGE_ARG \
--output type=local,dest=/tmp/sources \
--progress=plain \
-f "${DOCKERFILE_PATH}" \
$SECRET_ARGS \
Expand Down
41 changes: 41 additions & 0 deletions .github/actions/compliance-extract/extract-with-retry.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

# Retry only transient BuildKit transport failures, preserving each attempt's log.
set -euo pipefail

destination=$1
shift
attempt_root=$(mktemp -d "${RUNNER_TEMP:-${TMPDIR:-/tmp}}/compliance-extract.XXXXXX")
echo "Compliance extraction logs: ${attempt_root}"

for attempt in 1 2 3; do
output="${attempt_root}/output-${attempt}"
log="${attempt_root}/attempt-${attempt}.log"
mkdir -p "$output"
status=0
"$@" --output "type=local,dest=${output}" 2>&1 | tee "$log" || status=$?
if [ "$status" -eq 0 ]; then
# Publish only a complete export; failed attempts never reach consumers.
rm -rf -- "$destination"
mv -- "$output" "$destination"
exit 0
fi
rm -rf -- "$output"

# Inspect the terminal build error, not earlier warnings or command output.
error=$(grep '^ERROR:' "$log" | tail -n 1 || true)
if printf '%s\n' "$error" | grep -Eiq \
'(process .*did not complete successfully|401 Unauthorized|403 Forbidden|denied:|manifest unknown)'; then
exit "$status"
fi
if [ "$attempt" -eq 3 ] || ! printf '%s\n' "$error" | grep -Eiq \
'(Unavailable:.*error reading from server: (unexpected )?EOF|connection reset by peer|transport is closing|unexpected status.*(502 Bad Gateway|503 Service Unavailable|504 Gateway Timeout))'; then
exit "$status"
fi
delay=10
[ "$attempt" -eq 2 ] && delay=30
echo "::warning::Compliance extraction attempt ${attempt}/3 failed with a transient transport error; retrying in ${delay}s"
sleep "$delay"
done
118 changes: 118 additions & 0 deletions .github/actions/compliance-extract/test_extract_with_retry.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

"""Exercise the real retry wrapper with a fake BuildKit command and sleep."""

import os
import subprocess
import tempfile
import unittest
from pathlib import Path

SCRIPT = Path(__file__).with_name("extract-with-retry.sh")
TRANSIENT = "ERROR: failed to build: failed to solve: Unavailable: error reading from server: EOF"


class ExtractRetryTest(unittest.TestCase):
def run_extract(self, errors):
with tempfile.TemporaryDirectory() as temp:
root = Path(temp)
for index, error in enumerate(errors, 1):
(root / f"error-{index}").write_text(error)
fake = root / "build"
fake.write_text(
"""#!/usr/bin/env bash
set -eu
count=0
[ ! -f "$STATE/count" ] || count=$(cat "$STATE/count")
count=$((count + 1))
echo "$count" > "$STATE/count"
for arg in "$@"; do
case "$arg" in type=local,dest=*) output=${arg#type=local,dest=} ;; esac
done
mkdir -p "$output"
echo "$count" > "$output/attempt-$count"
error="$STATE/error-$count"
if [ -s "$error" ]; then
cat "$error"
exit 7
fi
"""
)
fake.chmod(0o755)
sleep = root / "sleep"
sleep.write_text('#!/usr/bin/env bash\necho "$1" >> "$STATE/delays"\n')
sleep.chmod(0o755)
destination = root / "result"
env = dict(
os.environ,
STATE=temp,
RUNNER_TEMP=temp,
PATH=temp + os.pathsep + os.environ["PATH"],
)
result = subprocess.run(
["bash", str(SCRIPT), str(destination), str(fake)],
env=env,
capture_output=True,
text=True,
)
count = int((root / "count").read_text())
delays = (
(root / "delays").read_text().splitlines()
if (root / "delays").exists()
else []
)
files = sorted(p.name for p in destination.glob("*"))
logs = list(root.glob("compliance-extract.*/attempt-*.log"))
self.assertEqual(len(logs), count)
return result.returncode, count, delays, files

def test_success(self):
self.assertEqual(self.run_extract([""]), (0, 1, [], ["attempt-1"]))

def test_transient_recovers_without_partial_files(self):
self.assertEqual(
self.run_extract([TRANSIENT, ""]), (0, 2, ["10"], ["attempt-2"])
)

def test_exhaustion_preserves_failure(self):
self.assertEqual(self.run_extract([TRANSIENT] * 3), (7, 3, ["10", "30"], []))

def test_deterministic_errors_do_not_retry(self):
for error in [
"ERROR: failed to solve: process did not complete: exit code: 1",
"ERROR: failed to authorize: 401 Unauthorized",
"ERROR: manifest unknown",
"No solution found when resolving dependencies",
]:
with self.subTest(error=error):
self.assertEqual(self.run_extract([error]), (7, 1, [], []))

def test_earlier_transient_does_not_mask_terminal_failure(self):
self.assertEqual(
self.run_extract([TRANSIENT + "\nERROR: manifest unknown"]), (7, 1, [], [])
)

def test_other_transport_errors_recover(self):
for error in [
"ERROR: failed to solve: connection reset by peer",
"ERROR: failed to solve: rpc error: transport is closing",
"ERROR: failed to solve: unexpected status from HEAD request: 503 Service Unavailable",
]:
with self.subTest(error=error):
self.assertEqual(
self.run_extract([error, ""]), (0, 2, ["10"], ["attempt-2"])
)

def test_build_command_containing_transport_text_does_not_retry(self):
error = 'ERROR: process "echo connection reset by peer" did not complete successfully: exit code: 1'
self.assertEqual(self.run_extract([error]), (7, 1, [], []))

def test_permanent_error_after_retry_stops(self):
self.assertEqual(
self.run_extract([TRANSIENT, "ERROR: manifest unknown"]), (7, 2, ["10"], [])
)


if __name__ == "__main__":
unittest.main()
3 changes: 3 additions & 0 deletions .github/actions/connect-vcluster/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -167,5 +167,8 @@ runs:
fi

KUBECONFIG_B64=$(base64 < "${KUBECONFIG_PATH}" | tr -d '\n')
# Masked before export: the value carries a vCluster client certificate,
# and every consumer interpolates it into a shell script.
echo "::add-mask::${KUBECONFIG_B64}"
echo "kubeconfig_base64=${KUBECONFIG_B64}" >> $GITHUB_OUTPUT
echo "::endgroup::"
43 changes: 42 additions & 1 deletion .github/actions/pytest-local/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,19 @@ runs:
# Artifacts go to the GitHub Actions checkout so the per-job upload in
# shared-test.yml can find them.
TEST_RESULTS_DIR="${GITHUB_WORKSPACE}/test-results"
mkdir -p "${TEST_RESULTS_DIR}"
mkdir -p "${TEST_RESULTS_DIR}/status"
chmod 777 "${TEST_RESULTS_DIR}"
echo "📁 Test results will be saved to: ${TEST_RESULTS_DIR}"

# Emptied up front so the file read at the end of the job can only have
# come from this run of this stage. Truncated rather than removed: the
# distroless planner test image ships no rm (see the tool list in
# container/Dockerfile.test), and an empty file is the better signal
# anyway - absent means the stage never started, empty means it started
# and was cut off before recording an exit code.
STATUS_FILE="${TEST_RESULTS_DIR}/status/${STR_TEST_TYPE}.exitcode"
: > "${STATUS_FILE}"

# NVMe guard: GPU runners mount ${NVME_DIR} (nvme-scratch emptyDir, NVMe-backed via
# instanceStorePolicy: RAID0). CPU/ARM runners have no ${NVME_DIR} mount.
if [[ -d "${NVME_DIR}" ]]; then
Expand Down Expand Up @@ -303,8 +312,40 @@ runs:
echo "⚠️ JUnit XML file not found - test results may not be available for upload"
fi

# Checked by "Verify test stages completed" in shared-test.yml, which
# cannot use the exit below or $GITHUB_ENV: a truncated script is still
# reported as a successful step and its $GITHUB_ENV writes are dropped.
# Keep this last - its absence is what proves the script was truncated.
echo "${TEST_EXIT_CODE}" > "${STATUS_FILE}"

exit ${TEST_EXIT_CODE}

# conftest.py's autouse `logger` fixture writes every test's full root-logger
# output (ManagedProcess/EngineProcess health-check status, retry reasons,
# subprocess log tails, ...) to /tmp/dynamo_tests/<test-name>/test.log.txt --
# a much richer trace than the JUnit XML's truncated captured-output, but
# nothing ever uploaded it. failure()-gated (not always()) to keep this
# opt-in-by-outcome: pytest-local is shared by every framework's CI, and
# most runs pass.
- name: Collect per-test log files
if: failure()
shell: bash
run: |
set -euo pipefail
mkdir -p test-results/dynamo-tests-logs
if [ -d /tmp/dynamo_tests ]; then
cp -r /tmp/dynamo_tests/. test-results/dynamo-tests-logs/
fi

- name: Upload per-test log files
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: failure()
with:
name: dynamo-tests-logs-${{ inputs.test_suite_name }}-${{ inputs.test_type }}-${{ inputs.platform_arch }}-${{ github.run_id }}-${{ job.check_run_id }}
path: test-results/dynamo-tests-logs/
retention-days: 7
if-no-files-found: ignore

# Allure results and coverage data are uploaded per stage, under the same
# artifact names as before the step collapse, because an external CI-metrics
# pipeline consumes them by name. `always()` because the step above exits
Expand Down
8 changes: 2 additions & 6 deletions .github/codeowners/areas.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,6 @@ areas:
- components/src/dynamo/common/utils/
- components/src/dynamo/experimental/
- examples/backends/sample/
- examples/backends/tritonserver/
- examples/common/
- examples/custom_backend/
- lib/backend-common/
Expand Down Expand Up @@ -459,6 +458,7 @@ areas:
github_team: '@ai-dynamo/dynamo-rl-codeowners'
path_globs:
- components/src/dynamo/common/rl/
- examples/rl/
- lib/rl/
- tests/rl/
- label: performance
Expand Down Expand Up @@ -1063,7 +1063,7 @@ shared:
owners:
- router
- kv-memory
- glob: lib/llm/src/preprocessor/lightseek_mm.rs
- glob: lib/llm/src/preprocessor/mm_routing/
owners:
- frontend
- multimodal
Expand Down Expand Up @@ -1275,10 +1275,6 @@ shared:
owners:
- ops
- backend-vllm
- glob: examples/backends/tritonserver/Dockerfile
owners:
- runtime
- ops
- glob: examples/diffusers/Dockerfile
owners:
- diffusion
Expand Down
1 change: 1 addition & 0 deletions .github/filters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,7 @@ sidecar:
# acceptable CI fan-out is agreed. Keep the remaining scope narrow for now.
- 'lib/sidecar/**'
- '.github/workflows/shared-build-sidecar.yml'
- 'tests/serve/test_sidecar.py'
- 'Cargo.toml'
- 'Cargo.lock'
# Compliance policy and baseline changes can fail the sidecar image build.
Expand Down
Loading
Loading