name: Manually Build For Testing

on:
  workflow_dispatch:
    inputs:
      sha:
        description: 'commit id (SHA-1 hash)'
        required: true
        type: string
      artifact:
        description: 'select which job to run("all" will make all jobs run)'
        required: true
        default: 'all'
        type: choice
        options:
        - all
        - ipex-llm-cpu
        - ipex-llm-xpu
        - ipex-llm-inference-cpp-xpu
        - ipex-llm-serving-cpu
        - ipex-llm-serving-xpu
        - ipex-llm-serving-xpu-tgi
        - ipex-llm-finetune-lora-cpu
        - ipex-llm-finetune-qlora-cpu
        - ipex-llm-finetune-qlora-cpu-k8s
        - ipex-llm-finetune-xpu
      tag:
        description: 'docker image tag (e.g. test)'
        required: true
        default: 'test'
        type: string

env:
  TAG: ${{ github.event.inputs.tag }}

permissions:
  contents: read

jobs:
  ipex-llm-finetune-lora-cpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-finetune-lora-cpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]

    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-finetune-lora-cpu
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-finetune-lora-cpu ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-finetune-lora-cpu
        cd docker/llm/finetune/lora/cpu/docker
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-finetune-qlora-cpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-finetune-qlora-cpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]

    steps:
      - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
        with:
          ref: ${{ github.event.inputs.sha }}
      - name: docker login
        run: |
          docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
      - name: ipex-llm-finetune-qlora-cpu
        run: |
          echo "##############################################################"
          echo "####### ipex-llm-finetune-qlora-cpu ########"
          echo "##############################################################"
          export image=intelanalytics/ipex-llm-finetune-qlora-cpu
          cd docker/llm/finetune/qlora/cpu/docker
          sudo docker build \
            --no-cache=true \
            --build-arg http_proxy=${HTTP_PROXY} \
            --build-arg https_proxy=${HTTPS_PROXY} \
            --build-arg no_proxy=${NO_PROXY} \
            -t ${image}:${TAG} -f ./Dockerfile .
          sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
          sudo docker push 10.239.45.10/arda/${image}:${TAG}
          sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-finetune-qlora-cpu-k8s:
    if: ${{ inputs.artifact == 'ipex-llm-finetune-qlora-cpu-k8s' || inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]

    steps:
      - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      - name: docker login
        run: |
          docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
      - name: ipex-llm-finetune-qlora-cpu-k8s
        run: |
          echo "##############################################################"
          echo "####### ipex-llm-finetune-qlora-cpu-k8s ########"
          echo "##############################################################"
          export image=intelanalytics/ipex-llm-finetune-qlora-cpu-k8s
          cd docker/llm/finetune/qlora/cpu/docker
          sudo docker build \
            --no-cache=true \
            --build-arg http_proxy=${HTTP_PROXY} \
            --build-arg https_proxy=${HTTPS_PROXY} \
            --build-arg no_proxy=${NO_PROXY} \
            -t ${image}:${TAG} -f ./Dockerfile.k8s .
          sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
          sudo docker push 10.239.45.10/arda/${image}:${TAG}
          sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-finetune-xpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-finetune-xpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]

    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-finetune-xpu
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-finetune-xpu ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-finetune-xpu
        cd docker/llm/finetune/xpu
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-xpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-xpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]
    
    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-xpu
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-xpu ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-xpu
        cd docker/llm/inference/xpu/docker
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-serving-xpu-tgi:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-serving-xpu-tgi' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]
    
    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-serving-xpu-tgi
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-serving-xpu-tgi ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-serving-xpu-tgi
        cd docker/llm/serving/xpu-tgi
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-inference-cpp-xpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-inference-cpp-xpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]
    
    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-inference-cpp-xpu
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-inference-cpp-xpu ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-inference-cpp-xpu
        cd docker/llm/inference-cpp/
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-cpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-cpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]

    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-cpu
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-cpu ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-cpu
        cd docker/llm/inference/cpu/docker
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-serving-xpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-serving-xpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire]
    
    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-serving-xpu
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-serving-xpu ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-serving-xpu
        cd docker/llm/serving/xpu/docker
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

  ipex-llm-serving-cpu:
    if: ${{ github.event.inputs.artifact == 'ipex-llm-serving-cpu' || github.event.inputs.artifact == 'all' }}
    runs-on: [self-hosted, Shire, AVX512]

    steps:
    - uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # actions/checkout@v3
      with:
        ref: ${{ github.event.inputs.sha }}
    - name: docker login
      run: |
        docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
    - name: ipex-llm-serving-cpu
      run: |
        echo "##############################################################"
        echo "####### ipex-llm-serving-cpu ########"
        echo "##############################################################"
        export image=intelanalytics/ipex-llm-serving-cpu
        cd docker/llm/serving/cpu/docker
        sudo docker build \
          --no-cache=true \
          --build-arg http_proxy=${HTTP_PROXY} \
          --build-arg https_proxy=${HTTPS_PROXY} \
          --build-arg no_proxy=${NO_PROXY} \
          -t ${image}:${TAG} -f ./Dockerfile .
        sudo docker tag ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}
        sudo docker push 10.239.45.10/arda/${image}:${TAG}
        sudo docker rmi -f ${image}:${TAG} 10.239.45.10/arda/${image}:${TAG}

