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

Три воркфлоу висели на одном событии `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
+24
View File
@@ -7735,6 +7735,30 @@ const MUTANT_DEFINITIONS = [
replace: ' settled=true; break',
}],
},
{
id: 'announce-listens-to-the-release-event-again',
guard: 'node --test test/release-workflow.test.mjs',
because: '#538: пока анонс висел на самом событии `release: published`, он бежал '
+ 'параллельно гейту и обгонял его — проверять ему нечего. 12.09 v1.75.0 объявили в '
+ 'канале в ту же минуту, когда проверка отказала выкладывать ассеты, и снаружи это '
+ 'выглядело обычным релизом',
patches: [{
file: '.github/workflows/announce.yml',
find: 'on:\n workflow_dispatch: {}',
replace: 'on:\n release:\n types: [published]\n workflow_dispatch: {}',
}],
},
{
id: 'announce-job-stops-waiting-for-the-assets',
guard: 'node --test test/release-workflow.test.mjs',
because: '#538: зависимость анонса от выкладки — это и есть правило «молчание тоже '
+ 'ответ». Без неё анонс уходит при красном гейте, то есть ровно то, что случилось',
patches: [{
file: '.github/workflows/release.yml',
find: ' name: Оповещение о релизе после выкладки\n needs: build',
replace: ' name: Оповещение о релизе после выкладки\n if: always()',
}],
},
{
id: 'render-invalidation-unknown-key-ignored',
guard: 'node --test test/render-invalidation.test.mjs',