129 lines
5.0 KiB
YAML
129 lines
5.0 KiB
YAML
name: Docker Build
|
||
|
||
on:
|
||
push:
|
||
tags:
|
||
- "v*"
|
||
|
||
jobs:
|
||
docker:
|
||
runs-on: amd64-ubuntu-24.04
|
||
steps:
|
||
- name: Clone repository
|
||
run: |
|
||
git clone "${{ gitea.server_url }}/${{ gitea.repository }}.git" .
|
||
git checkout "${{ gitea.ref_name }}"
|
||
|
||
- name: Load task info
|
||
run: |
|
||
set -a
|
||
. .gitea/workflows/task_info.env
|
||
set +a
|
||
echo "标签: ${{ gitea.ref_name }}"
|
||
echo "FRAMEWORK=${FRAMEWORK:-}"
|
||
echo "GPU_TYPE=${GPU_TYPE:-}"
|
||
echo "TASK_TYPE=${TASK_TYPE:-}"
|
||
if [ -z "${FRAMEWORK:-}" ] || [ "${FRAMEWORK}" = "vllm_fix_tokenizer" ]; then
|
||
echo "FRAMEWORK 无效。本仓使用 vllm_bi150_r2r4。"
|
||
exit 1
|
||
fi
|
||
if [ "${GPU_TYPE:-}" != "Iluvatar_bi-150" ]; then
|
||
echo "GPU_TYPE 与本仓锁定值不一致: ${GPU_TYPE:-空}"
|
||
exit 1
|
||
fi
|
||
IMAGE_NAME="$(echo "${{ gitea.repository }}" | tr '[:upper:]' '[:lower:]' | tr '_' '-')"
|
||
IMAGE_TAG="${{ gitea.ref_name }}"
|
||
echo "FRAMEWORK=${FRAMEWORK}" >> "$GITEA_ENV"
|
||
echo "GPU_TYPE=${GPU_TYPE}" >> "$GITEA_ENV"
|
||
echo "TASK_TYPE=${TASK_TYPE:-}" >> "$GITEA_ENV"
|
||
echo "IMAGE_NAME=${IMAGE_NAME}" >> "$GITEA_ENV"
|
||
echo "IMAGE_TAG=${IMAGE_TAG}" >> "$GITEA_ENV"
|
||
if [ -n "${DOCKER_REGISTRY:-}" ] && [ -n "${DOCKER_USERNAME:-}" ]; then
|
||
echo "IMAGE=${DOCKER_REGISTRY}/${DOCKER_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}" >> "$GITEA_ENV"
|
||
fi
|
||
|
||
# FIXED_TOKEN 由 Runner 注入,不写进仓库,也不打印。
|
||
- name: Validate Image Verify Metadata
|
||
run: |
|
||
if [ -z "${FIXED_TOKEN:-}" ]; then
|
||
echo "FIXED_TOKEN is not configured on runner"
|
||
exit 1
|
||
fi
|
||
if ! response="$(curl --silent --show-error --location --get \
|
||
'https://modelhub.org.cn/adminApi/image-verify/validate' \
|
||
--header "Xc-Token: ${FIXED_TOKEN}" \
|
||
--data-urlencode "gpuType=${GPU_TYPE:-}" \
|
||
--data-urlencode "taskType=${TASK_TYPE:-}")"; then
|
||
echo "调用 image-verify validate 失败"
|
||
exit 1
|
||
fi
|
||
VALIDATE_RESPONSE="$response" python3 - <<'PY'
|
||
import json
|
||
import os
|
||
import sys
|
||
|
||
raw = os.environ.get("VALIDATE_RESPONSE", "")
|
||
try:
|
||
body = json.loads(raw)
|
||
except json.JSONDecodeError:
|
||
print("image-verify validate 返回的不是合法 JSON")
|
||
print(raw)
|
||
sys.exit(1)
|
||
|
||
if body.get("code") == 0 and body.get("data") is True:
|
||
print("image-verify 元数据校验通过")
|
||
sys.exit(0)
|
||
|
||
print(f"image-verify 元数据校验失败: {body.get('message') or '未知错误'}")
|
||
print(raw)
|
||
sys.exit(1)
|
||
PY
|
||
|
||
- name: Build image
|
||
run: |
|
||
echo "开始 docker build,标签 ${IMAGE_TAG}"
|
||
docker build -t "${IMAGE_NAME}:${IMAGE_TAG}" .
|
||
echo "docker build 完成: ${IMAGE_NAME}:${IMAGE_TAG}"
|
||
|
||
- name: Push when registry credentials exist
|
||
run: |
|
||
if [ -z "${DOCKER_REGISTRY:-}" ] || [ -z "${DOCKER_USERNAME:-}" ] || [ -z "${DOCKER_PASSWORD:-}" ]; then
|
||
echo "未配置 DOCKER_REGISTRY、DOCKER_USERNAME 或 DOCKER_PASSWORD。"
|
||
echo "本次为 build-only,不登录仓库,不推送镜像,随后也不注册 image-verify。"
|
||
echo "PUSHED=0" >> "$GITEA_ENV"
|
||
exit 0
|
||
fi
|
||
echo "推送目标: ${IMAGE}"
|
||
echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" -u "$DOCKER_USERNAME" --password-stdin
|
||
docker tag "${IMAGE_NAME}:${IMAGE_TAG}" "$IMAGE"
|
||
docker push "$IMAGE"
|
||
echo "PUSHED=1" >> "$GITEA_ENV"
|
||
echo "推送完成: ${IMAGE}"
|
||
|
||
# 只有真的推成功才注册,build-only 没有可用的 imageUrl。
|
||
- name: Notify Image Verify
|
||
run: |
|
||
if [ "${PUSHED:-0}" != "1" ]; then
|
||
echo "镜像未推送,跳过 image-verify 注册。"
|
||
exit 0
|
||
fi
|
||
if [ -z "${FIXED_TOKEN:-}" ]; then
|
||
echo "FIXED_TOKEN is not configured on runner"
|
||
exit 1
|
||
fi
|
||
echo "注册 image-verify: ${IMAGE}"
|
||
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 "{
|
||
\"framework\": \"${FRAMEWORK}\",
|
||
\"gpuType\": \"${GPU_TYPE}\",
|
||
\"imageUrl\": \"${IMAGE}\",
|
||
\"taskType\": \"${TASK_TYPE}\",
|
||
\"createBy\": \"${{ gitea.actor }}\",
|
||
\"repoUrl\": \"${{ gitea.server_url }}/${{ gitea.repository }}\",
|
||
\"tag\": \"${{ gitea.ref_name }}\"
|
||
}"
|
||
echo "image-verify 注册请求已完成。适配下拉是否出现本引擎由人核对。"
|