diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 71a7983..365d2ad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -129,3 +129,39 @@ jobs: args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + notify-telegram: + name: Telegram announce + runs-on: ubuntu-latest + needs: goreleaser + steps: + - name: Send release message + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} + CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} + run: | + BODY=$(gh release view "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" --json body -q .body | head -c 3000) + URL=$(gh release view "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" --json url -q .url) + # GH-markdown -> Telegram-HTML: сначала экранируем HTML, потом размечаем. + # Хвосты "by @user in " из авто-нотов убираем - в посте это шум. + HTML=$(printf '%s' "$BODY" \ + | sed 's/&/\&/g; s//\>/g' \ + | sed -E \ + -e 's| by @[[:alnum:]_-]+ in https://[^[:space:]]+||g' \ + -e 's|\[([^]]+)\]\((https?://[^)]+)\)|\1|g' \ + -e 's|\*\*([^*]+)\*\*|\1|g' \ + -e 's|`([^`]+)`|\1|g' \ + -e 's|^#{1,6}[[:space:]]+(.*)$|\1|' \ + -e 's|^[-*][[:space:]]+|• |') + TEXT=$(printf '🚀 FreeTurn %s\n\n%s\n\nРелиз на GitHub' "$GITHUB_REF_NAME" "$HTML" "$URL") + send() { + curl -fsS -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" \ + --data-urlencode "chat_id=${CHAT_ID}" \ + --data-urlencode "text=$1" \ + --data-urlencode "parse_mode=${2:-}" \ + --data-urlencode "disable_web_page_preview=true" \ + -o /dev/null + } + # Кривой HTML роняет весь sendMessage - фолбэк plain text, чтобы анонс не пропал + send "$TEXT" HTML || send "$(printf '🚀 FreeTurn %s\n\n%s\n\n%s' "$GITHUB_REF_NAME" "$BODY" "$URL")"