|
25 | 25 | - ".github/workflows/docker-publish.yml" |
26 | 26 | - "tools/docker/Dockerfile*" |
27 | 27 | - "candle-binding/**" |
| 28 | + - "onnx-binding/**" |
28 | 29 | - "src/**" |
29 | 30 | - "e2e/testing/llm-katan/**" |
30 | 31 | - "dashboard/**" |
|
34 | 35 | - ".github/workflows/docker-publish.yml" |
35 | 36 | - "tools/docker/Dockerfile*" |
36 | 37 | - "candle-binding/**" |
| 38 | + - "onnx-binding/**" |
37 | 39 | - "src/**" |
38 | 40 | - "e2e/testing/llm-katan/**" |
39 | 41 | - "dashboard/**" |
|
59 | 61 | packages: write |
60 | 62 | strategy: |
61 | 63 | matrix: |
62 | | - image: [extproc, llm-katan, vllm-sr] |
| 64 | + image: [extproc, extproc-rocm, llm-katan, vllm-sr] |
63 | 65 | fail-fast: false |
64 | 66 |
|
65 | 67 | steps: |
|
98 | 100 | if [ "${{ matrix.image }}" = "extproc" ]; then |
99 | 101 | echo "context=." >> $GITHUB_OUTPUT |
100 | 102 | echo "dockerfile=./tools/docker/Dockerfile.extproc" >> $GITHUB_OUTPUT |
| 103 | + elif [ "${{ matrix.image }}" = "extproc-rocm" ]; then |
| 104 | + echo "context=." >> $GITHUB_OUTPUT |
| 105 | + echo "dockerfile=./tools/docker/Dockerfile.extproc-rocm" >> $GITHUB_OUTPUT |
101 | 106 | elif [ "${{ matrix.image }}" = "llm-katan" ]; then |
102 | 107 | echo "context=./e2e/testing/llm-katan" >> $GITHUB_OUTPUT |
103 | 108 | echo "dockerfile=./e2e/testing/llm-katan/Dockerfile" >> $GITHUB_OUTPUT |
@@ -130,7 +135,7 @@ jobs: |
130 | 135 | load: true |
131 | 136 | tags: ${{ steps.tags.outputs.tags }} |
132 | 137 | cache-from: type=gha,scope=${{ matrix.image }}-amd64 |
133 | | - cache-to: type=gha,mode=max,scope=${{ matrix.image }}-amd64 |
| 138 | + cache-to: type=gha,mode=max,scope=${{ matrix.image }}-amd64,ignore-error=true |
134 | 139 | build-args: | |
135 | 140 | BUILDKIT_INLINE_CACHE=1 |
136 | 141 | CARGO_BUILD_JOBS=8 |
@@ -228,8 +233,6 @@ jobs: |
228 | 233 | PLATFORM_SUFFIX=$(echo "${{ matrix.platform }}" | tr '/' '-') |
229 | 234 | echo "platform_suffix=${PLATFORM_SUFFIX}" >> $GITHUB_OUTPUT |
230 | 235 |
|
231 | | - # For multi-arch push builds, always use cross-compilation Dockerfiles |
232 | | - # for images that have them (extproc, vllm-sr). This avoids slow QEMU emulation. |
233 | 236 | if [ "${{ matrix.image }}" = "extproc" ]; then |
234 | 237 | echo "context=." >> $GITHUB_OUTPUT |
235 | 238 | echo "dockerfile=./tools/docker/Dockerfile.extproc" >> $GITHUB_OUTPUT |
@@ -282,7 +285,7 @@ jobs: |
282 | 285 | push: true |
283 | 286 | tags: ${{ steps.tags.outputs.tags }} |
284 | 287 | cache-from: type=gha,scope=${{ matrix.image }}-${{ steps.build-params.outputs.platform_suffix }} |
285 | | - cache-to: type=gha,mode=max,scope=${{ matrix.image }}-${{ steps.build-params.outputs.platform_suffix }} |
| 288 | + cache-to: type=gha,mode=max,scope=${{ matrix.image }}-${{ steps.build-params.outputs.platform_suffix }},ignore-error=true |
286 | 289 | build-args: | |
287 | 290 | BUILDKIT_INLINE_CACHE=1 |
288 | 291 | CARGO_BUILD_JOBS=20 |
@@ -312,6 +315,115 @@ jobs: |
312 | 315 | echo "- **Elapsed**: ${DURATION_MIN}m ${DURATION_SEC}s (${DURATION}s)" >> $GITHUB_STEP_SUMMARY |
313 | 316 | fi |
314 | 317 |
|
| 318 | + # extproc-rocm: amd64-only (ROCm does not support arm64), no manifest needed |
| 319 | + build_extproc_rocm: |
| 320 | + if: >- |
| 321 | + github.event_name != 'pull_request' |
| 322 | + && github.repository == 'vllm-project/semantic-router' |
| 323 | + runs-on: ubuntu-latest |
| 324 | + timeout-minutes: 120 |
| 325 | + permissions: |
| 326 | + contents: read |
| 327 | + packages: write |
| 328 | + |
| 329 | + steps: |
| 330 | + - name: Free up disk space |
| 331 | + run: | |
| 332 | + echo "Before cleanup:" |
| 333 | + df -h |
| 334 | + sudo rm -rf /usr/share/dotnet |
| 335 | + sudo rm -rf /usr/local/lib/android |
| 336 | + sudo rm -rf /opt/ghc |
| 337 | + sudo rm -rf /opt/hostedtoolcache/CodeQL |
| 338 | + sudo docker image prune --all --force |
| 339 | + echo "After cleanup:" |
| 340 | + df -h |
| 341 | +
|
| 342 | + - name: Check out the repo |
| 343 | + uses: actions/checkout@v4 |
| 344 | + |
| 345 | + - name: Set up Docker Buildx |
| 346 | + uses: docker/setup-buildx-action@v3 |
| 347 | + with: |
| 348 | + driver-opts: | |
| 349 | + image=moby/buildkit:latest |
| 350 | + network=host |
| 351 | +
|
| 352 | + - name: Log in to GitHub Container Registry |
| 353 | + uses: docker/login-action@v3 |
| 354 | + with: |
| 355 | + registry: ghcr.io |
| 356 | + username: ${{ github.actor }} |
| 357 | + password: ${{ secrets.GITHUB_TOKEN }} |
| 358 | + |
| 359 | + - name: Set lowercase repository owner |
| 360 | + run: echo "REPOSITORY_OWNER_LOWER=$(echo $GITHUB_REPOSITORY_OWNER | tr '[:upper:]' '[:lower:]')" >> $GITHUB_ENV |
| 361 | + |
| 362 | + - name: Generate date tag for nightly builds |
| 363 | + id: date |
| 364 | + if: inputs.is_nightly == true |
| 365 | + run: echo "date_tag=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT |
| 366 | + |
| 367 | + - name: Generate tags |
| 368 | + id: tags |
| 369 | + run: | |
| 370 | + REPO_LOWER="${{ env.REPOSITORY_OWNER_LOWER }}" |
| 371 | + IMAGE="ghcr.io/${REPO_LOWER}/semantic-router/extproc-rocm" |
| 372 | +
|
| 373 | + if [ "${{ inputs.is_nightly }}" = "true" ]; then |
| 374 | + TAG="nightly-${{ steps.date.outputs.date_tag }}" |
| 375 | + else |
| 376 | + TAG="${{ github.sha }}" |
| 377 | + fi |
| 378 | +
|
| 379 | + TAGS="${IMAGE}:${TAG}" |
| 380 | + if [ "${{ inputs.is_nightly }}" != "true" ]; then |
| 381 | + TAGS="${TAGS},${IMAGE}:latest" |
| 382 | + fi |
| 383 | + echo "tags=${TAGS}" >> $GITHUB_OUTPUT |
| 384 | +
|
| 385 | + - name: Record build start time |
| 386 | + id: build-start |
| 387 | + run: echo "start=$(date +%s)" >> $GITHUB_OUTPUT |
| 388 | + |
| 389 | + - name: Build and push extproc-rocm (amd64 only) |
| 390 | + uses: docker/build-push-action@v5 |
| 391 | + with: |
| 392 | + context: . |
| 393 | + file: ./tools/docker/Dockerfile.extproc-rocm |
| 394 | + platforms: linux/amd64 |
| 395 | + push: true |
| 396 | + tags: ${{ steps.tags.outputs.tags }} |
| 397 | + cache-from: type=gha,scope=extproc-rocm-amd64 |
| 398 | + cache-to: type=gha,mode=max,scope=extproc-rocm-amd64,ignore-error=true |
| 399 | + build-args: | |
| 400 | + BUILDKIT_INLINE_CACHE=1 |
| 401 | + CARGO_BUILD_JOBS=20 |
| 402 | + CARGO_INCREMENTAL=1 |
| 403 | + RUSTC_WRAPPER="" |
| 404 | + CARGO_NET_GIT_FETCH_WITH_CLI=true |
| 405 | + provenance: false |
| 406 | + |
| 407 | + - name: Build summary and timing |
| 408 | + if: always() |
| 409 | + run: | |
| 410 | + END=$(date +%s) |
| 411 | + START="${{ steps.build-start.outputs.start }}" |
| 412 | + DURATION=$((END - START)) |
| 413 | + DURATION_MIN=$((DURATION / 60)) |
| 414 | + DURATION_SEC=$((DURATION % 60)) |
| 415 | + if [ "${{ job.status }}" = "success" ]; then |
| 416 | + echo "::notice title=Build Success::extproc-rocm (amd64) built in ${DURATION_MIN}m ${DURATION_SEC}s" |
| 417 | + echo "### Build Summary for extproc-rocm" >> $GITHUB_STEP_SUMMARY |
| 418 | + echo "- **Platform**: linux/amd64 (ROCm, no arm64)" >> $GITHUB_STEP_SUMMARY |
| 419 | + echo "- **Build time**: ${DURATION_MIN}m ${DURATION_SEC}s (${DURATION}s)" >> $GITHUB_STEP_SUMMARY |
| 420 | + echo "- **Tags**: ${{ steps.tags.outputs.tags }}" >> $GITHUB_STEP_SUMMARY |
| 421 | + else |
| 422 | + echo "::error title=Build Failed::extproc-rocm build failed after ${DURATION_MIN}m ${DURATION_SEC}s" |
| 423 | + echo "### Build failed for extproc-rocm" >> $GITHUB_STEP_SUMMARY |
| 424 | + echo "- **Elapsed**: ${DURATION_MIN}m ${DURATION_SEC}s (${DURATION}s)" >> $GITHUB_STEP_SUMMARY |
| 425 | + fi |
| 426 | +
|
315 | 427 | # Step 2: Create multi-arch manifest lists from per-platform images |
316 | 428 | create_manifest: |
317 | 429 | if: >- |
|
0 commit comments