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}")