#!/bin/bash

# 配置文件路径(与企业微信配置分离)
CONFIG_FILE="$(dirname "$0")/git_pull_config.env"

# 加载配置文件
if [ -f "$CONFIG_FILE" ]; then
    source "$CONFIG_FILE"
else
    WX_ROBOT_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx"  # 默认不发送通知
fi

# 获取脚本所在目录的绝对路径
repos_path="$(cd "$(dirname "$0")" && pwd)"

# 初始化统计变量(避免子 Shell 作用域问题)
declare -i total_repos=0 success_count=0 error_count=0
declare -a error_messages=()

# 关键修复:使用进程替换避免子 Shell 变量丢失
while IFS= read -r gitdir; do
    ((total_repos++))
    project_dir=$(dirname "$gitdir")
    echo -e "\n[ START ] 同步仓库: $project_dir"

    # 执行 git pull 并捕获输出
    exec_output=$(cd "$project_dir" && git pull 2>&1)
    exec_status=$?

    # 记录执行结果
    if [ $exec_status -eq 0 ]; then
        ((success_count++))
    else
        ((error_count++))
        error_messages+=("【失败】$project_dir\n<pre>${exec_output}</pre>")
    fi
done < <(find "$repos_path" -type d -name .git)  # 使用进程替换

# 构建企业微信通知内容
build_notification() {
    local status_icon="✅"
    [ $error_count -gt 0 ] && status_icon="⚠️"

    cat <<EOF
**Git 同步完成通知** ${status_icon}
> **同步时间**: $(date "+%Y-%m-%d %H:%M:%S")
> **扫描目录**: \`${repos_path}\`
> **仓库总数**: ${total_repos}
> **成功数量**: ${success_count}
> **失败数量**: ${error_count}
EOF

    [ $error_count -gt 0 ] && echo -e "\n**失败详情**:\n${error_messages[@]//$'\n'/\\n}"
}

# 发送企业微信通知(支持 Markdown)
send_wx_notification() {
    local content=$(build_notification | jq -Rs .)
    local json_payload=$(cat <<EOF
{
    "msgtype": "markdown",
    "markdown": {
        "content": ${content}
    }
}
EOF
)

    curl -sSL \
        -H "Content-Type: application/json" \
        -d "${json_payload}" \
        "${WX_ROBOT_URL}" | jq -r '.errmsg // "未知错误"'
}

# 执行通知(当配置有效时)
if [[ -n "$WX_ROBOT_URL" && "$WX_ROBOT_URL" == *qyapi.weixin.qq.com* ]]; then
    echo -e "\n🔄 正在发送企业微信通知..."
    result=$(send_wx_notification)
    [ "$result" == "ok" ] && echo "✅ 通知发送成功" || echo "❌ 通知发送失败: $result"
else
    echo -e "\n⚠️ 未配置有效企业微信机器人,跳过通知"
fi

echo -e "\n🏁 所有操作已完成"

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐