From 94a04e53fbb572ac22492b2e0ab19c1d749a7380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3-coder?= Date: Fri, 21 Nov 2025 10:28:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E6=B3=A8=E5=85=A5=E5=92=8C=E8=B0=83=E8=AF=95=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加详细的环境变量调试日志 - 改进变量替换逻辑,支持expandvars和手动替换双保险 - 提供更好的错误诊断信息和解决方案 - 显示环境变量设置状态和部分值(隐藏敏感信息) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- sync_repos.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/sync_repos.py b/sync_repos.py index 689ed20..b6acd88 100644 --- a/sync_repos.py +++ b/sync_repos.py @@ -17,13 +17,64 @@ def sync_repository(repo_config): print(f"❌ [{name}] 错误: 缺少 source_url 或 target_url") return False # 替换环境变量 - source_url = os.path.expandvars(source_url) - target_url = os.path.expandvars(target_url) + print(f"[DEBUG] ===== 变量替换开始 =====") + print(f"[DEBUG] 替换前的 source_url: {source_url}") + print(f"[DEBUG] 替换前的 target_url: {target_url}") + print(f"[DEBUG] 当前环境变量:") + + # 检查环境变量是否已设置 + env_vars = {} + for var in ['UPSTREAM_USERNAME', 'UPSTREAM_TOKEN', 'TARGET_USERNAME', 'TARGET_TOKEN']: + value = os.environ.get(var) + env_vars[var] = value + if value: + print(f"[DEBUG] {var}: 已设置 (长度: {len(value)})") + # 隐藏敏感信息(只显示前后几个字符) + if 'TOKEN' in var and len(value) > 8: + shown = value[:4] + '...' + value[-4:] + else: + shown = value + print(f"[DEBUG] {var} 值: {shown}") + else: + print(f"[DEBUG] {var}: ⚠️ 未设置或为空!会导致替换失败") + + # 方法1:使用 os.path.expandvars() + source_url_expanded = os.path.expandvars(source_url) + target_url_expanded = os.path.expandvars(target_url) + + # 方法2:手动替换(备用方案) + if '${' in source_url_expanded: + print(f"[DEBUG] os.path.expandvars() 未完全替换,尝试手动替换...") + for var, value in env_vars.items(): + if value: + source_url_expanded = source_url_expanded.replace(f"${{{var}}}", value) + source_url_expanded = source_url_expanded.replace(f"${var}", value) + + if '${' in target_url_expanded: + print(f"[DEBUG] os.path.expandvars() 未完全替换,尝试手动替换...") + for var, value in env_vars.items(): + if value: + target_url_expanded = target_url_expanded.replace(f"${{{var}}}", value) + target_url_expanded = target_url_expanded.replace(f"${var}", value) + + source_url = source_url_expanded + target_url = target_url_expanded + + print(f"[DEBUG] 最终 source_url: {source_url}") + print(f"[DEBUG] 最终 target_url: {target_url}") + print(f"[DEBUG] ===== 变量替换结束 =====") + # 检查必要的环境变量是否设置 if '${' in source_url: - print(f"⚠️ [{name}] 警告: source_url 中的环境变量未完全解析: {source_url}") + print(f"❌ [{name}] 错误: source_url 中的环境变量未完全解析: {source_url}") + print(f"❌ 这可能是因为:") + print(f" 1. 环境变量未传递给 Python 脚本") + print(f" 2. 变量名拼写错误") + print(f" 3. secrets 未在 Gitea 中正确配置") + return False if '${' in target_url: - print(f"⚠️ [{name}] 警告: target_url 中的环境变量未完全解析: {target_url}") + print(f"❌ [{name}] 错误: target_url 中的环境变量未完全解析: {target_url}") + return False print(f"\n{'='*60}") print(f"开始同步仓库: {name}") print(f"源地址: {source_url.split('@')[-1] if '@' in source_url else source_url}")