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 注册请求已完成。适配下拉是否出现本引擎由人核对。"