Skip to content

Build and push docker nightly #2125

Build and push docker nightly

Build and push docker nightly #2125

name: Build and push docker nightly
on:
workflow_dispatch:
inputs:
mode:
description: 'release/nightly/temp, default is nightly'
required: true
default: 'nightly'
skip_nightly_integ_test:
description: 'buld and push the nightly without running integ test'
required: false
default: false
type: boolean
workflow_call:
inputs:
mode:
description: 'release/nightly/temp, default is nightly'
type: string
required: true
default: 'nightly'
# schedule:
# - cron: '0 13 * * *'
permissions:
id-token: write
contents: read
env:
# AWS_ECR_REPO: "243947502783.dkr.ecr.us-east-1.amazonaws.com/djl-tmp"
AWS_ECR_REPO: "185921645874.dkr.ecr.us-east-1.amazonaws.com/djl-ci-temp"
DOCKER_HUB_REPO: "deepjavalibrary/djl-serving"
jobs:
nightly-build:
runs-on: ubuntu-latest
strategy:
matrix:
arch: [ cpu, cpu-full, pytorch-inf2, pytorch-gpu, tensorrt-llm, lmi ]
steps:
- name: Clean disk space
run: |
sudo rm -rf \
/usr/share/dotnet /usr/local/lib/android /opt/ghc \
/usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
$AGENT_TOOLSDIRECTORY
- uses: actions/checkout@v4
# - name: Login to Docker
# uses: docker/login-action@v3
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}
- name: install awscli
run: |
sudo apt-get update
sudo apt-get install awscli -y
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
# role-to-assume: arn:aws:iam::243947502783:role/github_action_happy_amazonian
role-to-assume: arn:aws:iam::185921645874:role/github-actions-djl-serving
aws-region: us-east-1
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'corretto'
java-version: 17
- uses: actions/cache@v4
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
- name: Extract DJL and DJL Serving versions from TOML
id: get-versions
run: |
DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
SERVING_VERSION=$(awk -F '=' '/serving / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
echo "DJL_VERSION=$DJL_VERSION" >> $GITHUB_ENV
echo "SERVING_VERSION=$SERVING_VERSION" >> $GITHUB_ENV
- name: Build serving package for nightly
if: ${{ inputs.mode == '' || inputs.mode == 'nightly' }}
run: |
./gradlew --refresh-dependencies :serving:dockerDeb -Psnapshot
- name: Build and push nightly docker image
working-directory: serving/docker
run: |
export NIGHTLY="-nightly"
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }}-SNAPSHOT \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }}-SNAPSHOT \
${{ matrix.arch }}
- name: Tag and push temp image to ECR repo
if: ${{ !inputs.skip_nightly_integ_test && inputs.mode == 'nightly' || inputs.mode == 'temp'}}
working-directory: serving/docker
run: |
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${{env.AWS_ECR_REPO}}
tempTag="${{ env.AWS_ECR_REPO }}:${{ matrix.arch }}-${GITHUB_SHA}"
docker tag ${{ env.DOCKER_HUB_REPO }}:${{ matrix.arch }}-nightly $tempTag
docker push $tempTag
- name: Push nightly to dockerhub
if: ${{ inputs.skip_nightly_integ_test && inputs.mode == 'nightly' }}
run: |
docker push ${{ env.DOCKER_HUB_REPO }}:${{ matrix.arch }}-nightly
- name: Build and push release docker image
if: ${{ inputs.mode == 'release' }}
working-directory: serving/docker
run: |
export BASE_RELEASE_VERSION="${{ env.SERVING_VERSION }}"
export RELEASE_VERSION="${{ env.SERVING_VERSION }}-"
docker compose build --no-cache \
--build-arg djl_version=${{ env.DJL_VERSION }} \
--build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
${{ matrix.arch }}
docker compose push ${{ matrix.arch }}
- name: Retag image for release
if: ${{ matrix.arch == 'cpu' && inputs.mode == 'release' }}
working-directory: serving/docker
run: |
docker tag deepjavalibrary/djl-serving:${{ env.SERVING_VERSION }} deepjavalibrary/djl-serving:latest
docker push deepjavalibrary/djl-serving:latest
run-integration-tests:
if: ${{ inputs.mode == 'nightly' && !inputs.skip_integ_test }}
needs: [nightly-build]
uses: ./.github/workflows/integration.yml
secrets: inherit
with:
djl-version: temp
push-to-dockerhub:
runs-on: ubuntu-latest
needs: [run-integration-tests]
strategy:
matrix:
arch: [ cpu, cpu-full, pytorch-inf2, pytorch-gpu, tensorrt-llm, lmi ]
steps:
- name: Login to Docker
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Pull Image from ECR and Push it to Dockerhub
run: |
echo TEST FAKE PUSHED
# aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin ${{env.AWS_ECR_REPO}}
# tempTag=" ${{env.AWS_ECR_REPO}}:${{ matrix.arch }}-${GITHUB_SHA}"
# docker pull $tempTag
# docker push ${{ env.DOCKER_HUB_REPO }}:${{ matrix.arch }}-nightly
# create-runner:
# runs-on: [ self-hosted, scheduler ]
# steps:
# - name: Create new Graviton instance
# id: create_aarch64
# 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_graviton $token djl-serving
# outputs:
# aarch64_instance_id: ${{ steps.create_aarch64.outputs.action_graviton_instance_id }}
# nightly-aarch64:
# runs-on: [ self-hosted, aarch64 ]
# timeout-minutes: 60
# needs: create-runner
# 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@v3
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}
# - name: install awscli
# run: |
# sudo apt-get update
# sudo apt-get install awscli -y
# - 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: Set up JDK 17
# uses: actions/setup-java@v4
# with:
# distribution: 'corretto'
# java-version: 17
# - uses: actions/cache@v4
# with:
# path: ~/.gradle/caches
# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
# - name: Extract DJL and DJL Serving versions from TOML
# id: get-versions
# run: |
# DJL_VERSION=$(awk -F '=' '/djl / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
# SERVING_VERSION=$(awk -F '=' '/serving / {gsub(/ ?"/, "", $2); print $2}' gradle/libs.versions.toml)
# echo "DJL_VERSION=$DJL_VERSION" >> $GITHUB_ENV
# echo "SERVING_VERSION=$SERVING_VERSION" >> $GITHUB_ENV
# - name: Build serving package for nightly
# if: ${{ inputs.mode == '' || inputs.mode == 'nightly' }}
# run: |
# ./gradlew --refresh-dependencies :serving:dockerDeb -Psnapshot
# - name: Build and push nightly docker image
# if: ${{ inputs.mode == '' || inputs.mode == 'nightly' }}
# working-directory: serving/docker
# run: |
# export NIGHTLY="-nightly"
# docker compose build --no-cache \
# --build-arg djl_version=${{ env.DJL_VERSION }}-SNAPSHOT \
# --build-arg djl_serving_version=${{ env.SERVING_VERSION }}-SNAPSHOT \
# aarch64
# docker compose push aarch64
# - name: Build and push temp image
# if: ${{ inputs.mode == 'temp' }}
# working-directory: serving/docker
# run: |
# export NIGHTLY="-nightly"
# docker compose build --no-cache \
# --build-arg djl_version=${{ env.DJL_VERSION }}-SNAPSHOT \
# --build-arg djl_serving_version=${{ env.SERVING_VERSION }}-SNAPSHOT \
# aarch64
# repo="185921645874.dkr.ecr.us-east-1.amazonaws.com/djl-ci-temp"
# aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $repo
# tempTag="$repo:aarch64-${GITHUB_SHA}"
# docker tag deepjavalibrary/djl-serving:aarch64-nightly $tempTag
# docker push $tempTag
# - name: Build and push release docker image
# if: ${{ inputs.mode == 'release' }}
# working-directory: serving/docker
# run: |
# export BASE_RELEASE_VERSION="${{ env.SERVING_VERSION }}"
# export RELEASE_VERSION="${{ env.SERVING_VERSION }}-"
# docker compose build --no-cache \
# --build-arg djl_version=${{ env.DJL_VERSION }} \
# --build-arg djl_serving_version=${{ env.SERVING_VERSION }} \
# aarch64
# docker compose push aarch64
# stop-runner:
# if: always()
# runs-on: [ self-hosted, scheduler ]
# needs: [nightly-aarch64, create-runner]
# steps:
# - name: Stop all instances
# run: |
# cd /home/ubuntu/djl_benchmark_script/scripts
# instance_id=${{ needs.create-runner.outputs.aarch64_instance_id }}
# ./stop_instance.sh $instance_id