Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a37a9af
feat(sidecar): add e2e CI testing for sidecar launch scripts
tanmayv25 Sep 9, 2026
493bc7a
fix(sidecar): unblock CI and address review comments
tanmayv25 Sep 9, 2026
92d697c
fix(sidecar): fix image-build permission bug, improve sglang timeout …
tanmayv25 Sep 9, 2026
0c27d61
fix(sidecar): refresh baked-in launch scripts, harden shell injection…
tanmayv25 Sep 9, 2026
6111087
fix(sidecar): stop trusting a pre-set DYNAMO_HOME in launch scripts
tanmayv25 Sep 10, 2026
7190391
diag(tests): dump log tail on health-check timeout, not just on proce…
tanmayv25 Sep 10, 2026
33dd869
fix(sidecar): surface silent gRPC connection/health-check retry loops
tanmayv25 Sep 10, 2026
16f466e
ci(sidecar): install sidecar binaries into the backend's own test image
tanmayv25 Sep 10, 2026
fd937b3
ci(nightly): note the duplicated sidecar-marker exclusion as a TODO
tanmayv25 Sep 10, 2026
66b48b3
fix(ci): remove dangling needs on deleted sidecar-*-test-image jobs
tanmayv25 Sep 10, 2026
a4af4eb
ci(sidecar): scope GITHUB_TOKEN permissions on sidecar-*-test jobs
tanmayv25 Sep 10, 2026
f25a7f8
fix(ci): extract sidecar binaries via buildx local output, not docker cp
tanmayv25 Sep 11, 2026
6d65c65
ci: retrigger sidecar build (retry after suspected stale BuildKit cache)
tanmayv25 Sep 11, 2026
b0148ae
ci(sidecar): raise sidecar-build timeout to 90m
tanmayv25 Sep 11, 2026
ba0f2a5
fix(tests): surface real health-check failures, fix timeout margin
tanmayv25 Sep 11, 2026
668642c
fix(tests): surface HTTP response body in sidecar health-check failures
tanmayv25 Sep 11, 2026
f83dd17
ci: upload per-test log files on failure
tanmayv25 Sep 11, 2026
75ba58f
fix(trtllm): pin smg-grpc-proto to the version its proto was vendored…
tanmayv25 Sep 14, 2026
f3cf555
Merge remote-tracking branch 'origin/main' into worktree-e2e-sidecar-…
tanmayv25 Sep 14, 2026
421d618
ci: retrigger after merge (investigating pr.yaml startup_failure)
tanmayv25 Sep 14, 2026
6cfbb7e
fix(ci): add now-required framework: input to sidecar-*-test jobs
tanmayv25 Sep 14, 2026
4d37377
fix(sidecar): preserve vllm runtime setup in e2e tests
JulienDarve Sep 15, 2026
05ba5d3
fix(trtllm): make the smg-grpc-proto pin guard version-aware
tanmayv25 Sep 16, 2026
9550d60
fix(sidecar): fix pre-init logging gap and backend-failure fallback m…
tanmayv25 Sep 16, 2026
388c386
fix(sidecar): fix pre-init retry logging for vLLM, restore structured
tanmayv25 Sep 16, 2026
0dcb147
fix(sidecar): keep the error cause chain on the bootstrap-path retry log
tanmayv25 Sep 17, 2026
d95f932
fix(sidecar): keep the error cause chain on SGLang's connect retry path
tanmayv25 Sep 17, 2026
ac02b09
Merge branch 'main' into worktree-e2e-sidecar-tests
tanmayv25 Sep 17, 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
1 change: 1 addition & 0 deletions .github/filters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,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'
# Compliance policy and baseline changes can fail the sidecar image build.
- 'container/compliance/**'
- '!**/*.md'
Expand Down
18 changes: 12 additions & 6 deletions .github/workflows/nightly-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,13 @@ jobs:
enable_coverage: true
run_cpu_only_tests: true
cpu_only_test_markers: vllm and gpu_0
gpu_test_markers: vllm and gpu_1
# not sidecar: sidecar-marked tests need the dynamo-vllm-sidecar binary
# installed (see pr.yaml's sidecar-vllm-test), which this plain
# vllm-runtime image doesn't have.
# TODO: this ad-hoc exclusion is duplicated across pr.yaml, post-merge-ci.yml,
# and nightly-ci.yml's gpu_test_markers; consolidate into shared-test.yml
# once there's a second marker that needs the same treatment.
gpu_test_markers: vllm and gpu_1 and not sidecar
Comment thread
tanmayv25 marked this conversation as resolved.
Resolved
gpu_test_timeout_minutes: 240
# Profiled tests run in the parallel stage; unprofiled fall through to sequential.
# 24 GiB admits all currently profiled vLLM tests (max is ~20.4 GiB) on a 48 GiB GPU.
Expand Down Expand Up @@ -887,7 +893,7 @@ jobs:
platform: '["amd64"]'
enable_coverage: true
run_sanity_check: false
gpu_test_markers: vllm and (gpu_1 or gpu_2)
gpu_test_markers: vllm and (gpu_1 or gpu_2) and not sidecar
gpu_test_timeout_minutes: 240
# 80 GiB H100 admits more of the profiled pool per slot than the 24 GiB lanes.
run_gpu_parallel_tests: true
Expand All @@ -914,7 +920,7 @@ jobs:
run_cpu_only_tests: true
cpu_only_test_markers: sglang and gpu_0
# Exclude h100 tests: they need >24 GiB and run on the sglang-h100-test lane below.
gpu_test_markers: sglang and gpu_1 and not h100
gpu_test_markers: sglang and gpu_1 and not h100 and not sidecar
gpu_test_timeout_minutes: 240
# Profiled tests run in the VRAM-aware GPU stage; unprofiled fall through to sequential.
# Current single-GPU runners are 24 GiB, so this cap admits the profiled SGLang pool
Expand Down Expand Up @@ -986,7 +992,7 @@ jobs:
platform: '["amd64"]'
enable_coverage: true
run_sanity_check: false
gpu_test_markers: sglang and (gpu_1 or gpu_2)
gpu_test_markers: sglang and (gpu_1 or gpu_2) and not sidecar
gpu_test_timeout_minutes: 240
# 80 GiB H100 admits more of the profiled pool per slot than the 24 GiB lanes.
run_gpu_parallel_tests: true
Expand All @@ -1012,7 +1018,7 @@ jobs:
enable_coverage: true
run_cpu_only_tests: true
cpu_only_test_markers: trtllm and gpu_0
gpu_test_markers: trtllm and gpu_1
gpu_test_markers: trtllm and gpu_1 and not sidecar
gpu_test_timeout_minutes: 240
# Profiled tests run in the VRAM-aware GPU stage; unprofiled fall through to sequential.
# Current single-GPU runners are 24 GiB, so this cap admits the profiled TRT-LLM pool
Expand Down Expand Up @@ -1062,7 +1068,7 @@ jobs:
platform: '["amd64"]'
enable_coverage: true
run_sanity_check: false
gpu_test_markers: trtllm and (gpu_1 or gpu_2)
gpu_test_markers: trtllm and (gpu_1 or gpu_2) and not sidecar
gpu_test_timeout_minutes: 240
# 80 GiB H100 admits more of the profiled pool per slot than the 24 GiB lanes.
run_gpu_parallel_tests: true
Expand Down
27 changes: 24 additions & 3 deletions .github/workflows/post-merge-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,10 @@ jobs:
extra_tags: |
${{ github.ref_name == 'main' && 'main-vllm-runtime' || '' }}
${{ github.ref_name == 'main' && format('main-vllm-runtime-{0}', github.sha) || '' }}
# Lets sidecar-vllm-test-image (pr.yaml) layer onto the latest main -test
# image instead of rebuilding vllm-runtime on every lib/sidecar/**-only PR.
test_extra_tags: |
${{ github.ref_name == 'main' && 'main-vllm-runtime-test' || '' }}
archive_sources: false
secrets: inherit

Expand Down Expand Up @@ -279,6 +283,10 @@ jobs:
extra_tags: |
${{ github.ref_name == 'main' && 'main-sglang-runtime' || '' }}
${{ github.ref_name == 'main' && format('main-sglang-runtime-{0}', github.sha) || '' }}
# Lets sidecar-sglang-test-image (pr.yaml) layer onto the latest main -test
# image instead of rebuilding sglang-runtime on every lib/sidecar/**-only PR.
test_extra_tags: |
${{ github.ref_name == 'main' && 'main-sglang-runtime-test' || '' }}
archive_sources: false
secrets: inherit

Expand Down Expand Up @@ -344,6 +352,10 @@ jobs:
extra_tags: |
${{ github.ref_name == 'main' && 'main-trtllm-runtime' || '' }}
${{ github.ref_name == 'main' && format('main-trtllm-runtime-{0}', github.sha) || '' }}
# Lets sidecar-trtllm-test-image (pr.yaml) layer onto the latest main -test
# image instead of rebuilding trtllm-runtime on every lib/sidecar/**-only PR.
test_extra_tags: |
${{ github.ref_name == 'main' && 'main-trtllm-runtime-test' || '' }}
archive_sources: false
secrets: inherit

Expand Down Expand Up @@ -452,7 +464,10 @@ jobs:
platform: '["amd64", "arm64"]' # arm64 for CPU tests, single GPU tests are skipped
run_cpu_only_tests: true
cpu_only_test_markers: '(pre_merge or post_merge) and vllm and gpu_0'
gpu_test_markers: '(pre_merge or post_merge) and vllm and gpu_1'
# not sidecar: sidecar-marked tests need dynamo-vllm-sidecar layered onto
# the image (see pr.yaml's sidecar-vllm-test), which this plain
# vllm-runtime image doesn't have.
gpu_test_markers: '(pre_merge or post_merge) and vllm and gpu_1 and not sidecar'
gpu_test_timeout_minutes: 120
# Profiled tests (those carrying @pytest.mark.profiled_vram_gib(N)) run concurrently in
# the parallel stage; the rest fall through to the sequential stage. 24 GiB admits all
Expand Down Expand Up @@ -550,7 +565,10 @@ jobs:
platform: '["amd64", "arm64"]' # arm64 for CPU tests, single GPU tests are skipped
run_cpu_only_tests: true
cpu_only_test_markers: '(pre_merge or post_merge) and sglang and gpu_0'
gpu_test_markers: '(pre_merge or post_merge) and sglang and gpu_1'
# not sidecar: sidecar-marked tests need dynamo-sglang-sidecar layered
# onto the image (see pr.yaml's sidecar-sglang-test), which this plain
# sglang-runtime image doesn't have.
gpu_test_markers: '(pre_merge or post_merge) and sglang and gpu_1 and not sidecar'
gpu_test_timeout_minutes: 120
# Profiled tests run in the VRAM-aware GPU stage; unprofiled fall through to sequential.
# Current single-GPU runners are 24 GiB, so this cap admits the profiled SGLang pool
Expand Down Expand Up @@ -590,7 +608,10 @@ jobs:
platform: '["amd64", "arm64"]' # arm64 for CPU tests, single GPU tests are skipped
run_cpu_only_tests: true
cpu_only_test_markers: '(pre_merge or post_merge) and trtllm and gpu_0'
gpu_test_markers: '(pre_merge or post_merge) and trtllm and gpu_1'
# not sidecar: sidecar-marked tests need dynamo-trtllm-sidecar layered
# onto the image (see pr.yaml's sidecar-trtllm-test), which this plain
# trtllm-runtime image doesn't have.
gpu_test_markers: '(pre_merge or post_merge) and trtllm and gpu_1 and not sidecar'
gpu_test_timeout_minutes: 120
# Profiled tests run in the VRAM-aware GPU stage; unprofiled fall through to sequential.
# Current single-GPU runners are 24 GiB, so this cap admits the profiled TRT-LLM pool
Expand Down
94 changes: 91 additions & 3 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,12 @@
- snapshot-placeholder-trtllm
- power-agent
- sidecar-build
- sidecar-vllm-test-image
- sidecar-sglang-test-image
- sidecar-trtllm-test-image
- sidecar-vllm-test
- sidecar-sglang-test
- sidecar-trtllm-test
- vllm-build
- vllm-local-dev-build
- sglang-local-dev-build
Expand Down Expand Up @@ -358,14 +364,87 @@
diff_base_branch: ${{ needs.changed-files.outputs.base_ref }}
diff_merge_base_sha: ${{ needs.changed-files.outputs.merge_base_sha }}

# --------------------------------------------------------------------------
Comment thread
tanmayv25 marked this conversation as resolved.
Resolved
# Sidecar E2E: lib/sidecar/*/launch/agg.sh, run against the backend's own
# unmodified -test image (no CI-only derived image/extra push). shared-test.yml
# downloads the dynamo-*-sidecar binary sidecar-build already published as a
# workflow artifact and installs it via PATH before pytest runs. When the
# backend itself wasn't rebuilt (a lib/sidecar/**-only PR), source_ref falls
# back to the floating `main` tag for that backend's -test image. sidecar-build
# is gated identically to these jobs, so `needs.sidecar-build.result` is a
# genuine success/failure signal here, not a masked skip. gpu_1 fan-out is a
# deliberate exception to the narrow-scope TODO on the `sidecar` filter in
# .github/filters.yaml; revisit if CI cost becomes an issue.
# --------------------------------------------------------------------------

sidecar-vllm-test:
name: sidecar-runtime # This name overlaps with other sidecar jobs to group them in the UI
needs: [changed-files, vllm-build, sidecar-build]
if: ${{ !cancelled() && needs.changed-files.outputs.sidecar == 'true' && needs.sidecar-build.result == 'success' }}
uses: $/.github/workflows/shared-test.yml
with:
test_suite_name: vllm
test_type: Sidecar E2E Test
amd_runner: prod-tester-amd-gpu-v2
target_tag_plain: ${{ needs.vllm-build.result == 'success' && needs.vllm-build.outputs.target_tag_plain || 'vllm-runtime' }}
source_ref: ${{ needs.vllm-build.result == 'success' && github.sha || 'main' }}
cuda_version: '["13.0"]'
Comment thread
tanmayv25 marked this conversation as resolved.
Resolved
platform: '["amd64"]'
run_sanity_check: false
gpu_test_markers: pre_merge and sidecar and vllm and gpu_1
gpu_test_timeout_minutes: 45
sidecar_backend: vllm
sidecar_binary_artifact: ${{ needs.sidecar-build.outputs.binary_artifact }}
secrets: inherit

sidecar-sglang-test:
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
name: sidecar-runtime # This name overlaps with other sidecar jobs to group them in the UI
needs: [changed-files, sglang-build, sidecar-build]
if: ${{ !cancelled() && needs.changed-files.outputs.sidecar == 'true' && needs.sidecar-build.result == 'success' }}
uses: $/.github/workflows/shared-test.yml
with:
test_suite_name: sglang
test_type: Sidecar E2E Test
amd_runner: prod-tester-amd-gpu-v2
target_tag_plain: ${{ needs.sglang-build.result == 'success' && needs.sglang-build.outputs.target_tag_plain || 'sglang-runtime' }}
source_ref: ${{ needs.sglang-build.result == 'success' && github.sha || 'main' }}
cuda_version: '["13.0"]'
platform: '["amd64"]'
run_sanity_check: false
gpu_test_markers: pre_merge and sidecar and sglang and gpu_1
gpu_test_timeout_minutes: 45
sidecar_backend: sglang
sidecar_binary_artifact: ${{ needs.sidecar-build.outputs.binary_artifact }}
secrets: inherit

sidecar-trtllm-test:
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
name: sidecar-runtime # This name overlaps with other sidecar jobs to group them in the UI
needs: [changed-files, trtllm-build, sidecar-build]
if: ${{ !cancelled() && needs.changed-files.outputs.sidecar == 'true' && needs.sidecar-build.result == 'success' }}
uses: $/.github/workflows/shared-test.yml
with:
test_suite_name: trtllm
test_type: Sidecar E2E Test
amd_runner: prod-tester-amd-gpu-v2
target_tag_plain: ${{ needs.trtllm-build.result == 'success' && needs.trtllm-build.outputs.target_tag_plain || 'trtllm-runtime' }}
source_ref: ${{ needs.trtllm-build.result == 'success' && github.sha || 'main' }}
cuda_version: '["13.1"]'
platform: '["amd64"]'
run_sanity_check: false
gpu_test_markers: pre_merge and sidecar and trtllm and gpu_1
gpu_test_timeout_minutes: 45
sidecar_backend: trtllm
sidecar_binary_artifact: ${{ needs.sidecar-build.outputs.binary_artifact }}
secrets: inherit

# ============================================================================
# FRAMEWORK PIPELINES (Build → Test → Copy)
# ============================================================================
# ============================================================================
# BUILD PIPELINES
# ============================================================================

vllm-build:

Check warning

Code scanning / CodeQL

Workflow does not contain permissions Medium

Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {}
name: vllm-runtime # This name overlaps with other vllm jobs to group them in the UI
needs: [changed-files]
# `sample` is here because sample tests piggyback on this image and run as part of vllm-test.
Expand Down Expand Up @@ -795,7 +874,10 @@
# Keep the outer step budget above the test's 450s timeout so pytest can
# finish teardown and upload diagnostics instead of being killed first.
cpu_e2e_test_timeout_minutes: 15
gpu_test_markers: pre_merge and vllm and gpu_1
# not sidecar: sidecar-marked tests need dynamo-vllm-sidecar layered onto
# the image (see sidecar-vllm-test below), which this plain vllm-runtime
# image doesn't have.
gpu_test_markers: pre_merge and vllm and gpu_1 and not sidecar
gpu_test_timeout_minutes: 45
# Profiled tests run in the parallel stage; unprofiled fall through to sequential.
# 24 GiB admits all currently profiled vLLM tests (max is ~20.4 GiB) on a 48 GiB GPU.
Expand Down Expand Up @@ -838,7 +920,10 @@
platform: '["amd64", "arm64"]' # arm64 for CPU tests, single GPU tests are skipped
run_cpu_only_tests: true
cpu_only_test_markers: pre_merge and sglang and gpu_0
gpu_test_markers: pre_merge and sglang and gpu_1
# not sidecar: sidecar-marked tests need dynamo-sglang-sidecar layered
# onto the image (see sidecar-sglang-test below), which this plain
# sglang-runtime image doesn't have.
gpu_test_markers: pre_merge and sglang and gpu_1 and not sidecar
# Profiled tests run in the VRAM-aware GPU stage; unprofiled fall through to sequential.
# Current single-GPU runners are 24 GiB, so this cap admits the profiled SGLang pool
# while yielding one auto slot today. Larger runners will get more slots from the same markers.
Expand Down Expand Up @@ -881,7 +966,10 @@
platform: '["amd64", "arm64"]' # arm64 for CPU tests, single GPU tests are skipped
run_cpu_only_tests: true
cpu_only_test_markers: pre_merge and trtllm and gpu_0
gpu_test_markers: pre_merge and trtllm and gpu_1
# not sidecar: sidecar-marked tests need dynamo-trtllm-sidecar layered
# onto the image (see sidecar-trtllm-test below), which this plain
# trtllm-runtime image doesn't have.
gpu_test_markers: pre_merge and trtllm and gpu_1 and not sidecar
# Profiled tests run in the VRAM-aware GPU stage; unprofiled fall through to sequential.
# Current single-GPU runners are 24 GiB, so this cap admits the profiled TRT-LLM pool
# while yielding one auto slot today. Larger runners will get more slots from the same markers.
Expand Down
26 changes: 24 additions & 2 deletions .github/workflows/shared-build-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ on:
required: false
type: string
default: ''
test_extra_tags:
description: 'Additional tags for the -test image only (newline-separated plain tag names, no ECR prefix). Unlike extra_tags (runtime image), the -test image otherwise gets no floating tag.'
Comment thread
tanmayv25 marked this conversation as resolved.
Resolved
required: false
type: string
default: ''
no_cache:
description: 'Disable Docker build cache'
required: false
Expand Down Expand Up @@ -603,6 +608,14 @@ jobs:
- name: Build and Push Test Image
if: ${{ !inputs.compliance_only && inputs.target != 'dev' && inputs.target != 'local-dev' && inputs.target != 'frontend' }}
shell: bash
env:
ECR_REGISTRY: ${{ vars.ECR_REGISTRY }}
ECR_REPOSITORY: ${{ vars.ECR_REPOSITORY }}
TEST_EXTRA_TAGS: ${{ inputs.test_extra_tags }}
# Routed through env (not inlined via ${{ }}) so a value containing
# shell metacharacters can't be interpreted as script rather than data.
IMAGE_URI: ${{ steps.calculate-target-tag.outputs.image_uri }}
TEST_IMAGE_URI: ${{ steps.calculate-target-tag.outputs.test_image_uri }}
run: |
PUSH_ARGS=""
if [ "${{ inputs.push_image }}" == "true" ]; then
Expand Down Expand Up @@ -630,6 +643,15 @@ jobs:
PYPI_SECRET_ARGS+=(--secret "id=pypi-netrc,src=${NETRC}")
fi

TEST_TAG_ARGS=(-t "${TEST_IMAGE_URI}")
if [ -n "$TEST_EXTRA_TAGS" ]; then
while IFS= read -r tag; do
if [ -n "$tag" ]; then
TEST_TAG_ARGS+=(-t "${ECR_REGISTRY}/${ECR_REPOSITORY}:${tag}")
fi
done <<< "$TEST_EXTRA_TAGS"
fi

docker buildx build \
--progress=plain \
${PUSH_ARGS} \
Expand All @@ -638,8 +660,8 @@ jobs:
--platform ${{ inputs.platform }} \
--target ${TEST_TARGET} \
-f container/Dockerfile.test \
--build-arg BASE_IMAGE=${{ steps.calculate-target-tag.outputs.image_uri }} \
-t ${{ steps.calculate-target-tag.outputs.test_image_uri }} .
--build-arg BASE_IMAGE="${IMAGE_URI}" \
"${TEST_TAG_ARGS[@]}" .
- name: Show summary
shell: bash
if: ${{ inputs.push_image == 'true' && inputs.show_summary == 'true' }}
Expand Down
39 changes: 39 additions & 0 deletions .github/workflows/shared-build-sidecar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ on:
required: false
type: string
default: ''
outputs:
target_tag_plain:
description: 'Plain sidecar image tag prefix'
value: ${{ jobs.build.outputs.target_tag_plain }}
binary_artifact:
description: 'Name of the workflow artifact containing the amd64 dynamo-*-sidecar binaries'
value: ${{ jobs.build.outputs.binary_artifact }}

jobs:
build:
Expand All @@ -54,6 +61,9 @@ jobs:
permissions:
actions: read
contents: read
outputs:
target_tag_plain: ${{ steps.calculate-target-tag.outputs.target_tag_plain }}
binary_artifact: ${{ steps.binary-artifact.outputs.name }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down Expand Up @@ -123,6 +133,35 @@ jobs:
no_load: true
use_sccache: false

# No derived per-backend test image: shared-test.yml pulls the backend's
# own -test image unmodified and installs the sidecar binary from this
# artifact via PATH (see shared-test.yml's sidecar_binary_artifact
# input). amd64-only: sidecar tests only run on amd64 GPU runners.
- name: Extract sidecar binaries (amd64)
id: binary-artifact
shell: bash
env:
IMAGE_URI: ${{ steps.calculate-target-tag.outputs.image_uri }}
run: |
set -euo pipefail
docker pull --platform linux/amd64 "${IMAGE_URI}"
cid=$(docker create --platform linux/amd64 "${IMAGE_URI}")
trap 'docker rm -f "${cid}" >/dev/null 2>&1 || true' EXIT
mkdir -p sidecar-binaries
for backend in vllm sglang trtllm; do
docker cp "${cid}:/usr/local/bin/dynamo-${backend}-sidecar" \
"sidecar-binaries/dynamo-${backend}-sidecar"
done
name="dynamo-sidecar-binaries-${GITHUB_SHA}"
echo "name=${name}" >> "${GITHUB_OUTPUT}"

- name: Upload sidecar binaries
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: ${{ steps.binary-artifact.outputs.name }}
path: sidecar-binaries/
retention-days: 7

- name: Resolve diff baseline
id: resolve-diff-base
if: ${{ inputs.diff_event_context != '' }}
Expand Down
Loading
Loading