99 lines
4.1 KiB
YAML
99 lines
4.1 KiB
YAML
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
|
|
|
|
- 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"
|
|
|
|
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" .
|
|
|
|
for image in "$a100_image" "$cambricon_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"
|
|
|
|
- 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" ;;
|
|
*) 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"]}))')"
|
|
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"
|
|
done
|