mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
ci: единый staged→tested→published путь установочных ассетов (#540)
`release-zip.yml` выкладывал `houseplan.zip` в ту же секунду, когда релиз становился публичным — до Validate, Full Performance и E2E; `release.yml` параллельно пересобирал `houseplan-card.js`, а E2E требовал публичного ZIP, чтобы вообще начаться. Публикаторов было четыре, порядок — ни одного. Теперь публикатор стабильных один — `release.yml`: закрепить SHA → релиз в черновике (опубликованный руками немедленно возвращается в черновик) → гейты на SHA (трейлер `Release: <tag>`, контракт `--stable`, Validate, Full Performance, E2E на коммите-кандидате через tarball codeload) → одна сборка, `git archive` ZIP из того же дерева, `SHA256SUMS` → загрузка в черновик → публикация → скачать публичное и сверить с паспортом → анонс. Dispatch на публичный тег — ремонт: догружается только недостающее, расходящийся хеш — отказ. Беты кладут тот же паспорт; локальный публикатор больше не ждёт републикаторов — их нет. - `.github/workflows/release-zip.yml` удалён - `scripts/release-assets.mjs` — паспорт ассетов (`sums`/`check`), чистые функции под юнитами - `scripts/e2e-gate.mjs --ref=<sha>` — под тестом кандидат, `--tag` только для выбора `upgrade_from` - `scripts/release-contract.mjs --stable` - мутанты: независимый публикатор, снятая зависимость от гейта, релиз без возврата в черновик, `--clobber` в ремонте, E2E на теге, слепой паспорт Issue: #540 User-Visible: no
This commit is contained in:
@@ -59,11 +59,14 @@ test('full performance is isolated to stable, scheduled and manual entry points'
|
||||
assert.equal((workflow.match(/--candidate-sha=/g) || []).length, 2);
|
||||
|
||||
const release = readWorkflow('release.yml');
|
||||
assert.ok(release.includes('if: ${{ !github.event.release.prerelease }}'));
|
||||
// #540: признак стабильного — тег кандидата, не поле события: тот же гейт
|
||||
// работает и по `workflow_dispatch`, где события нет.
|
||||
assert.ok(release.includes("if: ${{ needs.candidate.outputs.prerelease != 'true' }}"));
|
||||
assert.ok(release.includes('--workflow=performance.yml --label="Полные бенчмарки производительности"'));
|
||||
assert.ok(release.includes('test -s dist/houseplan-panel.js'));
|
||||
assert.ok(release.includes('files: dist/houseplan-card.js'),
|
||||
assert.ok(release.includes('cp dist/houseplan-card.js houseplan.zip release-assets/'),
|
||||
'the standalone release asset remains card-only; the panel ships through HACS zip');
|
||||
assert.ok(!release.includes('softprops/action-gh-release'), 'one upload path (gh release upload into the draft), not two');
|
||||
});
|
||||
|
||||
test('#160 Stage 3 dense fixture extends rather than mutates the historical witness', () => {
|
||||
|
||||
Reference in New Issue
Block a user