Files
BYW-VoiceHub/patches/0032-fix-ci-deploy.yml-YAML-line-177-could-not-find-expec.patch
T

81 lines
4.5 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From afb4cd3669bf0a2f1c9d906238efa007c706a61b Mon Sep 17 00:00:00 2001
From: HenryDu8133 <813367384@qq.com>
Date: Fri, 11 Sep 2026 22:28:42 +0800
Subject: [PATCH 32/58] =?UTF-8?q?fix(ci):=20=E4=BF=AE=E5=A4=8D=20deploy.ym?=
=?UTF-8?q?l=20YAML=20=E8=AF=AD=E6=B3=95=E9=94=99=E8=AF=AF=EF=BC=88line=20?=
=?UTF-8?q?177=20could=20not=20find=20expected=20':'=EF=BC=89=EF=BC=8C?=
=?UTF-8?q?=E6=B6=88=E9=99=A4=20heredoc=20=E4=B8=8E=E5=9D=97=E6=A0=87?=
=?UTF-8?q?=E9=87=8F=E7=BC=A9=E8=BF=9B=E5=86=B2=E7=AA=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 根因:build-image job 注入 Docker daemon.json 时用了 bash heredoc <<'PY'...PY;heredoc 内部 Python 代码在 YAML 文件里缩进为 0,触发 run:| 字面块标量提前结束;Gitea YAML 解析器尝试把下一行解析为新的 key 却找不到冒号 → 抛 line 177 could not find expected ':',整个 workflow 无法触发
- 修复:移除 heredoc 结构,改为 PY_CODE 单引号字符串 + printf '%s' | python3 - stdin 管道传递;单引号内所有 Python 行统一保持与外层 shell 语句一致的 12 spaces 前导缩进(满足 YAML 块标量 ≥ 10 spaces 基础缩进要求);Python 顶级代码统一缩进 12 spaces,块内再缩进 4 spaces,避免 IndentationError
- 验证:IDE YAML 诊断 0 错误;Gitea Actions 页左侧 deploy.yml 红色感叹号应立即消失,可正常触发 run
---
.gitea/workflows/deploy.yml | 40 ++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
index 4077b1c..d803c3a 100644
--- a/.gitea/workflows/deploy.yml
+++ b/.gitea/workflows/deploy.yml
@@ -163,6 +163,8 @@ jobs:
# ========== 关键修复:宿主机 Docker daemon 先注入国内 registry mirrors ==========
# 原因:Runner 任何 docker pull / buildx create(moby/buildkit 拉基础镜像)都要先经过 daemon
# 如果直接连 docker.io,国内会被限速到 <200KB/s,导致 Setup / BuildKit 拉镜像一直卡。
+ # 注意:此处用 PY_CODE 字符串 + printf 管道传 Python 代码给 stdin,
+ # 避免 <<'PY' heredoc 结构与 YAML run:| 块标量缩进冲突导致的 could not find expected ':' 报错。
DOCKER_DAEMON_CONF="/etc/docker/daemon.json"
if command -v docker >/dev/null 2>&1 && command -v sudo >/dev/null 2>&1; then
sudo mkdir -p /etc/docker 2>/dev/null || true
@@ -170,27 +172,23 @@ jobs:
if [ -f "${DOCKER_DAEMON_CONF}" ]; then
OLD_MIRRORS_JSON="$(sudo cat "${DOCKER_DAEMON_CONF}" 2>/dev/null || echo "{}")"
fi
- # 用 python3 合成合法 JSON(避免 bash 手搓 JSON 转义坑)
- NEW_DAEMON_JSON="$(
- python3 - "$OLD_MIRRORS_JSON" \
- "${DOCKER_REGISTRY_MIRROR_1}" "${DOCKER_REGISTRY_MIRROR_2}" "${DOCKER_REGISTRY_MIRROR_3}" <<'PY'
-import json, sys
-try:
- data = json.loads(sys.argv[1] or "{}")
-except Exception:
- data = {}
-mirrors_envs = [m for m in sys.argv[2:5] if m]
-existing = data.get("registry-mirrors") or []
-if isinstance(existing, list):
- combined = list(dict.fromkeys([*mirrors_envs, *existing]))
-else:
- combined = mirrors_envs
-if combined:
- data["registry-mirrors"] = combined
-data.setdefault("log-driver", "json-file")
-print(json.dumps(data, ensure_ascii=False, indent=2))
-PY
- )"
+ PY_CODE=' import json, sys
+ try:
+ data = json.loads(sys.argv[1] or "{}")
+ except Exception:
+ data = {}
+ mirrors_envs = [m for m in sys.argv[2:5] if m]
+ existing = data.get("registry-mirrors") or []
+ if isinstance(existing, list):
+ combined = list(dict.fromkeys([*mirrors_envs, *existing]))
+ else:
+ combined = mirrors_envs
+ if combined:
+ data["registry-mirrors"] = combined
+ data.setdefault("log-driver", "json-file")
+ print(json.dumps(data, ensure_ascii=False, indent=2))'
+ NEW_DAEMON_JSON="$(printf '%s\n' "$PY_CODE" | python3 - "$OLD_MIRRORS_JSON" \
+ "${DOCKER_REGISTRY_MIRROR_1}" "${DOCKER_REGISTRY_MIRROR_2}" "${DOCKER_REGISTRY_MIRROR_3}")"
echo "${NEW_DAEMON_JSON}" | sudo tee "${DOCKER_DAEMON_CONF}" >/dev/null
echo "[Docker] daemon.json 已注入 registry-mirrors:"
sudo cat "${DOCKER_DAEMON_CONF}" 2>/dev/null || true
--
2.45.1.windows.1