name: Анонс релиза # Telegram notifications for t.me/ha_houseplan (owner request, 2026-08-07). # Stable releases are announced; prereleases are deliberately silent. # workflow_dispatch exists purely as a connectivity test button and therefore # remains allowed to send a test message. # #538: НЕТ триггера `release: published`. Три воркфлоу висели на одном событии # и бежали параллельно, а анонсу нечего было проверять — он выигрывал гонку # всегда. 12.09 v1.75.0 объявили в канале в ту же минуту, когда гейт ассетов # отказал: релиз остался без `houseplan-card.js`, E2E не выполнялся вовсе, а # подписчики получили сообщение. Анонс вызывается только после того, как работа # сделана: `release.yml` зовёт его после выкладки ассетов, # `publish-prerelease.yml` — после публикации беты. on: workflow_dispatch: {} workflow_call: inputs: reusable: required: true type: boolean tag: required: true type: string release_name: required: true type: string url: required: true type: string prerelease: required: true type: boolean ref: required: true type: string secrets: TELEGRAM_BOT_TOKEN: required: true TELEGRAM_CHAT_ID: required: true permissions: contents: read jobs: telegram: name: Оповещение в Telegram (только стабильные) if: ${{ github.event_name == 'workflow_dispatch' || (github.event_name == 'workflow_call' && inputs.prerelease == false) }} runs-on: ubuntu-latest steps: - name: Check out release notes for a reusable call if: ${{ inputs.reusable == true }} uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 with: ref: ${{ inputs.ref }} - name: Send to Telegram env: TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} CHAT: ${{ secrets.TELEGRAM_CHAT_ID }} CALLED: ${{ inputs.reusable }} INPUT_TAG: ${{ inputs.tag }} INPUT_NAME: ${{ inputs.release_name }} INPUT_URL: ${{ inputs.url }} INPUT_PRE: ${{ inputs.prerelease }} EVENT: ${{ github.event_name }} run: | set -euo pipefail if [ "$EVENT" = "workflow_dispatch" ] && [ "$CALLED" != "true" ]; then TEXT="✅ Тест: оповещения о релизах houseplan-card подключены." else # Единственный путь к сообщению о релизе — вызов из воркфлоу, который # уже закончил работу (#538). Тело берётся из файла заметок ветки # тега, а не из события: события здесь больше нет. TAG=$INPUT_TAG NAME=$INPUT_NAME URL=$INPUT_URL PRE=$INPUT_PRE BODY=$(cat docs/RELEASE-NOTES.md) if [ "$PRE" = "true" ]; then echo "Prerelease Telegram announcement is disabled" exit 0 fi KIND="🏠 Релиз" SUMMARY=$(printf '%s' "$BODY" | head -c 2500) TEXT=$(printf '%s houseplan-card %s — %s\n\n%s\n\n%s' \ "$KIND" "$TAG" "$NAME" "$SUMMARY" "$URL") fi curl -sS --fail-with-body -X POST \ "https://api.telegram.org/bot$TOKEN/sendMessage" \ --data-urlencode "chat_id=$CHAT" \ --data-urlencode "text=$TEXT" \ -d disable_web_page_preview=true