Publish docker nightly to dockerhub & staging ECR repo #12
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: Publish docker nightly to dockerhub & staging ECR repo | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| mode: | |
| description: 'release/nightly, default is nightly' | |
| required: true | |
| default: 'nightly' | |
| type: choice | |
| options: | |
| - nightly | |
| - release | |
| commit_sha: | |
| description: 'specify which sha value the image was built with.' | |
| required: false | |
| default: '' | |
| arch: | |
| description: 'which images to build [ cpu, cpu-full, pytorch-inf2, pytorch-gpu, tensorrt-llm, lmi, aarch64]' | |
| type: string | |
| required: false | |
| default: '["cpu", "cpu-full", "pytorch-inf2", "pytorch-gpu", "tensorrt-llm", "lmi", "aarch64"]' | |
| workflow_call: | |
| inputs: | |
| mode: | |
| description: 'release/nightly, default is nightly' | |
| type: string | |
| required: true | |
| default: 'nightly' | |
| commit_sha: | |
| type: string | |
| description: 'specify which sha value the image aws built with.' | |
| required: false | |
| default: '' | |
| arch: | |
| description: 'which images to build [ cpu, cpu-full, pytorch-inf2, pytorch-gpu, tensorrt-llm, lmi, aarch64]' | |
| type: string | |
| required: false | |
| default: '["cpu", "cpu-full", "pytorch-inf2", "pytorch-gpu", "tensorrt-llm", "lmi", "aarch64"]' | |
| permissions: | |
| id-token: write | |
| contents: read | |
| env: | |
| AWS_TMP_ECR_REPO: "185921645874.dkr.ecr.us-east-1.amazonaws.com/djl-ci-temp" | |
| AWS_STAGING_ECR_REPO: "125045733377.dkr.ecr.us-east-1.amazonaws.com/djl-serving" | |
| ECR_REPO_REGION: "us-east-1" | |
| jobs: | |
| create-runners: | |
| runs-on: [ self-hosted, scheduler ] | |
| steps: | |
| - name: Create new CPU instance | |
| id: create_cpu_1 | |
| run: | | |
| cd /home/ubuntu/djl_benchmark_script/scripts | |
| token=$( curl -X POST -H "Authorization: token ${{ secrets.ACTION_RUNNER_PERSONAL_TOKEN }}" \ | |
| https://api.github.com/repos/deepjavalibrary/djl-serving/actions/runners/registration-token \ | |
| --fail \ | |
| | jq '.token' | tr -d '"' ) | |
| ./start_instance.sh action_cpu $token djl-serving | |
| - name: Create new CPU instance | |
| id: create_cpu_2 | |
| run: | | |
| cd /home/ubuntu/djl_benchmark_script/scripts | |
| token=$( curl -X POST -H "Authorization: token ${{ secrets.ACTION_RUNNER_PERSONAL_TOKEN }}" \ | |
| https://api.github.com/repos/deepjavalibrary/djl-serving/actions/runners/registration-token \ | |
| --fail \ | |
| | jq '.token' | tr -d '"' ) | |
| ./start_instance.sh action_cpu $token djl-serving | |
| - name: Create new CPU instance | |
| id: create_cpu_3 | |
| run: | | |
| cd /home/ubuntu/djl_benchmark_script/scripts | |
| token=$( curl -X POST -H "Authorization: token ${{ secrets.ACTION_RUNNER_PERSONAL_TOKEN }}" \ | |
| https://api.github.com/repos/deepjavalibrary/djl-serving/actions/runners/registration-token \ | |
| --fail \ | |
| | jq '.token' | tr -d '"' ) | |
| ./start_instance.sh action_cpu $token djl-serving | |
| outputs: | |
| cpu_instance_id1: ${{ steps.create_cpu_1.outputs.action_cpu_instance_id }} | |
| cpu_instance_id2: ${{ steps.create_cpu_2.outputs.action_cpu_instance_id }} | |
| cpu_instance_id3: ${{ steps.create_cpu_3.outputs.action_cpu_instance_id }} | |
| docker-sync: | |
| runs-on: | |
| - self-hosted | |
| - cpu | |
| - RUN_ID-${{ github.run_id }} | |
| - RUN_NUMBER-${{ github.run_number }} | |
| - SHA-${{ github.sha }} | |
| timeout-minutes: 60 | |
| needs: [create-runners] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| arch: ${{ startsWith(inputs.arch, '[') && fromJson(inputs.arch) || fromJson(format('[{0}]', inputs.arch)) }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Clean docker env | |
| working-directory: serving/docker | |
| run: | | |
| yes | docker system prune -a --volumes | |
| - name: Login to Docker | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Set up Python3 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.10.x' | |
| - name: Install pip dependencies | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install awscli | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@v4 | |
| with: | |
| role-to-assume: arn:aws:iam::185921645874:role/github-actions-djl-serving | |
| aws-region: us-east-1 | |
| - name: Login to ECR | |
| run: | | |
| aws ecr get-login-password --region ${{ env.ECR_REPO_REGION }} | docker login --username AWS --password-stdin ${{ env.AWS_TMP_ECR_REPO }} | |
| aws ecr get-login-password --region ${{ env.ECR_REPO_REGION }} | docker login --username AWS --password-stdin ${{ env.AWS_STAGING_ECR_REPO }} | |
| - name: Get DJL Version | |
| run: | | |
| DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' ./gradle/libs.versions.toml) | |
| echo "DJL_VERSION=$DJL_VERSION" >> $GITHUB_ENV | |
| - name: Pull and sync to docker hub | |
| working-directory: serving/docker | |
| run: | | |
| ./scripts/push_image_from_ECR.sh $DJL_VERSION deepjavalibrary/djl-serving ${{ inputs.mode }} ${{ matrix.arch }} ${{ inputs.commit_sha }} | |
| - name: Pull and sync to ECR | |
| working-directory: serving/docker | |
| run: | | |
| ./scripts/push_image_from_ECR.sh $DJL_VERSION $AWS_STAGING_ECR_REPO ${{ inputs.mode }} ${{ matrix.arch }} ${{ inputs.commit_sha }} | |
| - name: Clean docker env | |
| working-directory: serving/docker | |
| run: | | |
| yes | docker system prune -a --volumes | |
| stop-runners: | |
| if: always() | |
| runs-on: [ self-hosted, scheduler ] | |
| needs: [docker-sync, create-runners] | |
| steps: | |
| - name: Stop all instances | |
| run: | | |
| cd /home/ubuntu/djl_benchmark_script/scripts | |
| instance_id=${{ needs.create-runners.outputs.cpu_instance_id1 }} | |
| ./stop_instance.sh $instance_id | |
| instance_id=${{ needs.create-runners.outputs.cpu_instance_id2 }} | |
| ./stop_instance.sh $instance_id | |
| instance_id=${{ needs.create-runners.outputs.cpu_instance_id3 }} | |
| ./stop_instance.sh $instance_id |