Build/Test workflow trigger based on file changes and job-level concurrency for SageMaker endpoint tests #99
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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.check-changes.outputs.build-change }}" == "true" && "${{ 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 AWS_ACCOUNT_ID=${AWS_ACCOUNT_ID} >> ${GITHUB_OUTPUT} | |
| echo SGLANG_VERSION=${SGLANG_VERSION} >> ${GITHUB_OUTPUT} | |
| echo IMAGE_URI=${IMAGE_URI} >> ${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 }} |