[CI] replace shellcheck script with shellcheck-py hook (#52572)

Signed-off-by: Turner <doubleujabbour@gmail.com> Signed-off-by: Turner Jabbour <doubleujabbour@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

Turner Jabbour committed Aug 20, 2026 at 04:09 UTC 1eab6fef01b78ec4eab6b7156bbf5f120e48d381
20 files changed +201 -194
.buildkite/scripts/ci-fetch-log.sh
+1
@@ -143,6 +143,7 @@ fi
143 # Build-wide mode: fetch finished jobs matching $SCOPE.
144 [ -z "$OUT" ] || die "[output_file] is only valid when fetching a single job."
145
146 +# shellcheck disable=SC2016 # single-quoted: these are awk field refs ($3/$4/$5), not shell vars
147 case "$SCOPE" in
148 failed) FILTER='$3 == "True" && $4 == "False" && $5 == "True"' ;;
149 soft) FILTER='$3 == "True" && $5 == "True"' ;;
.buildkite/scripts/docker-build-metadata-args.sh
+1 -1
@@ -29,7 +29,7 @@ if [[ -n "${BUILDKITE:-}" || -n "${BUILDKITE_COMMIT:-}" ]]; then
29 image_tag="${image_name}:nightly-${tag_commit}"
30 elif [[ "${variant}" == cu* ]]; then
31 cuda_variant="${variant%%-*}"
32 - remaining_variant="${variant#${cuda_variant}}"
32 + remaining_variant="${variant#"${cuda_variant}"}"
33 image_tag="${image_name}:${cuda_variant}-nightly-${tag_commit}${remaining_variant}"
34 else
35 image_tag="${image_name}:nightly-${tag_commit}${variant_suffix}"
.buildkite/scripts/hardware_ci/run-amd-test.sh
+15 -4
@@ -1,5 +1,11 @@
1 #!/bin/bash
2
3 +# shellcheck disable=SC2329 # Every function in this file is only ever reached
4 +# transitively through handle_amd_runner_exit, the EXIT trap handler - shellcheck's
5 +# unused-function check doesn't do full reachability analysis from an indirectly
6 +# invoked entry point, so it flags the whole diagnostic-collection call chain as
7 +# dead code even though it runs live on every nonzero exit.
8 +
9 # This script runs ROCm tests either directly in a native CI pod or inside the
10 # corresponding Docker container. Multi-node tests continue to use Docker.
11 #
@@ -1523,13 +1529,15 @@ fi
1529 clear_ci_orchestration_env
1530 if is_multi_node "$commands"; then
1531 echo "--- Multi-node job detected"
1526 - export DCKR_VER=$(docker --version | sed 's/Docker version \(.*\), build .*/\1/')
1532 + DCKR_VER=$(docker --version | sed 's/Docker version \(.*\), build .*/\1/')
1533 + export DCKR_VER
1534
1535 # Parse the bracket syntax: prefix ; [node0_cmds] && [node1_cmds]
1536 # BASH_REMATCH[1] = prefix (everything before first bracket)
1537 # BASH_REMATCH[2] = comma-separated node0 commands
1538 # BASH_REMATCH[3] = comma-separated node1 commands
1539 if [[ "$commands" =~ ^(.*)\[(.*)"] && ["(.*)\]$ ]]; then
1540 + # shellcheck disable=SC2001 # verified equivalent behavior; TODO: switch to param expansion in a follow-up cleanup PR
1541 prefix=$(echo "${BASH_REMATCH[1]}" | sed 's/;//g')
1542 echo "PREFIX: ${prefix}"
1543
@@ -1545,7 +1553,9 @@ if is_multi_node "$commands"; then
1553 fi
1554
1555 for i in "${!node0[@]}"; do
1556 + # shellcheck disable=SC2001 # verified equivalent behavior; TODO: switch to param expansion in a follow-up cleanup PR
1557 command_node_0=$(echo "${node0[i]}" | sed 's/\"//g')
1558 + # shellcheck disable=SC2001 # verified equivalent behavior; TODO: switch to param expansion in a follow-up cleanup PR
1559 command_node_1=$(echo "${node1[i]}" | sed 's/\"//g')
1560
1561 step_cmd="./.buildkite/scripts/run-multi-node-test.sh /vllm-workspace/tests 2 2 ${image_name} '${command_node_0}' '${command_node_1}'"
@@ -1581,14 +1591,15 @@ else
1591 ulimit_core_hard="-1"
1592 fi
1593 # Disable core dumps in the ROCm test container unless the ROCm debug agent is enabled
1584 - coredump_flags="--ulimit core=0:$ulimit_core_hard"
1594 + coredump_flags=(--ulimit "core=0:$ulimit_core_hard")
1595 if [[ "$commands" == *"ROCm debug agent enabled"* ]]; then
1596 # Works around https://github.com/rocm/rocm-systems/issues/6206
1587 - coredump_flags='-e HSA_COREDUMP_PATTERN="/tmp/gpucore.%p"'
1597 + coredump_flags=(-e 'HSA_COREDUMP_PATTERN="/tmp/gpucore.%p"')
1598 else
1599 echo "ROCm debug agent not enabled, coredumps are disabled in the test container."
1600 fi
1601
1602 + # shellcheck disable=SC2086 # word splitting is intentional: both hold multiple docker flags
1603 docker run \
1604 "${docker_run_terminal_args[@]}" \
1605 --device /dev/kfd $BUILDKITE_AGENT_META_DATA_RENDER_DEVICES \
@@ -1597,7 +1608,7 @@ else
1608 --shm-size=16gb \
1609 --group-add "$render_gid" \
1610 --rm \
1600 - $coredump_flags \
1611 + "${coredump_flags[@]}" \
1612 -e HF_TOKEN \
1613 -e "HF_HUB_DOWNLOAD_TIMEOUT=${HF_HUB_DOWNLOAD_TIMEOUT}" \
1614 -e "HF_HUB_ETAG_TIMEOUT=${HF_HUB_ETAG_TIMEOUT}" \
.buildkite/scripts/publish-release-images.sh
+66 -66
@@ -42,97 +42,97 @@ aws ecr-public get-login-password --region us-east-1 | \
42 # ---- CUDA (default: 13.0) ----
43
44 if target_enabled cuda-13-0; then
45 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64
46 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64
45 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64"
46 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64"
47
48 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64 vllm/vllm-openai:latest-x86_64
49 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64
48 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64" vllm/vllm-openai:latest-x86_64
49 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64"
50 docker push vllm/vllm-openai:latest-x86_64
51 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64
51 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64"
52
53 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64 vllm/vllm-openai:latest-aarch64
54 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64
53 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64" vllm/vllm-openai:latest-aarch64
54 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64"
55 docker push vllm/vllm-openai:latest-aarch64
56 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64
56 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64"
57
58 docker manifest rm vllm/vllm-openai:latest || true
59 - docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION} || true
59 + docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}" || true
60 docker manifest create vllm/vllm-openai:latest vllm/vllm-openai:latest-x86_64 vllm/vllm-openai:latest-aarch64
61 - docker manifest create vllm/vllm-openai:v${RELEASE_VERSION} vllm/vllm-openai:v${RELEASE_VERSION}-x86_64 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64
61 + docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64"
62 docker manifest push vllm/vllm-openai:latest
63 - docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}
63 + docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}"
64 fi
65
66 # ---- CUDA 12.9 ----
67
68 if target_enabled cuda-12-9; then
69 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129
70 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129
69 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129"
70 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129"
71
72 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129 vllm/vllm-openai:latest-x86_64-cu129
73 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129
72 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129" vllm/vllm-openai:latest-x86_64-cu129
73 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129"
74 docker push vllm/vllm-openai:latest-x86_64-cu129
75 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129
75 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129"
76
77 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129 vllm/vllm-openai:latest-aarch64-cu129
78 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129
77 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129" vllm/vllm-openai:latest-aarch64-cu129
78 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129"
79 docker push vllm/vllm-openai:latest-aarch64-cu129
80 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129
80 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129"
81
82 docker manifest rm vllm/vllm-openai:latest-cu129 || true
83 - docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION}-cu129 || true
83 + docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}-cu129" || true
84 docker manifest create vllm/vllm-openai:latest-cu129 vllm/vllm-openai:latest-x86_64-cu129 vllm/vllm-openai:latest-aarch64-cu129
85 - docker manifest create vllm/vllm-openai:v${RELEASE_VERSION}-cu129 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129
85 + docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129"
86 docker manifest push vllm/vllm-openai:latest-cu129
87 - docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}-cu129
87 + docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}-cu129"
88 fi
89
90 # ---- Ubuntu 24.04 (CUDA 13.0) ----
91
92 if target_enabled cuda-13-0-ubuntu-24-04; then
93 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404
94 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404
93 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404"
94 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404"
95
96 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404 vllm/vllm-openai:latest-x86_64-ubuntu2404
97 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404
96 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404" vllm/vllm-openai:latest-x86_64-ubuntu2404
97 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404"
98 docker push vllm/vllm-openai:latest-x86_64-ubuntu2404
99 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404
99 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404"
100
101 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404 vllm/vllm-openai:latest-aarch64-ubuntu2404
102 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404
101 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404" vllm/vllm-openai:latest-aarch64-ubuntu2404
102 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404"
103 docker push vllm/vllm-openai:latest-aarch64-ubuntu2404
104 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404
104 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404"
105
106 docker manifest rm vllm/vllm-openai:latest-ubuntu2404 || true
107 - docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404 || true
107 + docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404" || true
108 docker manifest create vllm/vllm-openai:latest-ubuntu2404 vllm/vllm-openai:latest-x86_64-ubuntu2404 vllm/vllm-openai:latest-aarch64-ubuntu2404
109 - docker manifest create vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404
109 + docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-ubuntu2404"
110 docker manifest push vllm/vllm-openai:latest-ubuntu2404
111 - docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404
111 + docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}-ubuntu2404"
112 fi
113
114 # ---- Ubuntu 24.04 (CUDA 12.9) ----
115
116 if target_enabled cuda-12-9-ubuntu-24-04; then
117 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404
118 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404
117 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404"
118 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404"
119
120 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404 vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404
121 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404
120 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404" vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404
121 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404"
122 docker push vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404
123 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404
123 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404"
124
125 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404 vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404
126 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404
125 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404" vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404
126 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-aarch64-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404"
127 docker push vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404
128 - docker push vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404
128 + docker push "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404"
129
130 docker manifest rm vllm/vllm-openai:latest-cu129-ubuntu2404 || true
131 - docker manifest rm vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404 || true
131 + docker manifest rm "vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404" || true
132 docker manifest create vllm/vllm-openai:latest-cu129-ubuntu2404 vllm/vllm-openai:latest-x86_64-cu129-ubuntu2404 vllm/vllm-openai:latest-aarch64-cu129-ubuntu2404
133 - docker manifest create vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404 vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404
133 + docker manifest create "vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-x86_64-cu129-ubuntu2404" "vllm/vllm-openai:v${RELEASE_VERSION}-aarch64-cu129-ubuntu2404"
134 docker manifest push vllm/vllm-openai:latest-cu129-ubuntu2404
135 - docker manifest push vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404
135 + docker manifest push "vllm/vllm-openai:v${RELEASE_VERSION}-cu129-ubuntu2404"
136 fi
137
138 # ---- ROCm ----
@@ -141,36 +141,36 @@ if target_enabled rocm; then
141 ROCM_BASE_CACHE_KEY=$(.buildkite/scripts/cache-rocm-base-wheels.sh key)
142 echo "ROCm base cache key: ${ROCM_BASE_CACHE_KEY}"
143
144 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm
145 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base
144 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm"
145 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base"
146
147 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm vllm/vllm-openai-rocm:latest
148 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm vllm/vllm-openai-rocm:v${RELEASE_VERSION}
147 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm" vllm/vllm-openai-rocm:latest
148 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-rocm" "vllm/vllm-openai-rocm:v${RELEASE_VERSION}"
149 docker push vllm/vllm-openai-rocm:latest
150 - docker push vllm/vllm-openai-rocm:v${RELEASE_VERSION}
150 + docker push "vllm/vllm-openai-rocm:v${RELEASE_VERSION}"
151
152 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base vllm/vllm-openai-rocm:latest-base
153 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base
152 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base" vllm/vllm-openai-rocm:latest-base
153 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${ROCM_BASE_CACHE_KEY}-rocm-base" "vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base"
154 docker push vllm/vllm-openai-rocm:latest-base
155 - docker push vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base
155 + docker push "vllm/vllm-openai-rocm:v${RELEASE_VERSION}-base"
156 fi
157
158 # ---- XPU ----
159
160 if target_enabled xpu; then
161 - docker pull public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu
161 + docker pull "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu"
162
163 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu vllm/vllm-openai-xpu:latest-x86_64
164 - docker tag public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64
163 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu" vllm/vllm-openai-xpu:latest-x86_64
164 + docker tag "public.ecr.aws/q9t5s3a7/vllm-release-repo:${COMMIT}-x86_64-xpu" "vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64"
165 docker push vllm/vllm-openai-xpu:latest-x86_64
166 - docker push vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64
166 + docker push "vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64"
167
168 docker manifest rm vllm/vllm-openai-xpu:latest || true
169 - docker manifest rm vllm/vllm-openai-xpu:v${RELEASE_VERSION} || true
169 + docker manifest rm "vllm/vllm-openai-xpu:v${RELEASE_VERSION}" || true
170 docker manifest create vllm/vllm-openai-xpu:latest vllm/vllm-openai-xpu:latest-x86_64 --amend
171 - docker manifest create vllm/vllm-openai-xpu:v${RELEASE_VERSION} vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64 --amend
171 + docker manifest create "vllm/vllm-openai-xpu:v${RELEASE_VERSION}" "vllm/vllm-openai-xpu:v${RELEASE_VERSION}-x86_64" --amend
172 docker manifest push vllm/vllm-openai-xpu:latest
173 - docker manifest push vllm/vllm-openai-xpu:v${RELEASE_VERSION}
173 + docker manifest push "vllm/vllm-openai-xpu:v${RELEASE_VERSION}"
174 fi
175
176 # ---- CPU ----
@@ -192,22 +192,22 @@ if target_enabled cpu; then
192 if [ "$CPU_X86_AVAILABLE" = "true" ] && [ "$CPU_ARM_AVAILABLE" = "true" ]; then
193 docker pull "${CPU_X86_TAG}"
194 docker tag "${CPU_X86_TAG}" vllm/vllm-openai-cpu:latest-x86_64
195 - docker tag "${CPU_X86_TAG}" vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64
195 + docker tag "${CPU_X86_TAG}" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64"
196 docker push vllm/vllm-openai-cpu:latest-x86_64
197 - docker push vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64
197 + docker push "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64"
198
199 docker pull "${CPU_ARM_TAG}"
200 docker tag "${CPU_ARM_TAG}" vllm/vllm-openai-cpu:latest-arm64
201 - docker tag "${CPU_ARM_TAG}" vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64
201 + docker tag "${CPU_ARM_TAG}" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64"
202 docker push vllm/vllm-openai-cpu:latest-arm64
203 - docker push vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64
203 + docker push "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64"
204
205 docker manifest rm vllm/vllm-openai-cpu:latest || true
206 - docker manifest rm vllm/vllm-openai-cpu:v${RELEASE_VERSION} || true
206 + docker manifest rm "vllm/vllm-openai-cpu:v${RELEASE_VERSION}" || true
207 docker manifest create vllm/vllm-openai-cpu:latest vllm/vllm-openai-cpu:latest-x86_64 vllm/vllm-openai-cpu:latest-arm64
208 - docker manifest create vllm/vllm-openai-cpu:v${RELEASE_VERSION} vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64 vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64
208 + docker manifest create "vllm/vllm-openai-cpu:v${RELEASE_VERSION}" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-x86_64" "vllm/vllm-openai-cpu:v${RELEASE_VERSION}-arm64"
209 docker manifest push vllm/vllm-openai-cpu:latest
210 - docker manifest push vllm/vllm-openai-cpu:v${RELEASE_VERSION}
210 + docker manifest push "vllm/vllm-openai-cpu:v${RELEASE_VERSION}"
211 elif [ "$CPU_X86_AVAILABLE" = "false" ] && [ "$CPU_ARM_AVAILABLE" = "false" ]; then
212 echo "WARNING: Neither CPU image found in ECR, skipping CPU publish (ensure block-cpu-release-image-build and block-arm64-cpu-release-image-build were unblocked and the builds finished pushing)"
213 else
.buildkite/scripts/run-multi-node-test.sh
+14 -15
@@ -44,20 +44,20 @@ start_network() {
44
45 start_nodes() {
46 for node in $(seq 0 $(($NUM_NODES-1))); do
47 - if [ "$IS_ROCM" -eq 1 ]; then
48 - GPU_DEVICES='--device /dev/kfd --device /dev/dri -e HIP_VISIBLE_DEVICES='
49 - else
50 - GPU_DEVICES='--gpus "device='
51 - fi
47 + DEVICE_LIST=""
48 for node_gpu in $(seq 0 $(($NUM_GPUS - 1))); do
49 DEVICE_NUM=$(($node * $NUM_GPUS + $node_gpu))
54 - GPU_DEVICES+=$(($DEVICE_NUM))
50 + DEVICE_LIST+=$(($DEVICE_NUM))
51 if [ "$node_gpu" -lt $(($NUM_GPUS - 1)) ]; then
56 - GPU_DEVICES+=','
52 + DEVICE_LIST+=','
53 fi
54 done
59 - if [ "$IS_ROCM" -eq 0 ]; then
60 - GPU_DEVICES+='"'
55 + if [ "$IS_ROCM" -eq 1 ]; then
56 + GPU_DEVICES=(--device /dev/kfd --device /dev/dri -e "HIP_VISIBLE_DEVICES=${DEVICE_LIST}")
57 + else
58 + # The literal quotes around device=... are required by docker's
59 + # --gpus value parser when the device list itself contains commas.
60 + GPU_DEVICES=(--gpus "\"device=${DEVICE_LIST}\"")
61 fi
62
63 # start the container in detached mode
@@ -67,7 +67,7 @@ start_nodes() {
67 # 3. map the huggingface cache directory to the container
68 # 3. assign ip addresses to the containers (head node: 192.168.10.10, worker nodes:
69 # starting from 192.168.10.11)
70 - docker run -d $GPU_DEVICES --shm-size=10.24gb -e HF_TOKEN \
70 + docker run -d "${GPU_DEVICES[@]}" --shm-size=10.24gb -e HF_TOKEN \
71 -v ~/.cache/huggingface:/root/.cache/huggingface --name "node$node" \
72 --network docker-net --ip 192.168.10.$((10 + $node)) --rm "$DOCKER_IMAGE" \
73 /bin/bash -c "tail -f /dev/null"
@@ -96,16 +96,15 @@ run_nodes() {
96 # we start the worker nodes first, in detached mode, and then start the head node
97 # in the foreground, so that the output of the head node is visible in the buildkite logs
98 for node in $(seq $(($NUM_NODES - 1)) -1 0); do
99 - GPU_DEVICES='"device='
99 + DEVICE_LIST=""
100 for node_gpu in $(seq 0 $(($NUM_GPUS - 1))); do
101 DEVICE_NUM=$(($node * $NUM_GPUS + $node_gpu))
102 - GPU_DEVICES+=$(($DEVICE_NUM))
102 + DEVICE_LIST+=$(($DEVICE_NUM))
103 if [ "$node_gpu" -lt $(($NUM_GPUS - 1)) ]; then
104 - GPU_DEVICES+=','
104 + DEVICE_LIST+=','
105 fi
106 done
107 - GPU_DEVICES+='"'
108 - echo "Running node$node with GPU devices: $GPU_DEVICES"
107 + echo "Running node$node with GPU devices: $DEVICE_LIST"
108 if [ "$node" -ne 0 ]; then
109 docker exec -d "node$node" /bin/bash -c "cd $WORKING_DIR ; ${COMMANDS[$node]}"
110 else
.buildkite/scripts/tool_call/run-bfcl-eval.sh
+1
@@ -75,6 +75,7 @@ fi
75
76 # ---- Cleanup handler ----
77 SERVER_PID=""
78 +# shellcheck disable=SC2329 # invoked via `trap cleanup EXIT` below
79 cleanup() {
80 if [ -n "$SERVER_PID" ]; then
81 echo "Stopping vLLM server (pid=$SERVER_PID)..."
.buildkite/scripts/xpu/create-xpu-ecr-manifest.sh
+2 -2
@@ -7,7 +7,7 @@ REPO="vllm-release-repo"
7 ARCH_TAG="${BUILDKITE_COMMIT}-$(uname -m)-xpu"
8 PLATFORM_TAG="${BUILDKITE_COMMIT}-xpu"
9
10 -aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${REGISTRY}
10 +aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin "${REGISTRY}"
11 docker manifest rm "${REGISTRY}/${REPO}:${PLATFORM_TAG}" || true
12 docker manifest create "${REGISTRY}/${REPO}:${PLATFORM_TAG}" "${REGISTRY}/${REPO}:${ARCH_TAG}" --amend
13 -docker manifest push ${REGISTRY}/${REPO}:${PLATFORM_TAG}
\ No newline at end of file
13 +docker manifest push "${REGISTRY}/${REPO}:${PLATFORM_TAG}"
\ No newline at end of file
.github/workflows/matchers/shellcheck.json new
+18
@@ -0,0 +1,18 @@
1 +{
2 + "problemMatcher": [
3 + {
4 + "owner": "shellcheck",
5 + "pattern": [
6 + {
7 + "regexp": "^(.+):(\\d+):(\\d+): (error|warning|note|info): (.+) \\[(SC\\d+)\\]$",
8 + "file": 1,
9 + "line": 2,
10 + "column": 3,
11 + "severity": 4,
12 + "message": 5,
13 + "code": 6
14 + }
15 + ]
16 + }
17 + ]
18 +}
.github/workflows/pre-commit.yml
+1 -4
@@ -53,13 +53,10 @@ jobs:
53 - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
54 with:
55 python-version: "3.12"
56 - # Provide shellcheck on PATH so tools/pre_commit/shellcheck.sh skips its
57 - # wget + tar -xJ self-download, which the self-hosted runner image lacks
58 - # (no wget/xz). Pinned to shellcheck 0.10.0 to match the script's "stable".
59 - - run: python -m pip install shellcheck-py==0.10.0.1
56 - run: echo "::add-matcher::.github/workflows/matchers/actionlint.json"
57 - run: echo "::add-matcher::.github/workflows/matchers/markdownlint.json"
58 - run: echo "::add-matcher::.github/workflows/matchers/mypy.json"
59 + - run: echo "::add-matcher::.github/workflows/matchers/shellcheck.json"
60 - uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1
61 with:
62 extra_args: --all-files --hook-stage manual
.pre-commit-config.yaml
+5 -5
@@ -35,6 +35,11 @@ repos:
35 rev: v1.7.7
36 hooks:
37 - id: actionlint
38 +- repo: https://github.com/shellcheck-py/shellcheck-py
39 + rev: 745eface02aef23e168a8afb6b5737818efbea95 # v0.11.0.1
40 + hooks:
41 + - id: shellcheck
42 + args: ["-s", "bash", "--format=gcc"]
43 - repo: https://github.com/astral-sh/uv-pre-commit
44 rev: 0.11.1
45 hooks:
@@ -195,11 +200,6 @@ repos:
200 entry: python tools/pre_commit/mypy.py "3.13"
201 <<: *mypy_common
202 stages: [manual] # Only run in CI
198 - - id: shellcheck
199 - name: Lint shell scripts
200 - entry: tools/pre_commit/shellcheck.sh
201 - language: script
202 - types: [shell]
203 - id: png-lint
204 name: Lint PNG exports from excalidraw
205 entry: tools/pre_commit/png-lint.sh
build_vllm_ppc64le.sh
+1 -1
@@ -130,7 +130,7 @@ TEMP_BUILD_DIR=$(mktemp -d)
130 cd "${TEMP_BUILD_DIR}"
131 export BUILD_SOX=1 BUILD_KALDI=1 BUILD_RNNT=1 USE_FFMPEG=0 USE_ROCM=0 USE_CUDA=0
132 export TORCHAUDIO_TEST_ALLOW_SKIP_IF_NO_FFMPEG=1
133 -git clone --recursive https://github.com/pytorch/audio.git -b v${TORCHAUDIO_VERSION}
133 +git clone --recursive https://github.com/pytorch/audio.git -b "v${TORCHAUDIO_VERSION}"
134 cd audio
135 #patching
136 sed -i '
docker/entrypoints/test_vllm_nonroot_entrypoint.sh
+3 -3
@@ -43,6 +43,7 @@ run_wrapper() {
43 _env="$_env $1"; shift
44 done
45 shift
46 + # shellcheck disable=SC2086 # word splitting is intentional: $_env holds multiple NAME=value assignments
47 env -i PATH="$WORKDIR/bin:/usr/bin:/bin" $_env "$WRAPPER" "$@" > "$_out"
48 }
49
@@ -140,9 +141,8 @@ fake_passwd="$WORKDIR/fake-passwd-prepopulated"
141 printf 'vllm:x:%s:%s:vllm:/home/vllm:/bin/bash\n' "$current_uid" "$current_gid" > "$fake_passwd"
142 out="$WORKDIR/case6.out"
143 run_wrapper "$out" "HOME=$case5_home" "VLLM_PASSWD_FILE=$fake_passwd" -- --model foo
143 -line_count="$(wc -l < "$fake_passwd")"
144 -# NOTE: wc may count 0 or 1 depending on trailing newline; accept 1.
145 -# More robust: count lines matching our UID.
144 +# wc may count 0 or 1 depending on trailing newline, so count lines
145 +# matching our UID instead for a robust check.
146 uid_lines="$(grep -c ":${current_uid}:" "$fake_passwd" || true)"
147 [ "$uid_lines" = "1" ] \
148 || { echo "FAIL: case6: expected exactly one entry for UID $current_uid, got $uid_lines"; cat "$fake_passwd"; exit 1; }
docs/pre_run_check.sh
+1
@@ -1,3 +1,4 @@
1 +# shellcheck disable=SC2317 # code after the exit/exit-183 gate below is intentionally dead pending re-enablement (see line comment)
2 if [ "$READTHEDOCS_VERSION_TYPE" != "external" ]; then
3 echo "Not a PR build (version type=$READTHEDOCS_VERSION_TYPE); skipping pre-run-check gate."
4 exit 0
tests/v1/kv_connector/nixl_integration/run_mamba_prefix_cache_test.sh
+4 -4
@@ -52,10 +52,10 @@ CUDA_VISIBLE_DEVICES=$PREFILL_GPU_ID \
52 VLLM_SSM_CONV_STATE_LAYOUT=DS \
53 VLLM_KV_CACHE_LAYOUT=HND \
54 VLLM_NIXL_SIDE_CHANNEL_PORT=5559 \
55 -vllm serve $MODEL \
55 +vllm serve "$MODEL" \
56 --port $PREFILL_PORT \
57 --enforce-eager \
58 - --gpu-memory-utilization $GPU_MEMORY_UTILIZATION \
58 + --gpu-memory-utilization "$GPU_MEMORY_UTILIZATION" \
59 --max-model-len 16384 \
60 --block-size 128 \
61 --trust-remote-code \
@@ -70,10 +70,10 @@ CUDA_VISIBLE_DEVICES=$DECODE_GPU_ID \
70 VLLM_SSM_CONV_STATE_LAYOUT=DS \
71 VLLM_KV_CACHE_LAYOUT=HND \
72 VLLM_NIXL_SIDE_CHANNEL_PORT=6000 \
73 -vllm serve $MODEL \
73 +vllm serve "$MODEL" \
74 --port $DECODE_PORT \
75 --enforce-eager \
76 - --gpu-memory-utilization $GPU_MEMORY_UTILIZATION \
76 + --gpu-memory-utilization "$GPU_MEMORY_UTILIZATION" \
77 --max-model-len 16384 \
78 --block-size 128 \
79 --trust-remote-code \
tests/v1/kv_connector/nixl_integration/run_xpu_disagg_accuracy_test.sh
+41 -44
@@ -86,10 +86,10 @@ launch_baseline() {
86 --gpu-memory-utilization ${GPU_MEMORY_UTILIZATION} \
87 --dtype float16 \
88 --enforce-eager"
89 - echo ${BASELINE_BASE_CMD}
89 + echo "${BASELINE_BASE_CMD}"
90 bash -c "${BASELINE_BASE_CMD}" &
91 sleep 10
92 - wait_for_server ${BASELINE_HOST} ${BASELINE_PORT}
92 + wait_for_server "${BASELINE_HOST}" "${BASELINE_PORT}"
93 }
94
95 launch_pd() {
@@ -97,53 +97,50 @@ launch_pd() {
97 PREFILL_GPU_ID=$(compute_gpu_id 0 "${PREFILLER_TP_SIZE}")
98 local DECODE_GPU_ID
99 DECODE_GPU_ID=$(compute_gpu_id "${PREFILLER_TP_SIZE}" "${DECODER_TP_SIZE}")
100 + local kv_config="{\"kv_connector\":\"NixlConnector\",\"kv_role\":\"kv_both\",\"kv_buffer_device\":\"${KV_BUFFER_DEVICE}\"}"
101
101 - PREFILL_BASE_CMD="
102 - ZE_AFFINITY_MASK=$PREFILL_GPU_ID \
102 + sleep 2
103 +
104 + echo "Starting prefill on GPU ${PREFILL_GPU_ID}, port ${PREFILL_PORT}"
105 + ZE_AFFINITY_MASK="${PREFILL_GPU_ID}" \
106 VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=200 \
104 - VLLM_NIXL_SIDE_CHANNEL_HOST=${PREFILL_HOST} \
105 - VLLM_NIXL_SIDE_CHANNEL_PORT=${PREFILL_NIXL_SIDE_PORT} \
107 + VLLM_NIXL_SIDE_CHANNEL_HOST="${PREFILL_HOST}" \
108 + VLLM_NIXL_SIDE_CHANNEL_PORT="${PREFILL_NIXL_SIDE_PORT}" \
109 VLLM_WORKER_MULTIPROC_METHOD=spawn \
107 - VLLM_ENABLE_V1_MULTIPROCESSING=1 vllm serve $MODEL_NAME \
108 - --host ${PREFILL_HOST} \
109 - --port ${PREFILL_PORT} \
110 - --max-model-len ${MAX_MODEL_LEN}\
111 - --seed 42 \
112 - --block-size ${BLOCK_SIZE} \
113 - --enforce-eager \
114 - --dtype float16 \
115 - -tp ${PREFILLER_TP_SIZE} \
116 - --gpu-memory-utilization ${GPU_MEMORY_UTILIZATION} \
117 - --kv-transfer-config '{\"kv_connector\":\"NixlConnector\",\"kv_role\":\"kv_both\",\"kv_buffer_device\":\"$KV_BUFFER_DEVICE\"}'"
118 -
119 -
120 - DECODE_BASE_CMD="
121 - ZE_AFFINITY_MASK=$DECODE_GPU_ID \
110 + VLLM_ENABLE_V1_MULTIPROCESSING=1 \
111 + vllm serve "$MODEL_NAME" \
112 + --host "${PREFILL_HOST}" \
113 + --port "${PREFILL_PORT}" \
114 + --max-model-len "${MAX_MODEL_LEN}" \
115 + --seed 42 \
116 + --block-size "${BLOCK_SIZE}" \
117 + --enforce-eager \
118 + --dtype float16 \
119 + -tp "${PREFILLER_TP_SIZE}" \
120 + --gpu-memory-utilization "${GPU_MEMORY_UTILIZATION}" \
121 + --kv-transfer-config "${kv_config}" &
122 +
123 + echo "Starting decode on GPU ${DECODE_GPU_ID}, port ${DECODE_PORT}"
124 + ZE_AFFINITY_MASK="${DECODE_GPU_ID}" \
125 VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS=200 \
126 VLLM_WORKER_MULTIPROC_METHOD=spawn \
124 - VLLM_ENABLE_V1_MULTIPROCESSING=1 vllm serve $MODEL_NAME \
125 - --host ${DECODE_HOST} \
126 - --port ${DECODE_PORT} \
127 - --max-model-len ${MAX_MODEL_LEN}\
128 - --seed 42 \
129 - --block-size ${BLOCK_SIZE} \
130 - --enforce-eager \
131 - -tp ${DECODER_TP_SIZE} \
132 - --dtype float16 \
133 - --gpu-memory-utilization ${GPU_MEMORY_UTILIZATION} \
134 - --kv-transfer-config '{\"kv_connector\":\"NixlConnector\",\"kv_role\":\"kv_both\",\"kv_buffer_device\":\"$KV_BUFFER_DEVICE\"}'"
135 -
136 - echo ${PREFILL_BASE_CMD}
137 - echo ${DECODE_BASE_CMD}
138 - sleep 2
127 + VLLM_ENABLE_V1_MULTIPROCESSING=1 \
128 + vllm serve "$MODEL_NAME" \
129 + --host "${DECODE_HOST}" \
130 + --port "${DECODE_PORT}" \
131 + --max-model-len "${MAX_MODEL_LEN}" \
132 + --seed 42 \
133 + --block-size "${BLOCK_SIZE}" \
134 + --enforce-eager \
135 + -tp "${DECODER_TP_SIZE}" \
136 + --dtype float16 \
137 + --gpu-memory-utilization "${GPU_MEMORY_UTILIZATION}" \
138 + --kv-transfer-config "${kv_config}" &
139
140 - # execute on hosts
141 - bash -c "${PREFILL_BASE_CMD}" &
142 - bash -c "${DECODE_BASE_CMD}" &
140 sleep 1
144 - wait_for_server ${PREFILL_HOST} ${PREFILL_PORT}
141 + wait_for_server "${PREFILL_HOST}" "${PREFILL_PORT}"
142 sleep 1
146 - wait_for_server ${DECODE_HOST} ${DECODE_PORT}
143 + wait_for_server "${DECODE_HOST}" "${DECODE_PORT}"
144 sleep 1
145 }
146
@@ -153,7 +150,7 @@ launch_pd_proxy(){
150 --prefiller-host ${PREFILL_HOST} --prefiller-port ${PREFILL_PORT} \
151 --decoder-host ${DECODE_HOST} --decoder-port ${DECODE_PORT} \
152 --host=${PROXY_HOST} --port ${PROXY_PORT}"
156 - echo ${PROXY_BASE_CMD}
153 + echo "${PROXY_BASE_CMD}"
154 bash -c "${PROXY_BASE_CMD}" &
155 sleep 2
156 }
@@ -161,7 +158,7 @@ launch_pd_proxy(){
158 run_tests(){
159 local service_url=$1
160 local mode=$2
164 - python3 ${EXP_ROOT}/test_disagg_accuracy.py --service_url=${service_url} --model_name=${MODEL_NAME} --mode=${mode} --file_name=${OUTPUT_FILE}
161 + python3 "${EXP_ROOT}/test_disagg_accuracy.py" --service_url="${service_url}" --model_name="${MODEL_NAME}" --mode="${mode}" --file_name="${OUTPUT_FILE}"
162 }
163
164
@@ -178,7 +175,7 @@ launch_pd_proxy
175 run_tests "http://${PROXY_HOST}:${PROXY_PORT}" "disagg"
176 echo "-----P/D success----"
177
181 -rm ${OUTPUT_FILE}
178 +rm "${OUTPUT_FILE}"
179 cleanup
180
181 exit 0
tests/v1/kv_connector/nixl_integration/spec_decode_acceptance_test.sh
+22 -20
@@ -103,8 +103,10 @@ fi
103 cleanup_instances() {
104 echo ""
105 echo "Cleaning up..."
106 + # shellcheck disable=SC2046 # word splitting is intentional for multiple PIDs
107 kill $(jobs -pr) 2>/dev/null || true
108 sleep 1
109 + # shellcheck disable=SC2046
110 kill -9 $(jobs -pr) 2>/dev/null || true
111 pkill -9 -f "vllm serve.*${MODEL_NAME}" 2>/dev/null || true
112 pkill -9 -f "toy_proxy_server.*8192" 2>/dev/null || true
@@ -122,7 +124,7 @@ wait_for_server() {
124 local deadline=${5:-600}
125 local elapsed=0
126 echo "Waiting for ${server_name} on port ${port}..."
125 - while [ $elapsed -lt $deadline ]; do
127 + while [ "$elapsed" -lt "$deadline" ]; do
128 if ! ps -p "$server_pid" > /dev/null 2>&1; then
129 local status=0
130 wait "$server_pid" || status=$?
@@ -186,7 +188,7 @@ else
188 else
189 num=1
190 fi
189 - for (( g=0; g<num; g++ )); do ALL_GPUS+=($g); done
191 + for (( g=0; g<num; g++ )); do ALL_GPUS+=("$g"); done
192 fi
193
194 TOTAL_GPUS_NEEDED=$(( (NUM_PREFILL_INSTANCES * PREFILLER_TP_SIZE) + (NUM_DECODE_INSTANCES * DECODER_TP_SIZE) ))
@@ -246,22 +248,22 @@ run_test_for_device() {
248
249 echo "Starting prefill instance $i on GPU $GPU_ID, port $PORT"
250 env \
249 - ${GPU_DEVICE_VAR}=$GPU_ID \
251 + ${GPU_DEVICE_VAR}="$GPU_ID" \
252 VLLM_KV_CACHE_LAYOUT='HND' \
253 UCX_NET_DEVICES=all \
254 ${VLLM_SSM_CONV_STATE_LAYOUT:+VLLM_SSM_CONV_STATE_LAYOUT=$VLLM_SSM_CONV_STATE_LAYOUT} \
253 - VLLM_NIXL_SIDE_CHANNEL_HOST=$NIXL_SIDE_CHANNEL_HOST \
255 + VLLM_NIXL_SIDE_CHANNEL_HOST="$NIXL_SIDE_CHANNEL_HOST" \
256 VLLM_NIXL_SIDE_CHANNEL_PORT=$SIDE_CHANNEL_PORT \
255 - vllm serve $MODEL_NAME \
257 + vllm serve "$MODEL_NAME" \
258 --port $PORT \
259 --enforce-eager \
258 - --max-model-len $MAX_MODEL_LEN \
259 - --block-size ${BLOCK_SIZE} \
260 + --max-model-len "$MAX_MODEL_LEN" \
261 + --block-size "${BLOCK_SIZE}" \
262 "${KV_CACHE_ARGS[@]}" \
261 - --tensor-parallel-size $PREFILLER_TP_SIZE \
263 + --tensor-parallel-size "$PREFILLER_TP_SIZE" \
264 --kv-transfer-config "$kv_config_p" \
265 --speculative-config "$PREFILL_SPEC_CONFIG" \
264 - --attention-backend $ATTENTION_BACKEND \
266 + --attention-backend "$ATTENTION_BACKEND" \
267 ${EXTRA_SERVE_ARGS[@]+"${EXTRA_SERVE_ARGS[@]}"} &
268 local SERVER_PID=$!
269
@@ -285,22 +287,22 @@ run_test_for_device() {
287
288 echo "Starting decode instance $i on GPU $GPU_ID, port $PORT"
289 env \
288 - ${GPU_DEVICE_VAR}=$GPU_ID \
290 + ${GPU_DEVICE_VAR}="$GPU_ID" \
291 VLLM_KV_CACHE_LAYOUT='HND' \
292 UCX_NET_DEVICES=all \
293 ${VLLM_SSM_CONV_STATE_LAYOUT:+VLLM_SSM_CONV_STATE_LAYOUT=$VLLM_SSM_CONV_STATE_LAYOUT} \
292 - VLLM_NIXL_SIDE_CHANNEL_HOST=$NIXL_SIDE_CHANNEL_HOST \
294 + VLLM_NIXL_SIDE_CHANNEL_HOST="$NIXL_SIDE_CHANNEL_HOST" \
295 VLLM_NIXL_SIDE_CHANNEL_PORT=$SIDE_CHANNEL_PORT \
294 - vllm serve $MODEL_NAME \
296 + vllm serve "$MODEL_NAME" \
297 --port $PORT \
298 --enforce-eager \
297 - --max-model-len $MAX_MODEL_LEN \
298 - --block-size ${BLOCK_SIZE} \
299 + --max-model-len "$MAX_MODEL_LEN" \
300 + --block-size "${BLOCK_SIZE}" \
301 "${KV_CACHE_ARGS[@]}" \
300 - --tensor-parallel-size $DECODER_TP_SIZE \
302 + --tensor-parallel-size "$DECODER_TP_SIZE" \
303 --kv-transfer-config "$kv_config_d" \
304 --speculative-config "$DECODE_SPEC_CONFIG" \
303 - --attention-backend $ATTENTION_BACKEND \
305 + --attention-backend "$ATTENTION_BACKEND" \
306 ${EXTRA_SERVE_ARGS[@]+"${EXTRA_SERVE_ARGS[@]}"} &
307 local SERVER_PID=$!
308
@@ -315,10 +317,10 @@ run_test_for_device() {
317 echo "Starting proxy server on port $PROXY_PORT..."
318 python3 "${GIT_ROOT}/tests/v1/kv_connector/nixl_integration/toy_proxy_server.py" \
319 --port $PROXY_PORT \
318 - --prefiller-hosts ${PREFILL_HOSTS[*]} \
319 - --prefiller-ports ${PREFILL_PORTS[*]} \
320 - --decoder-hosts ${DECODE_HOSTS[*]} \
321 - --decoder-ports ${DECODE_PORTS[*]} &
320 + --prefiller-hosts "${PREFILL_HOSTS[@]}" \
321 + --prefiller-ports "${PREFILL_PORTS[@]}" \
322 + --decoder-hosts "${DECODE_HOSTS[@]}" \
323 + --decoder-ports "${DECODE_PORTS[@]}" &
324 local PROXY_PID=$!
325
326 wait_for_server "$PROXY_PORT" "$PROXY_PID" "proxy" "/healthcheck" 60
tools/install_torchcodec_rocm.sh
+1
@@ -117,6 +117,7 @@ echo "Building TorchCodec (MAX_JOBS=$MAX_JOBS)..."
117 pip wheel . --no-build-isolation --no-deps -w "$BUILD_DIR/dist"
118
119 # Install the built wheel
120 +# shellcheck disable=SC2012 # `ls` sorting is relied on here; TODO: switch to `find` in a follow-up cleanup PR
121 BUILT_WHEEL=$(ls "$BUILD_DIR/dist"/torchcodec-*.whl 2>/dev/null | head -1)
122 if [ -z "$BUILT_WHEEL" ]; then
123 echo "Error: No wheel produced"
tools/pre_commit/shellcheck.sh deleted
-24
@@ -1,24 +0,0 @@
1 -#!/bin/bash
2 -set -euo pipefail
3 -
4 -scversion="stable"
5 -
6 -if [ -d "shellcheck-${scversion}" ]; then
7 - export PATH="$PATH:$(pwd)/shellcheck-${scversion}"
8 -fi
9 -
10 -if ! [ -x "$(command -v shellcheck)" ]; then
11 - if [ "$(uname -s)" != "Linux" ] || [ "$(uname -m)" != "x86_64" ]; then
12 - echo "Please install shellcheck: https://github.com/koalaman/shellcheck?tab=readme-ov-file#installing"
13 - exit 1
14 - fi
15 -
16 - # automatic local install if linux x86_64
17 - wget -qO- "https://github.com/koalaman/shellcheck/releases/download/${scversion?}/shellcheck-${scversion?}.linux.x86_64.tar.xz" | tar -xJv
18 - export PATH="$PATH:$(pwd)/shellcheck-${scversion}"
19 -fi
20 -
21 -# TODO - fix warnings in .buildkite/scripts/hardware_ci/run-amd-test.sh
22 -find . -path ./.git -prune -o -name "*.sh" \
23 - -not -path "./.buildkite/scripts/hardware_ci/run-amd-test.sh" -print0 | \
24 - xargs -0 sh -c "for f in \"\$@\"; do git check-ignore -q \"\$f\" || shellcheck -s bash \"\$f\"; done" --
tools/setup_deepgemm_pythons.sh
+2 -1
@@ -17,7 +17,8 @@ if [ "$#" -eq 0 ]; then
17 | grep -oE '>=3\.[0-9]+,<3\.[0-9]+')
18 lo=${spec#>=3.}; lo=${lo%%,*}
19 hi=${spec##*<3.}
20 - set -- $(seq "$lo" $((hi - 1)) | sed 's/^/3./')
20 + readarray -t versions < <(seq "$lo" $((hi - 1)) | sed 's/^/3./')
21 + set -- "${versions[@]}"
22 fi
23
24 prefix="${DEEPGEMM_VENV_PREFIX:-/tmp/dgenv}"
vllm/utils/numa_wrapper.sh
+2
@@ -15,6 +15,7 @@ if ! command -v numactl >/dev/null 2>&1; then
15 exit 1
16 fi
17
18 +# shellcheck disable=SC1001 # verified equivalent behavior; TODO: revisit escaping in a follow-up cleanup PR
19 case "${_VLLM_INTERNAL_NUMACTL_ARGS}" in
20 *[![:alnum:]\ \-\_=,./]*)
21 echo "Invalid characters in _VLLM_INTERNAL_NUMACTL_ARGS" >&2
@@ -22,4 +23,5 @@ case "${_VLLM_INTERNAL_NUMACTL_ARGS}" in
23 ;;
24 esac
25
26 +# shellcheck disable=SC2086 # word splitting is intentional: this expands into multiple numactl flags
27 exec numactl ${_VLLM_INTERNAL_NUMACTL_ARGS} "${_VLLM_INTERNAL_NUMACTL_PYTHON_EXECUTABLE}" "$@"