Skip to content

Build/Test workflow trigger based on file changes and job-level concurrency for SageMaker endpoint tests #97

Build/Test workflow trigger based on file changes and job-level concurrency for SageMaker endpoint tests

Build/Test workflow trigger based on file changes and job-level concurrency for SageMaker endpoint tests #97

Workflow file for this run

name: PR - SGLang
on:
pull_request:
branches:
- main
paths:
- "**sglang**"
permissions:
contents: read
concurrency:
group: pr-sglang-${{ github.event.pull_request.number }}
cancel-in-progress: true
env:
SGLANG_VERSION: "0.5.5"
PYTHON_VERSION: "py312"
CUDA_VERSION: "cu129"
OS_VERSION: "ubuntu22.04"
PROD_SAGEMAKER_IMAGE: sglang:0.5.5-gpu-py312-cu129-ubuntu22.04-sagemaker
FORCE_COLOR: "1"
jobs:
check-changes:
runs-on: ubuntu-latest
outputs:
build-change: ${{ steps.changes.outputs.build-change }}
test-change: ${{ steps.changes.outputs.test-change }}
steps:
- name: Checkout DLC source
uses: actions/checkout@v5
- name: Setup python
uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Run pre-commit
uses: pre-commit/action@v3.0.1
with:
extra_args: --all-files
- name: Detect file changes
id: changes
uses: dorny/paths-filter@v3
with:
filters: |
build-change:
- "docker/sglang/**"
- "scripts/sglang/**"
- "scripts/common/**"
- "scripts/telemetry/**"
- ".github/workflows/pr-sglang*"
test-change:
- "test/sglang/**"
build-sglang-image:
needs: [check-changes]
if: needs.check-changes.outputs.build-change == 'true'
runs-on:
- codebuild-runner-${{ github.run_id }}-${{ github.run_attempt }}
fleet:x86-build-runner
outputs:
ci-image: ${{ steps.image-uri-build.outputs.IMAGE_URI }}
steps:
- uses: actions/checkout@v5
- run: .github/scripts/runner_setup.sh
- run: .github/scripts/buildkitd.sh
- name: ECR login
uses: ./.github/actions/ecr-authenticate
with:
aws-account-id: ${{ vars.AWS_ACCOUNT_ID }}
aws-region: ${{ vars.AWS_REGION }}
- name: Resolve image URI for build
id: image-uri-build
run: |
IMAGE_URI=${{ vars.AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/ci:sglang-${{ env.SGLANG_VERSION }}-gpu-${{ env.PYTHON_VERSION }}-${{ env.CUDA_VERSION }}-${{ env.OS_VERSION }}-sagemaker-pr-${{ github.event.pull_request.number }}
echo "Image URI to build: ${IMAGE_URI}"
echo "IMAGE_URI=${IMAGE_URI}" >> ${GITHUB_ENV}
echo "IMAGE_URI=${IMAGE_URI}" >> ${GITHUB_OUTPUT}
- name: Build image
run: |
# base image: https://hub.docker.com/r/lmsysorg/sglang/tags
docker buildx build --progress plain \
--build-arg CACHE_REFRESH="$(date +"%Y-%m-%d")" \
--build-arg BASE_IMAGE="lmsysorg/sglang:v${{ env.SGLANG_VERSION }}-${{ env.CUDA_VERSION }}-amd64" \
--cache-to=type=inline \
--cache-from=type=registry,ref=${IMAGE_URI} \
--tag ${IMAGE_URI} \
--target sglang-sagemaker \
-f docker/sglang/Dockerfile .
- name: Container push
run: |
docker push ${IMAGE_URI}
docker rmi ${IMAGE_URI}
set-test-environment:
needs: [check-changes, build-sglang-image]
runs-on: ubuntu-latest
outputs:
aws-account-id: ${{ steps.set-env.outputs.AWS_ACCOUNT_ID }}
image-uri: ${{ steps.set-env.outputs.IMAGE_URI }}
sglang-version: ${{ steps.set-env.outputs.SGLANG_VERSION }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set test environment
id: set-env
run: |
if [ "${{ needs.build-sglang-image.result }}" == "success"]; then
AWS_ACCOUNT_ID=${{ vars.AWS_ACCOUNT_ID }}
IMAGE_URI=${{ needs.build-sglang-image.outputs.ci-image }}
elif [ "${{ needs.build-sglang-image.result }}" != "success"]; then
AWS_ACCOUNT_ID=${{ vars.PROD_AWS_ACCOUNT_ID }}
IMAGE_URI=${{ vars.PROD_AWS_ACCOUNT_ID }}.dkr.ecr.${{ vars.AWS_REGION }}.amazonaws.com/${{ env.PROD_SAGEMAKER_IMAGE }}
fi
echo IMAGE_URI=${IMAGE_URI} >> ${GITHUB_OUTPUT}
echo AWS_ACCOUNT_ID=${AWS_ACCOUNT_ID} >> ${GITHUB_OUTPUT}
echo SGLANG_VERSION=${SGLANG_VERSION} >> ${GITHUB_OUTPUT}
test-sglang-image:
needs: [set-test-environment]
if: needs.set-test-environment.result == 'success'
uses: ./.github/workflows/test-sglang.yml
with:
aws-account-id: ${{ needs.set-test-environment.outputs.aws-account-id }}
aws-region: ${{ vars.AWS_REGION }}
image-uri: ${{ needs.set-test-environment.outputs.image-uri }}
sglang-version: ${{ needs.set-test-environment.outputs.sglang-version }}