Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
OpenDAS
dynamo
Commits
0c1467c3
Unverified
Commit
0c1467c3
authored
Jan 22, 2026
by
Pavithra Vijayakrishnan
Committed by
GitHub
Jan 22, 2026
Browse files
ci: Add builds to release (#5557)
Signed-off-by:
pvijayakrish
<
pvijayakrish@nvidia.com
>
parent
83e59d35
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
313 additions
and
23 deletions
+313
-23
.github/workflows/build-frontend-image.yaml
.github/workflows/build-frontend-image.yaml
+22
-2
.github/workflows/ci-test-suite.yml
.github/workflows/ci-test-suite.yml
+103
-4
.github/workflows/pr.yaml
.github/workflows/pr.yaml
+1
-1
.github/workflows/release.yml
.github/workflows/release.yml
+187
-16
No files found.
.github/workflows/build-frontend-image.yaml
View file @
0c1467c3
...
@@ -7,8 +7,28 @@ on:
...
@@ -7,8 +7,28 @@ on:
push
:
push
:
branches
:
branches
:
-
main
-
main
-
release/*.*.*
-
"
pull-request/[0-9]+"
-
"
pull-request/[0-9]+"
# Note: release/* branches are handled by release.yml which calls this workflow
workflow_call
:
secrets
:
AWS_ACCOUNT_ID
:
required
:
true
AWS_DEFAULT_REGION
:
required
:
true
AWS_ACCESS_KEY_ID
:
required
:
true
AWS_SECRET_ACCESS_KEY
:
required
:
true
AZURE_ACR_HOSTNAME
:
required
:
true
AZURE_ACR_USER
:
required
:
true
AZURE_ACR_PASSWORD
:
required
:
true
CI_TOKEN
:
required
:
true
SCCACHE_S3_BUCKET
:
required
:
true
concurrency
:
concurrency
:
group
:
${{ github.workflow }}-${{ github.ref_name == 'main' && github.run_id || github.ref_name }}
group
:
${{ github.workflow }}-${{ github.ref_name == 'main' && github.run_id || github.ref_name }}
...
@@ -75,7 +95,7 @@ jobs:
...
@@ -75,7 +95,7 @@ jobs:
with
:
with
:
local_image
:
${{ steps.build-image.outputs.image_tag }}
local_image
:
${{ steps.build-image.outputs.image_tag }}
push_tags
:
ai-dynamo/dynamo:${{ github.sha }}-frontend-${{ matrix.platform.arch }}
push_tags
:
ai-dynamo/dynamo:${{ github.sha }}-frontend-${{ matrix.platform.arch }}
aws_push
:
'
fals
e'
aws_push
:
'
tru
e'
azure_push
:
'
true'
azure_push
:
'
true'
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
...
...
.github/workflows/ci-test-suite.yml
View file @
0c1467c3
...
@@ -123,8 +123,6 @@ jobs:
...
@@ -123,8 +123,6 @@ jobs:
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
azure_acr_user
:
${{ secrets.AZURE_ACR_USER }}
azure_acr_password
:
${{ secrets.AZURE_ACR_PASSWORD }}
build-arm64
:
build-arm64
:
name
:
Build ${{ matrix.framework }} (arm64)
name
:
Build ${{ matrix.framework }} (arm64)
...
@@ -188,15 +186,116 @@ jobs:
...
@@ -188,15 +186,116 @@ jobs:
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
# CUDA 13 builds (vllm and sglang only, both architectures)
build-cuda13-amd64
:
name
:
Build ${{ matrix.framework }} CUDA13 (amd64)
runs-on
:
cpu-amd-m5-4xlarge
timeout-minutes
:
120
strategy
:
fail-fast
:
false
matrix
:
framework
:
[
vllm
,
sglang
]
env
:
ECR_HOSTNAME
:
${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_DEFAULT_REGION }}.amazonaws.com
steps
:
-
uses
:
actions/checkout@v4
-
name
:
Login to Container Registries
uses
:
./.github/actions/docker-login
with
:
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
ngc_ci_access_token
:
${{ secrets.NGC_CI_ACCESS_TOKEN }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
azure_acr_user
:
${{ secrets.AZURE_ACR_USER }}
azure_acr_user
:
${{ secrets.AZURE_ACR_USER }}
azure_acr_password
:
${{ secrets.AZURE_ACR_PASSWORD }}
azure_acr_password
:
${{ secrets.AZURE_ACR_PASSWORD }}
-
name
:
Build CUDA 13 Runtime Image
id
:
build_runtime
uses
:
./.github/actions/docker-build
with
:
framework
:
${{ matrix.framework }}
target
:
runtime
platform
:
linux/amd64
base_image_tag
:
'
'
runtime_image_tag
:
'
'
cuda_version
:
'
13.0'
ci_token
:
${{ secrets.CI_TOKEN }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
sccache_s3_bucket
:
${{ secrets.SCCACHE_S3_BUCKET }}
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_access_key_id
:
${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key
:
${{ secrets.AWS_SECRET_ACCESS_KEY }}
image_tag
:
runtime-${{ matrix.framework }}-cuda13-amd64:${{ github.run_id }}
-
name
:
Tag and Push CUDA 13 Runtime Images
uses
:
./.github/actions/docker-tag-push
with
:
local_image
:
runtime-${{ matrix.framework }}-cuda13-amd64:${{ github.run_id }}
push_tags
:
|
${{ env.REGISTRY_IMAGE }}:${{ env.IMAGE_PREFIX }}-${{ matrix.framework }}-cuda13-amd64
${{ env.REGISTRY_IMAGE }}:${{ env.IMAGE_PREFIX }}-${{ matrix.framework }}-cuda13-amd64-run-${{ github.run_id }}
aws_push
:
'
true'
azure_push
:
'
true'
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
build-cuda13-arm64
:
name
:
Build ${{ matrix.framework }} CUDA13 (arm64)
runs-on
:
cpu-arm-r8g-4xlarge
timeout-minutes
:
120
strategy
:
fail-fast
:
false
matrix
:
framework
:
[
vllm
,
sglang
]
env
:
ECR_HOSTNAME
:
${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_DEFAULT_REGION }}.amazonaws.com
steps
:
-
uses
:
actions/checkout@v4
-
name
:
Login to Container Registries
uses
:
./.github/actions/docker-login
with
:
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
ngc_ci_access_token
:
${{ secrets.NGC_CI_ACCESS_TOKEN }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
azure_acr_user
:
${{ secrets.AZURE_ACR_USER }}
azure_acr_password
:
${{ secrets.AZURE_ACR_PASSWORD }}
-
name
:
Build CUDA 13 Runtime Image
id
:
build_runtime
uses
:
./.github/actions/docker-build
with
:
framework
:
${{ matrix.framework }}
target
:
runtime
platform
:
linux/arm64
base_image_tag
:
'
'
runtime_image_tag
:
'
'
cuda_version
:
'
13.0'
ci_token
:
${{ secrets.CI_TOKEN }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
sccache_s3_bucket
:
${{ secrets.SCCACHE_S3_BUCKET }}
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_access_key_id
:
${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_access_key
:
${{ secrets.AWS_SECRET_ACCESS_KEY }}
image_tag
:
runtime-${{ matrix.framework }}-cuda13-arm64:${{ github.run_id }}
-
name
:
Tag and Push CUDA 13 Runtime Images
uses
:
./.github/actions/docker-tag-push
with
:
local_image
:
runtime-${{ matrix.framework }}-cuda13-arm64:${{ github.run_id }}
push_tags
:
|
${{ env.REGISTRY_IMAGE }}:${{ env.IMAGE_PREFIX }}-${{ matrix.framework }}-cuda13-arm64
${{ env.REGISTRY_IMAGE }}:${{ env.IMAGE_PREFIX }}-${{ matrix.framework }}-cuda13-arm64-run-${{ github.run_id }}
aws_push
:
'
true'
azure_push
:
'
true'
aws_account_id
:
${{ secrets.AWS_ACCOUNT_ID }}
aws_default_region
:
${{ secrets.AWS_DEFAULT_REGION }}
azure_acr_hostname
:
${{ secrets.AZURE_ACR_HOSTNAME }}
############################## TEST JOBS ##############################
############################## TEST JOBS ##############################
unit-tests
:
unit-tests
:
name
:
${{ matrix.framework }}-${{ matrix.arch.arch }}-unit
name
:
${{ matrix.framework }}-${{ matrix.arch.arch }}-unit
needs
:
[
build-amd64
,
build-arm64
]
needs
:
[
build-amd64
,
build-arm64
]
if
:
always()
if
:
always()
&& inputs.skip_tests !=
true
runs-on
:
${{ matrix.arch.runner }}
runs-on
:
${{ matrix.arch.runner }}
timeout-minutes
:
45
timeout-minutes
:
45
strategy
:
strategy
:
...
@@ -919,7 +1018,7 @@ jobs:
...
@@ -919,7 +1018,7 @@ jobs:
name
:
Results Summary
name
:
Results Summary
runs-on
:
ubuntu-latest
runs-on
:
ubuntu-latest
if
:
always()
if
:
always()
needs
:
[
build-amd64
,
build-arm64
,
unit-tests
,
integration-tests
,
e2e-single-gpu-tests
,
e2e-multi-gpu-tests
,
fault-tolerance-tests
]
needs
:
[
build-amd64
,
build-arm64
,
build-cuda13-amd64
,
build-cuda13-arm64
,
unit-tests
,
integration-tests
,
e2e-single-gpu-tests
,
e2e-multi-gpu-tests
,
fault-tolerance-tests
]
steps
:
steps
:
-
name
:
Checkout code
-
name
:
Checkout code
uses
:
actions/checkout@v4
uses
:
actions/checkout@v4
...
...
.github/workflows/pr.yaml
View file @
0c1467c3
...
@@ -8,7 +8,7 @@ on:
...
@@ -8,7 +8,7 @@ on:
branches
:
branches
:
-
main
-
main
-
"
pull-request/[0-9]+"
-
"
pull-request/[0-9]+"
-
release/*
.*.*
# Note:
release/*
branches are handled by release.yml workflow
workflow_dispatch
:
workflow_dispatch
:
inputs
:
inputs
:
run_deploy_operator
:
run_deploy_operator
:
...
...
.github/workflows/release.yml
View file @
0c1467c3
...
@@ -96,14 +96,38 @@ jobs:
...
@@ -96,14 +96,38 @@ jobs:
HF_TOKEN
:
${{ secrets.HF_TOKEN }}
HF_TOKEN
:
${{ secrets.HF_TOKEN }}
DYNAMO_INGRESS_SUFFIX
:
${{ secrets.DYNAMO_INGRESS_SUFFIX }}
DYNAMO_INGRESS_SUFFIX
:
${{ secrets.DYNAMO_INGRESS_SUFFIX }}
# Build frontend images (needed for NGC publish)
frontend-build
:
name
:
Build Frontend Images
needs
:
[
prepare-release
,
manual-approval
]
if
:
|
always() &&
needs.prepare-release.result == 'success' &&
(github.event_name == 'push' || needs.manual-approval.result == 'success')
uses
:
./.github/workflows/build-frontend-image.yaml
secrets
:
AWS_ACCOUNT_ID
:
${{ secrets.AWS_ACCOUNT_ID }}
AWS_DEFAULT_REGION
:
${{ secrets.AWS_DEFAULT_REGION }}
AWS_ACCESS_KEY_ID
:
${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY
:
${{ secrets.AWS_SECRET_ACCESS_KEY }}
AZURE_ACR_HOSTNAME
:
${{ secrets.AZURE_ACR_HOSTNAME }}
AZURE_ACR_USER
:
${{ secrets.AZURE_ACR_USER }}
AZURE_ACR_PASSWORD
:
${{ secrets.AZURE_ACR_PASSWORD }}
CI_TOKEN
:
${{ secrets.CI_TOKEN }}
SCCACHE_S3_BUCKET
:
${{ secrets.SCCACHE_S3_BUCKET }}
# Tag the commit as release candidate and publish to NGC
# Tag the commit as release candidate and publish to NGC
# This job uses the automated-release environment for sensitive secrets
# This job uses the automated-release environment for sensitive secrets
# Runs after ci-pipeline completes (regardless of test results) - environment approval is the gate
# Runs after ci-pipeline and frontend-build complete - requires builds to succeed
# Note: Tests may fail but builds must succeed for publishing
release-publish
:
release-publish
:
name
:
Tag RC & Publish to NGC
name
:
Tag RC & Publish to NGC
needs
:
[
prepare-release
,
ci-pipeline
]
needs
:
[
prepare-release
,
ci-pipeline
,
frontend-build
]
if
:
|
if
:
|
always() && !cancelled() && needs.prepare-release.result == 'success'
always() && !cancelled() &&
needs.prepare-release.result == 'success' &&
(needs.ci-pipeline.result == 'success' || needs.ci-pipeline.result == 'failure') &&
(needs.frontend-build.result == 'success' || needs.frontend-build.result == 'failure')
runs-on
:
cpu-amd-m5-4xlarge
# Self-hosted runner with IAM instance role for ECR access
runs-on
:
cpu-amd-m5-4xlarge
# Self-hosted runner with IAM instance role for ECR access
environment
:
automated-release
environment
:
automated-release
env
:
env
:
...
@@ -162,6 +186,7 @@ jobs:
...
@@ -162,6 +186,7 @@ jobs:
RC_TAG="v${VERSION}-rc${NEXT_RC}"
RC_TAG="v${VERSION}-rc${NEXT_RC}"
echo "rc_tag=${RC_TAG}" >> $GITHUB_OUTPUT
echo "rc_tag=${RC_TAG}" >> $GITHUB_OUTPUT
echo "rc_number=${NEXT_RC}" >> $GITHUB_OUTPUT
echo "rc_number=${NEXT_RC}" >> $GITHUB_OUTPUT
echo "ngc_version_tag=${VERSION}rc${NEXT_RC}" >> $GITHUB_OUTPUT
echo "Will create tag: ${RC_TAG}"
echo "Will create tag: ${RC_TAG}"
-
name
:
Create RC tag
-
name
:
Create RC tag
...
@@ -207,13 +232,21 @@ jobs:
...
@@ -207,13 +232,21 @@ jobs:
echo "${NGC_TOKEN}" | crane auth login nvcr.io -u '$oauthtoken' --password-stdin
echo "${NGC_TOKEN}" | crane auth login nvcr.io -u '$oauthtoken' --password-stdin
-
name
:
Copy images to NGC
-
name
:
Copy images to NGC
id
:
copy_images
env
:
env
:
NGC_REGISTRY
:
nvcr.io
NGC_REGISTRY
:
nvcr.io
NGC_ORG
:
${{ secrets.NGC_PUBLISH_ORG }}
NGC_ORG
:
${{ secrets.NGC_PUBLISH_ORG }}
RC_NUMBER
:
${{ steps.rc_tag.outputs.rc_number }}
RC_NUMBER
:
${{ steps.rc_tag.outputs.rc_number }}
NGC_VERSION_TAG
:
${{ steps.rc_tag.outputs.ngc_version_tag }}
CI_PIPELINE_RESULT
:
${{ needs.ci-pipeline.result }}
FRONTEND_BUILD_RESULT
:
${{ needs.frontend-build.result }}
run
:
|
run
:
|
set -euo pipefail
set -euo pipefail
# Track success/failure for summary
SUCCESSFUL_COPIES=()
FAILED_COPIES=()
# Get ECR hostname from instance role
# Get ECR hostname from instance role
ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)"
ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)"
ECR_HOSTNAME="${ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com"
ECR_HOSTNAME="${ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com"
...
@@ -221,51 +254,189 @@ jobs:
...
@@ -221,51 +254,189 @@ jobs:
FRAMEWORKS=("vllm" "trtllm" "sglang")
FRAMEWORKS=("vllm" "trtllm" "sglang")
ARCHITECTURES=("amd64" "arm64")
ARCHITECTURES=("amd64" "arm64")
echo "========================================"
echo "Build Status:"
echo " CI Pipeline: ${CI_PIPELINE_RESULT}"
echo " Frontend Build: ${FRONTEND_BUILD_RESULT}"
echo "========================================"
echo ""
echo "Copying images from ECR to NGC (registry-to-registry)"
echo "Copying images from ECR to NGC (registry-to-registry)"
echo "Version
: ${VERSION}, RC: rc${RC_NUMBER
}"
echo "
NGC
Version
Tag: ${NGC_VERSION_TAG
}"
# Copy runtime images (from ci-test-suite.yml)
for FRAMEWORK in "${FRAMEWORKS[@]}"; do
for FRAMEWORK in "${FRAMEWORKS[@]}"; do
for ARCH in "${ARCHITECTURES[@]}"; do
for ARCH in "${ARCHITECTURES[@]}"; do
SOURCE_TAG="${IMAGE_PREFIX}-${FRAMEWORK}-${ARCH}"
SOURCE_TAG="${IMAGE_PREFIX}-${FRAMEWORK}-${ARCH}"
SOURCE_IMAGE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${SOURCE_TAG}"
SOURCE_IMAGE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${SOURCE_TAG}"
NGC_TAG="${VERSION
}rc${RC_NUMBER
}-${ARCH}"
NGC_TAG="${
NGC_
VERSION
_TAG
}-${ARCH}"
NGC_IMAGE="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${FRAMEWORK}-runtime:${NGC_TAG}"
NGC_IMAGE="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${FRAMEWORK}-runtime:${NGC_TAG}"
echo "----------------------------------------"
echo "----------------------------------------"
echo "Copying: ${FRAMEWORK}-runtime:${NGC_TAG}"
echo "Copying: ${FRAMEWORK}-runtime:${NGC_TAG}"
if ! crane copy "${SOURCE_IMAGE}" "${NGC_IMAGE}"; then
if crane copy "${SOURCE_IMAGE}" "${NGC_IMAGE}"; then
echo "✅ Copied: ${FRAMEWORK}-runtime:${NGC_TAG}"
SUCCESSFUL_COPIES+=("${FRAMEWORK}-runtime:${NGC_TAG}")
else
echo "⚠️ Warning: Failed to copy ${FRAMEWORK} (${ARCH}), skipping..."
echo "⚠️ Warning: Failed to copy ${FRAMEWORK} (${ARCH}), skipping..."
continue
FAILED_COPIES+=("${FRAMEWORK}-runtime:${NGC_TAG}")
fi
fi
done
done
echo "✅ Copied: ${FRAMEWORK}-runtime:${NGC_TAG}"
# Copy CUDA 13 images - both architectures
echo ""
echo "Copying CUDA 13 images from ECR..."
CUDA13_FRAMEWORKS=("vllm" "sglang")
for FRAMEWORK in "${CUDA13_FRAMEWORKS[@]}"; do
for ARCH in "${ARCHITECTURES[@]}"; do
SOURCE_TAG="${IMAGE_PREFIX}-${FRAMEWORK}-cuda13-${ARCH}"
SOURCE_IMAGE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${SOURCE_TAG}"
NGC_TAG="${NGC_VERSION_TAG}-cuda13-${ARCH}"
NGC_IMAGE="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${FRAMEWORK}-runtime:${NGC_TAG}"
echo "----------------------------------------"
echo "Copying: ${FRAMEWORK}-runtime:${NGC_TAG}"
if crane copy "${SOURCE_IMAGE}" "${NGC_IMAGE}"; then
echo "✅ Copied: ${FRAMEWORK}-runtime:${NGC_TAG}"
SUCCESSFUL_COPIES+=("${FRAMEWORK}-runtime:${NGC_TAG}")
else
echo "⚠️ Warning: Failed to copy ${FRAMEWORK} CUDA13 (${ARCH}), skipping..."
FAILED_COPIES+=("${FRAMEWORK}-runtime:${NGC_TAG}")
fi
done
done
# Create multi-arch manifest
MULTIARCH="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${FRAMEWORK}-runtime:${NGC_VERSION_TAG}-cuda13"
echo "Creating manifest: ${MULTIARCH}"
docker manifest create "${MULTIARCH}" \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${FRAMEWORK}-runtime:${NGC_VERSION_TAG}-cuda13-amd64" \
"${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/${FRAMEWORK}-runtime:${NGC_VERSION_TAG}-cuda13-arm64" || true
if docker manifest push "${MULTIARCH}"; then
echo "✅ Created multi-arch: ${FRAMEWORK}-runtime:${NGC_VERSION_TAG}-cuda13"
SUCCESSFUL_COPIES+=("${FRAMEWORK}-runtime:${NGC_VERSION_TAG}-cuda13 (multi-arch)")
else
echo "⚠️ Failed to create ${FRAMEWORK} CUDA13 multi-arch"
FAILED_COPIES+=("${FRAMEWORK}-runtime:${NGC_VERSION_TAG}-cuda13 (multi-arch)")
fi
done
# Copy frontend images from ECR (built by build-frontend-image.yaml)
echo ""
echo "Copying frontend images from ECR..."
FRONTEND_IMAGES=()
for ARCH in "${ARCHITECTURES[@]}"; do
SOURCE_TAG="${{ github.sha }}-frontend-${ARCH}"
SOURCE_IMAGE="${ECR_HOSTNAME}/${REGISTRY_IMAGE}:${SOURCE_TAG}"
NGC_TAG="${NGC_VERSION_TAG}-${ARCH}"
NGC_IMAGE="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/dynamo-frontend:${NGC_TAG}"
echo "----------------------------------------"
echo "Copying: dynamo-frontend:${NGC_TAG}"
if crane copy "${SOURCE_IMAGE}" "${NGC_IMAGE}"; then
echo "✅ Copied: dynamo-frontend:${NGC_TAG}"
SUCCESSFUL_COPIES+=("dynamo-frontend:${NGC_TAG}")
FRONTEND_IMAGES+=("${NGC_IMAGE}")
else
echo "⚠️ Warning: Failed to copy dynamo-frontend (${ARCH}), skipping..."
FAILED_COPIES+=("dynamo-frontend:${NGC_TAG}")
fi
done
done
# Create multi-arch manifest for frontend
echo ""
echo "Creating multi-arch manifest for dynamo-frontend..."
FRONTEND_MULTIARCH="${NGC_REGISTRY}/${NGC_ORG}/ai-dynamo/dynamo-frontend:${NGC_VERSION_TAG}"
if [ ${#FRONTEND_IMAGES[@]} -eq 2 ]; then
echo "Creating manifest index: ${FRONTEND_MULTIARCH}"
docker manifest create "${FRONTEND_MULTIARCH}" \
"${FRONTEND_IMAGES[0]}" \
"${FRONTEND_IMAGES[1]}" || true
if docker manifest push "${FRONTEND_MULTIARCH}"; then
echo "✅ Created multi-arch manifest: dynamo-frontend:${NGC_VERSION_TAG}"
SUCCESSFUL_COPIES+=("dynamo-frontend:${NGC_VERSION_TAG} (multi-arch)")
else
echo "⚠️ Warning: Failed to create multi-arch manifest"
FAILED_COPIES+=("dynamo-frontend:${NGC_VERSION_TAG} (multi-arch)")
fi
else
echo "⚠️ Warning: Not all architectures available, skipping multi-arch manifest"
FAILED_COPIES+=("dynamo-frontend:${NGC_VERSION_TAG} (multi-arch - missing archs)")
fi
# Output counts for summary
echo "successful_count=${#SUCCESSFUL_COPIES[@]}" >> $GITHUB_OUTPUT
echo "failed_count=${#FAILED_COPIES[@]}" >> $GITHUB_OUTPUT
# Save lists for summary (newline-separated)
printf '%s\n' "${SUCCESSFUL_COPIES[@]}" > /tmp/successful_copies.txt
printf '%s\n' "${FAILED_COPIES[@]}" > /tmp/failed_copies.txt 2>/dev/null || true
echo "========================================"
echo "========================================"
echo "✅ NGC publishing completed for ${VERSION}rc${RC_NUMBER}"
echo "NGC Publishing Summary:"
echo " Successful: ${#SUCCESSFUL_COPIES[@]}"
echo " Failed: ${#FAILED_COPIES[@]}"
echo "========================================"
echo "========================================"
# Fail the step if all copies failed
if [ ${#SUCCESSFUL_COPIES[@]} -eq 0 ]; then
echo "❌ ERROR: No images were successfully copied to NGC!"
exit 1
fi
-
name
:
Create release summary
-
name
:
Create release summary
env
:
env
:
RC_TAG
:
${{ steps.rc_tag.outputs.rc_tag }}
RC_TAG
:
${{ steps.rc_tag.outputs.rc_tag }}
RC_NUMBER
:
${{ steps.rc_tag.outputs.rc_number }}
RC_NUMBER
:
${{ steps.rc_tag.outputs.rc_number }}
NGC_VERSION_TAG
:
${{ steps.rc_tag.outputs.ngc_version_tag }}
SUCCESSFUL_COUNT
:
${{ steps.copy_images.outputs.successful_count }}
FAILED_COUNT
:
${{ steps.copy_images.outputs.failed_count }}
CI_PIPELINE_RESULT
:
${{ needs.ci-pipeline.result }}
FRONTEND_BUILD_RESULT
:
${{ needs.frontend-build.result }}
run
:
|
run
:
|
echo "## Release Summary" >> $GITHUB_STEP_SUMMARY
echo "## Release Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
echo "| Property | Value |" >> $GITHUB_STEP_SUMMARY
echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY
echo "|----------|-------|" >> $GITHUB_STEP_SUMMARY
echo "| Version | ${VERSION} |" >> $GITHUB_STEP_SUMMARY
echo "| Version | ${VERSION} |" >> $GITHUB_STEP_SUMMARY
echo "|
RC
Tag | ${RC_TAG} |" >> $GITHUB_STEP_SUMMARY
echo "|
Git
Tag | ${RC_TAG} |" >> $GITHUB_STEP_SUMMARY
echo "|
RC Number | ${RC_NUMBER
} |" >> $GITHUB_STEP_SUMMARY
echo "|
NGC Version Tag | ${NGC_VERSION_TAG
} |" >> $GITHUB_STEP_SUMMARY
echo "| Commit | ${{ github.sha }} |" >> $GITHUB_STEP_SUMMARY
echo "| Commit | ${{ github.sha }} |" >> $GITHUB_STEP_SUMMARY
echo "| Branch | ${{ github.ref_name }} |" >> $GITHUB_STEP_SUMMARY
echo "| Branch | ${{ github.ref_name }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Published Images" >> $GITHUB_STEP_SUMMARY
echo "### Build Status" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Pipeline | Result |" >> $GITHUB_STEP_SUMMARY
echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| CI Pipeline | ${CI_PIPELINE_RESULT} |" >> $GITHUB_STEP_SUMMARY
echo "| Frontend Build | ${FRONTEND_BUILD_RESULT} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### NGC Publishing Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "- ✅ **Successful copies**: ${SUCCESSFUL_COUNT}" >> $GITHUB_STEP_SUMMARY
echo "- ⚠️ **Failed copies**: ${FAILED_COUNT}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Expected Images" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Runtime images (CUDA 12):" >> $GITHUB_STEP_SUMMARY
echo "- \`vllm-runtime:${NGC_VERSION_TAG}-{amd64,arm64}\`" >> $GITHUB_STEP_SUMMARY
echo "- \`trtllm-runtime:${NGC_VERSION_TAG}-{amd64,arm64}\`" >> $GITHUB_STEP_SUMMARY
echo "- \`sglang-runtime:${NGC_VERSION_TAG}-{amd64,arm64}\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Runtime images (CUDA 13):" >> $GITHUB_STEP_SUMMARY
echo "- \`vllm-runtime:${NGC_VERSION_TAG}-cuda13\` (multi-arch: amd64, arm64)" >> $GITHUB_STEP_SUMMARY
echo "- \`vllm-runtime:${NGC_VERSION_TAG}-cuda13-amd64\`" >> $GITHUB_STEP_SUMMARY
echo "- \`vllm-runtime:${NGC_VERSION_TAG}-cuda13-arm64\`" >> $GITHUB_STEP_SUMMARY
echo "- \`sglang-runtime:${NGC_VERSION_TAG}-cuda13\` (multi-arch: amd64, arm64)" >> $GITHUB_STEP_SUMMARY
echo "- \`sglang-runtime:${NGC_VERSION_TAG}-cuda13-amd64\`" >> $GITHUB_STEP_SUMMARY
echo "- \`sglang-runtime:${NGC_VERSION_TAG}-cuda13-arm64\`" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "
Image tags published to NGC
:" >> $GITHUB_STEP_SUMMARY
echo "
Frontend images
:" >> $GITHUB_STEP_SUMMARY
echo "- \`
vllm-runtime:${VERSION}rc${RC_NUMBER}-{
amd64,arm64
}\`
" >> $GITHUB_STEP_SUMMARY
echo "- \`
dynamo-frontend:${NGC_VERSION_TAG}\` (multi-arch:
amd64,
arm64
)
" >> $GITHUB_STEP_SUMMARY
echo "- \`
trtllm-runtime:${VERSION}rc${RC_NUMBER
}-
{
amd64
,arm64}
\`" >> $GITHUB_STEP_SUMMARY
echo "- \`
dynamo-frontend:${NGC_VERSION_TAG
}-amd64\`" >> $GITHUB_STEP_SUMMARY
echo "- \`
sglang-runtime:${VERSION}rc${RC_NUMBER}-{amd64,
arm64
}
\`" >> $GITHUB_STEP_SUMMARY
echo "- \`
dynamo-frontend:${NGC_VERSION_TAG}-
arm64\`" >> $GITHUB_STEP_SUMMARY
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment