name: Build and verify Qwen2.5 compatibility engines on: push: tags: - "v*" jobs: docker: runs-on: amd64-ubuntu-24.04 steps: - name: Clone tagged source run: | git clone "${{ gitea.server_url }}/${{ gitea.repository }}.git" . git checkout "${{ gitea.ref_name }}" - name: Run compatibility tests run: | python3 -m unittest discover -s tests -q bash -n vllm_wrapper.sh - name: Load image metadata run: | set -eu set -a . .gitea/workflows/task_info.env set +a test -n "$FRAMEWORK" test -n "$TASK_TYPE" test -n "$GPU_TYPES" echo "FRAMEWORK=$FRAMEWORK" >> "$GITEA_ENV" echo "TASK_TYPE=$TASK_TYPE" >> "$GITEA_ENV" echo "GPU_TYPES=$GPU_TYPES" >> "$GITEA_ENV" - name: Validate GPU and task metadata run: | set -eu test -n "${FIXED_TOKEN:-}" || { echo "FIXED_TOKEN is missing"; exit 1; } for gpu in $GPU_TYPES; do response="$(curl --silent --show-error --fail-with-body --location --get \ 'https://modelhub.org.cn/adminApi/image-verify/validate' \ --header "Xc-Token: $FIXED_TOKEN" \ --data-urlencode "gpuType=$gpu" \ --data-urlencode "taskType=$TASK_TYPE")" VALIDATE_RESPONSE="$response" python3 -c 'import json,os,sys; body=json.loads(os.environ["VALIDATE_RESPONSE"]); sys.exit(0 if body.get("code")==0 and body.get("data") is True else 1)' echo "validated gpuType=$gpu taskType=$TASK_TYPE" done - name: Log in to Docker registry run: | set -eu test -n "${DOCKER_REGISTRY:-}" test -n "${DOCKER_USERNAME:-}" test -n "${DOCKER_PASSWORD:-}" printf '%s' "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" \ -u "$DOCKER_USERNAME" --password-stdin - name: Build and push target images run: | set -eu image_name="$(printf '%s' '${{ gitea.repository }}' | tr '[:upper:]' '[:lower:]' | tr '_' '-')" image_base="$DOCKER_REGISTRY/$DOCKER_USERNAME/$image_name" a100_image="$image_base:${{ gitea.ref_name }}-nvidia-a100" cambricon_image="$image_base:${{ gitea.ref_name }}-cambricon-mlu370" metax_image="$image_base:${{ gitea.ref_name }}-metax-c500" vastai_image="$image_base:${{ gitea.ref_name }}-vastai-va16" docker build \ --build-arg BASE_IMAGE=harbor.4pd.io/dooke/vllm/vllm/vllm-openai:v0.11.0 \ -t "$a100_image" . docker build \ --build-arg BASE_IMAGE=harbor.4pd.io/hardcore-tech/cambricon-mlu370-pytorch:v25.01-20260228 \ -t "$cambricon_image" . docker build \ --build-arg BASE_IMAGE=harbor.4pd.io/modelhubxc/enginex-metax/vllm:0.9.1 \ --build-arg PYTHON_BIN=/opt/conda/bin/python3 \ --build-arg VLLM_BIN=/opt/conda/bin/vllm \ -t "$metax_image" . docker build \ --build-arg BASE_IMAGE=harbor.4pd.io/modelhubxc/sunruoxi/enginex-vastai-vllm-vacc-fix-tokenizer:VVI-26.02 \ -t "$vastai_image" . for image in "$a100_image" "$cambricon_image" "$metax_image" "$vastai_image"; do success=0 for attempt in 1 2 3; do if docker push "$image"; then success=1; break; fi echo "docker push attempt $attempt failed for $image" sleep 30 done test "$success" -eq 1 done echo "A100_IMAGE=$a100_image" >> "$GITEA_ENV" echo "CAMBRICON_IMAGE=$cambricon_image" >> "$GITEA_ENV" echo "METAX_IMAGE=$metax_image" >> "$GITEA_ENV" echo "VASTAI_IMAGE=$vastai_image" >> "$GITEA_ENV" - name: Notify ModelHub image verification run: | set -eu for gpu in $GPU_TYPES; do case "$gpu" in Nvidia-A100) image="$A100_IMAGE" ;; Cambricon_mlu-370-x4|Cambricon_mlu-370-x8) image="$CAMBRICON_IMAGE" ;; MetaX_c-500) image="$METAX_IMAGE" ;; Vastai_va16) image="$VASTAI_IMAGE" ;; *) echo "unknown GPU target: $gpu"; exit 1 ;; esac payload="$(GPU_TYPE="$gpu" IMAGE="$image" REPO_URL='${{ gitea.server_url }}/${{ gitea.repository }}' TAG='${{ gitea.ref_name }}' ACTOR='${{ gitea.actor }}' python3 -c 'import json, os; print(json.dumps({"framework": os.environ["FRAMEWORK"], "gpuType": os.environ["GPU_TYPE"], "imageUrl": os.environ["IMAGE"], "taskType": os.environ["TASK_TYPE"], "createBy": os.environ["ACTOR"], "repoUrl": os.environ["REPO_URL"], "tag": os.environ["TAG"]}))')" response="$(curl --silent --show-error --fail-with-body --location \ --request POST 'https://modelhub.org.cn/adminApi/image-verify' \ --header "Xc-Token: $FIXED_TOKEN" \ --header 'Content-Type: application/json' \ --data-raw "$payload")" VERIFY_RESPONSE="$response" python3 -c 'import json,os,sys; body=json.loads(os.environ["VERIFY_RESPONSE"]); sys.exit(0 if body.get("code")==0 else 1)' echo "submitted image verification for $gpu" done