diff --git a/.github/workflows/close-issue-on-pr-merge.yml b/.github/workflows/close-issue-on-pr-merge.yml index b7e4894..89d2998 100644 --- a/.github/workflows/close-issue-on-pr-merge.yml +++ b/.github/workflows/close-issue-on-pr-merge.yml @@ -1,5 +1,6 @@ # PR 合并后自动关闭关联的 Issue # 当 PR 从 ai_fix/N_xxx 分支合并到 main 时,关闭 #N 对应的 Issue(若 PR 描述中未含 Closes #N 则通过分支名解析) +# 关闭后发送 Telegram 通知(复用 TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID) name: Close issue on PR merge @@ -42,6 +43,22 @@ jobs: echo "skip=false" >> $GITHUB_OUTPUT echo "解析到 Issue #$ISSUE_NUM" + - name: Get issue details + if: steps.pr.outputs.skip != 'true' + id: issue + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + ISSUE_NUM="${{ steps.pr.outputs.ISSUE_NUMBER }}" + # 获取 issue 标题与 URL(用于 TG 消息) + JSON=$(gh issue view "$ISSUE_NUM" --json title,url 2>/dev/null || echo '{"title":"","url":""}') + TITLE=$(echo "$JSON" | jq -r '.title') + ISSUE_URL=$(echo "$JSON" | jq -r '.url') + echo "title<> $GITHUB_OUTPUT + echo "$TITLE" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + echo "url=$ISSUE_URL" >> $GITHUB_OUTPUT + - name: Close issue if: steps.pr.outputs.skip != 'true' uses: actions/github-script@v7 @@ -68,3 +85,43 @@ jobs: } else { console.log(`Issue #${issueNumber} already closed.`); } + + - name: Send Telegram notification + if: steps.pr.outputs.skip != 'true' + env: + TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} + TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} + run: | + # 与 docker-build 一致:未配置则跳过 + if [ -z "$TELEGRAM_BOT_TOKEN" ] || [ -z "$TELEGRAM_CHAT_ID" ]; then + echo "⚠️ Telegram Bot Token 或 Chat ID 未配置,跳过通知" + exit 0 + fi + + ISSUE_NUM="${{ steps.pr.outputs.ISSUE_NUMBER }}" + ISSUE_TITLE="${{ steps.issue.outputs.title }}" + ISSUE_URL="${{ steps.issue.outputs.url }}" + PR_URL="${{ github.event.pull_request.html_url }}" + + # 与 docker-build 相同的 HTML 消息格式 + MESSAGE="✅ AI 修复的 Issue 已关闭"$'\n'$'\n'"🔢 Issue: #${ISSUE_NUM} ${ISSUE_TITLE}"$'\n'"📎 查看 Issue"$'\n'"🔗 查看 PR" + + curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg chat_id "$TELEGRAM_CHAT_ID" \ + --arg text "$MESSAGE" \ + '{chat_id: $chat_id, text: $text, parse_mode: "HTML", disable_web_page_preview: false}')" > /tmp/telegram_response.json + + if [ $? -eq 0 ]; then + RESPONSE=$(cat /tmp/telegram_response.json) + if echo "$RESPONSE" | grep -q '"ok":true'; then + echo "✅ Telegram 通知发送成功" + else + echo "❌ Telegram 通知发送失败: $RESPONSE" + exit 0 + fi + else + echo "❌ 发送 Telegram 消息时发生错误" + exit 0 + fi