From 6462b1b8a15449da515bafdee4826ee7253c4eae Mon Sep 17 00:00:00 2001 From: HenryDu8133 <813367384@qq.com> Date: Fri, 11 Sep 2026 23:35:12 +0800 Subject: [PATCH] fix(ci): embed python scripts as base64 to avoid YAML block scalar + preflight indentation conflict - resolves TASK-63 build-image IndentationError: unexpected indent --- .gitea/workflows/deploy.yml | 42 ++++--------------------------------- 1 file changed, 4 insertions(+), 38 deletions(-) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 87c6524..d0c7ad4 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -105,30 +105,10 @@ jobs: # 找 Node 22 最新 patch 版本号:不用 GitHub API,走 npmmirror 的 index.json 解析 NODE_VER="${NODE_VERSION_FALLBACK}" if command -v python3 >/dev/null 2>&1; then - # 注意:不使用 heredoc,避免 PY_MAJOR 前导缩进 0 导致 YAML 块标量提前结束解析失败 - PY_NODE_CODE=' import json, re, sys - try: - data = json.load(sys.stdin) - except Exception: - data = [] - target = sys.argv[1] if len(sys.argv) > 1 else "22" - best_triple = None - best_v = "" - for d in data: - v = d.get("version", "") - m = re.match(r"^v(\d+)\.(\d+)\.(\d+)", v) - if not m: continue - major, minor, patch = m.groups() - if major != target: continue - triple = (int(minor), int(patch)) - if (best_triple is None) or (triple > best_triple): - best_triple = triple - best_v = f"{major}.{minor}.{patch}" - if best_v: - print(best_v)' + PY_NODE_B64="aW1wb3J0IGpzb24sIHJlLCBzeXMKdHJ5OgogICAgZGF0YSA9IGpzb24ubG9hZChzeXMuc3RkaW4pCmV4Y2VwdCBFeGNlcHRpb246CiAgICBkYXRhID0gW10KdGFyZ2V0ID0gc3lzLmFyZ3ZbMV0gaWYgbGVuKHN5cy5hcmd2KSA+IDEgZWxzZSAiMjIiCmJlc3RfdHJpcGxlID0gTm9uZQpiZXN0X3YgPSAiIgpmb3IgZCBpbiBkYXRhOgogICAgdiA9IGQuZ2V0KCJ2ZXJzaW9uIiwgIiIpCiAgICBtID0gcmUubWF0Y2gociJedihcZCspXC4oXGQrKVwuKFxkKykiLCB2KQogICAgaWYgbm90IG06IGNvbnRpbnVlCiAgICBtYWpvciwgbWlub3IsIHBhdGNoID0gbS5ncm91cHMoKQogICAgaWYgbWFqb3IgIT0gdGFyZ2V0OiBjb250aW51ZQogICAgdHJpcGxlID0gKGludChtaW5vciksIGludChwYXRjaCkpCiAgICBpZiAoYmVzdF90cmlwbGUgaXMgTm9uZSkgb3IgKHRyaXBsZSA+IGJlc3RfdHJpcGxlKToKICAgICAgICBiZXN0X3RyaXBsZSA9IHRyaXBsZQogICAgICAgIGJlc3RfdiA9IGYie21ham9yfS57bWlub3J9LntwYXRjaH0iCmlmIGJlc3RfdjoKICAgIHByaW50KGJlc3Rfdik=" REMOTE_LATEST="" REMOTE_LATEST="$(curl -fsSL --max-time 20 "${NODE_MIRROR_PRIMARY}/index.json" 2>/dev/null \ - | printf '%s\n' "$PY_NODE_CODE" | python3 - "${NODE_MAJOR}" || true)" + | printf '%s' "$PY_NODE_B64" | base64 -d | python3 - "${NODE_MAJOR}" || true)" if [ -n "$REMOTE_LATEST" ]; then NODE_VER="$REMOTE_LATEST" echo "npmmirror 查得 Node 22 latest: v${NODE_VER}" @@ -277,22 +257,8 @@ jobs: if [ -f "${DOCKER_DAEMON_CONF}" ]; then OLD_MIRRORS_JSON="$(sudo cat "${DOCKER_DAEMON_CONF}" 2>/dev/null || echo "{}")" fi - 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" \ + PY_DAEMON_B64="aW1wb3J0IGpzb24sIHN5cwp0cnk6CiAgICBkYXRhID0ganNvbi5sb2FkcyhzeXMuYXJndlsxXSBvciAie30iKQpleGNlcHQgRXhjZXB0aW9uOgogICAgZGF0YSA9IHt9Cm1pcnJvcnNfZW52cyA9IFttIGZvciBtIGluIHN5cy5hcmd2WzI6NV0gaWYgbV0KZXhpc3RpbmcgPSBkYXRhLmdldCgicmVnaXN0cnktbWlycm9ycyIpIG9yIFtdCmlmIGlzaW5zdGFuY2UoZXhpc3RpbmcsIGxpc3QpOgogICAgY29tYmluZWQgPSBsaXN0KGRpY3QuZnJvbWtleXMoWyptaXJyb3JzX2VudnMsICpleGlzdGluZ10pKQplbHNlOgogICAgY29tYmluZWQgPSBtaXJyb3JzX2VudnMKaWYgY29tYmluZWQ6CiAgICBkYXRhWyJyZWdpc3RyeS1taXJyb3JzIl0gPSBjb21iaW5lZApkYXRhLnNldGRlZmF1bHQoImxvZy1kcml2ZXIiLCAianNvbi1maWxlIikKcHJpbnQoanNvbi5kdW1wcyhkYXRhLCBlbnN1cmVfYXNjaWk9RmFsc2UsIGluZGVudD0yKSk=" + NEW_DAEMON_JSON="$(printf '%s' "$PY_DAEMON_B64" | base64 -d | 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:"