[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}" "$@"