fix(ci): embed python scripts as base64 to avoid YAML block scalar + preflight indentation conflict - resolves TASK-63 build-image IndentationError: unexpected indent
This commit is contained in:
@@ -105,30 +105,10 @@ jobs:
|
|||||||
# 找 Node 22 最新 patch 版本号:不用 GitHub API,走 npmmirror 的 index.json 解析
|
# 找 Node 22 最新 patch 版本号:不用 GitHub API,走 npmmirror 的 index.json 解析
|
||||||
NODE_VER="${NODE_VERSION_FALLBACK}"
|
NODE_VER="${NODE_VERSION_FALLBACK}"
|
||||||
if command -v python3 >/dev/null 2>&1; then
|
if command -v python3 >/dev/null 2>&1; then
|
||||||
# 注意:不使用 heredoc,避免 PY_MAJOR 前导缩进 0 导致 YAML 块标量提前结束解析失败
|
PY_NODE_B64="aW1wb3J0IGpzb24sIHJlLCBzeXMKdHJ5OgogICAgZGF0YSA9IGpzb24ubG9hZChzeXMuc3RkaW4pCmV4Y2VwdCBFeGNlcHRpb246CiAgICBkYXRhID0gW10KdGFyZ2V0ID0gc3lzLmFyZ3ZbMV0gaWYgbGVuKHN5cy5hcmd2KSA+IDEgZWxzZSAiMjIiCmJlc3RfdHJpcGxlID0gTm9uZQpiZXN0X3YgPSAiIgpmb3IgZCBpbiBkYXRhOgogICAgdiA9IGQuZ2V0KCJ2ZXJzaW9uIiwgIiIpCiAgICBtID0gcmUubWF0Y2gociJedihcZCspXC4oXGQrKVwuKFxkKykiLCB2KQogICAgaWYgbm90IG06IGNvbnRpbnVlCiAgICBtYWpvciwgbWlub3IsIHBhdGNoID0gbS5ncm91cHMoKQogICAgaWYgbWFqb3IgIT0gdGFyZ2V0OiBjb250aW51ZQogICAgdHJpcGxlID0gKGludChtaW5vciksIGludChwYXRjaCkpCiAgICBpZiAoYmVzdF90cmlwbGUgaXMgTm9uZSkgb3IgKHRyaXBsZSA+IGJlc3RfdHJpcGxlKToKICAgICAgICBiZXN0X3RyaXBsZSA9IHRyaXBsZQogICAgICAgIGJlc3RfdiA9IGYie21ham9yfS57bWlub3J9LntwYXRjaH0iCmlmIGJlc3RfdjoKICAgIHByaW50KGJlc3Rfdik="
|
||||||
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)'
|
|
||||||
REMOTE_LATEST=""
|
REMOTE_LATEST=""
|
||||||
REMOTE_LATEST="$(curl -fsSL --max-time 20 "${NODE_MIRROR_PRIMARY}/index.json" 2>/dev/null \
|
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
|
if [ -n "$REMOTE_LATEST" ]; then
|
||||||
NODE_VER="$REMOTE_LATEST"
|
NODE_VER="$REMOTE_LATEST"
|
||||||
echo "npmmirror 查得 Node 22 latest: v${NODE_VER}"
|
echo "npmmirror 查得 Node 22 latest: v${NODE_VER}"
|
||||||
@@ -277,22 +257,8 @@ jobs:
|
|||||||
if [ -f "${DOCKER_DAEMON_CONF}" ]; then
|
if [ -f "${DOCKER_DAEMON_CONF}" ]; then
|
||||||
OLD_MIRRORS_JSON="$(sudo cat "${DOCKER_DAEMON_CONF}" 2>/dev/null || echo "{}")"
|
OLD_MIRRORS_JSON="$(sudo cat "${DOCKER_DAEMON_CONF}" 2>/dev/null || echo "{}")"
|
||||||
fi
|
fi
|
||||||
PY_CODE=' import json, sys
|
PY_DAEMON_B64="aW1wb3J0IGpzb24sIHN5cwp0cnk6CiAgICBkYXRhID0ganNvbi5sb2FkcyhzeXMuYXJndlsxXSBvciAie30iKQpleGNlcHQgRXhjZXB0aW9uOgogICAgZGF0YSA9IHt9Cm1pcnJvcnNfZW52cyA9IFttIGZvciBtIGluIHN5cy5hcmd2WzI6NV0gaWYgbV0KZXhpc3RpbmcgPSBkYXRhLmdldCgicmVnaXN0cnktbWlycm9ycyIpIG9yIFtdCmlmIGlzaW5zdGFuY2UoZXhpc3RpbmcsIGxpc3QpOgogICAgY29tYmluZWQgPSBsaXN0KGRpY3QuZnJvbWtleXMoWyptaXJyb3JzX2VudnMsICpleGlzdGluZ10pKQplbHNlOgogICAgY29tYmluZWQgPSBtaXJyb3JzX2VudnMKaWYgY29tYmluZWQ6CiAgICBkYXRhWyJyZWdpc3RyeS1taXJyb3JzIl0gPSBjb21iaW5lZApkYXRhLnNldGRlZmF1bHQoImxvZy1kcml2ZXIiLCAianNvbi1maWxlIikKcHJpbnQoanNvbi5kdW1wcyhkYXRhLCBlbnN1cmVfYXNjaWk9RmFsc2UsIGluZGVudD0yKSk="
|
||||||
try:
|
NEW_DAEMON_JSON="$(printf '%s' "$PY_DAEMON_B64" | base64 -d | python3 - "$OLD_MIRRORS_JSON" \
|
||||||
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}")"
|
"${DOCKER_REGISTRY_MIRROR_1}" "${DOCKER_REGISTRY_MIRROR_2}" "${DOCKER_REGISTRY_MIRROR_3}")"
|
||||||
echo "${NEW_DAEMON_JSON}" | sudo tee "${DOCKER_DAEMON_CONF}" >/dev/null
|
echo "${NEW_DAEMON_JSON}" | sudo tee "${DOCKER_DAEMON_CONF}" >/dev/null
|
||||||
echo "[Docker] daemon.json 已注入 registry-mirrors:"
|
echo "[Docker] daemon.json 已注入 registry-mirrors:"
|
||||||
|
|||||||
Reference in New Issue
Block a user