Анонс уходит после выкладки ассетов, а не рядом с ней

Три воркфлоу висели на одном событии `release: published` и бежали
параллельно. Анонс выигрывал эту гонку всегда: проверять ему нечего. 12.09
стабильную v1.75.0 объявили в канале в ту же минуту, когда гейт отказал —
Full Performance был красный (#537), E2E после него не выполнялся вовсе,
ассеты не выкладывались. Подписчики получили сообщение о релизе, страница
которого осталась без `houseplan-card.js`.

Триггер события снят: у анонса остаются кнопка проверки связи и вызов из
воркфлоу. `release.yml` зовёт его после джобы выкладки (`needs: build`), то
есть красный гейт или несостоявшаяся выкладка сообщения не рождают. Путь беты
не тронут — `publish-prerelease.yml` звал анонс сам и раньше.

Мёртвая ветка чтения события из шага убрана вместе с триггером: тело берётся
из заметок ветки тега, как в вызове из беты.

Issue: #538
User-Visible: no
This commit is contained in:
Codex
2026-09-12 14:02:27 +03:00
parent c291384b7a
commit 293309355b
4 changed files with 84 additions and 23 deletions
+16 -23
View File
@@ -3,9 +3,14 @@ name: Анонс релиза
# 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:
release:
types: [published]
workflow_dispatch: {}
workflow_call:
inputs:
@@ -37,7 +42,7 @@ permissions:
jobs:
telegram:
name: Оповещение в Telegram (только стабильные)
if: ${{ github.event_name == 'workflow_dispatch' || (github.event_name == 'release' && github.event.release.prerelease == false) || (github.event_name == 'workflow_call' && inputs.prerelease == false) }}
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
@@ -54,32 +59,20 @@ jobs:
INPUT_NAME: ${{ inputs.release_name }}
INPUT_URL: ${{ inputs.url }}
INPUT_PRE: ${{ inputs.prerelease }}
RELEASE_TAG: ${{ github.event.release.tag_name }}
RELEASE_NAME: ${{ github.event.release.name }}
RELEASE_URL: ${{ github.event.release.html_url }}
RELEASE_PRE: ${{ github.event.release.prerelease }}
# The body goes through env, never through shell interpolation —
# release notes are arbitrary text.
RELEASE_BODY: ${{ github.event.release.body }}
EVENT: ${{ github.event_name }}
run: |
set -euo pipefail
if [ "$EVENT" = "workflow_dispatch" ] && [ "$CALLED" != "true" ]; then
TEXT="✅ Тест: оповещения о релизах houseplan-card подключены."
else
if [ "$CALLED" = "true" ]; then
TAG=$INPUT_TAG
NAME=$INPUT_NAME
URL=$INPUT_URL
PRE=$INPUT_PRE
BODY=$(cat docs/RELEASE-NOTES.md)
else
TAG=$RELEASE_TAG
NAME=$RELEASE_NAME
URL=$RELEASE_URL
PRE=$RELEASE_PRE
BODY=$RELEASE_BODY
fi
# Единственный путь к сообщению о релизе — вызов из воркфлоу, который
# уже закончил работу (#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