fix(e2e)+ci: канон callout '> [!info]' в e2e-mcp + параллельная сборка с гейтом на publish #356

Merged
agent_vscode merged 3 commits from fix/e2e-callout-and-gate-build into develop 2026-07-04 22:42:12 +03:00
Collaborator

Проблема

  1. Джоба e2e-mcp красная на develop с мержа #333: тест get_page md: callout exported as ::: ждёт старый канон :::info, а #333 сознательно сменил канон экспорта callout на Obsidian-нативный > [!type] (закреплено юнит-тестами packages/prosemirror-markdown; импортёр понимает оба синтаксиса). Ассерт в e2e при переходе просто пропустили.
  2. При этом образ :develop всё равно собирался и публиковался: e2e-джобы по старой политике сборку не гейтили.

Решение

  • test-e2e.mjs: ассерт обновлён под новый канон — md.data.content.includes("> [!info]").
  • develop.yml — двухфазная схема (сборка параллельна тестам, тесты гейтят только публикацию):
    • build идёт параллельно с test/e2e-server/e2e-mcp, только греет buildx-кэш (push: false, cache-to mode=max), логина в ghcr больше не требует;
    • новая джоба publish (needs: [test, e2e-server, e2e-mcp, build]) пересобирает из тёплого кэша (~1–2 мин при хите; при вытеснении кэша — полная пересборка, что равно старому последовательному таймингу) и пушит :develop;
    • блоки build-args текстуально идентичны в обеих джобах — гарантия кэш-хита; комментарии политики обновлены.

Итоговое время до публикации ≈ max(сборка, тесты) + ~2 мин вместо (тесты + сборка). Импорт-инпуты :::warning в e2e не тронуты. release.yml изменений не требует (уже гейтится юнит-тестами, e2e там нет).

🤖 Generated with Claude Code

## Проблема 1. Джоба `e2e-mcp` красная на develop с мержа #333: тест `get_page md: callout exported as :::` ждёт старый канон `:::info`, а #333 сознательно сменил канон экспорта callout на Obsidian-нативный `> [!type]` (закреплено юнит-тестами `packages/prosemirror-markdown`; импортёр понимает оба синтаксиса). Ассерт в e2e при переходе просто пропустили. 2. При этом образ `:develop` всё равно собирался и публиковался: e2e-джобы по старой политике сборку не гейтили. ## Решение - **test-e2e.mjs**: ассерт обновлён под новый канон — `md.data.content.includes("> [!info]")`. - **develop.yml — двухфазная схема** (сборка параллельна тестам, тесты гейтят только публикацию): - `build` идёт **параллельно** с `test`/`e2e-server`/`e2e-mcp`, только греет buildx-кэш (`push: false`, `cache-to mode=max`), логина в ghcr больше не требует; - новая джоба `publish` (`needs: [test, e2e-server, e2e-mcp, build]`) пересобирает из тёплого кэша (~1–2 мин при хите; при вытеснении кэша — полная пересборка, что равно старому последовательному таймингу) и пушит `:develop`; - блоки build-args текстуально идентичны в обеих джобах — гарантия кэш-хита; комментарии политики обновлены. Итоговое время до публикации ≈ max(сборка, тесты) + ~2 мин вместо (тесты + сборка). Импорт-инпуты `:::warning` в e2e не тронуты. `release.yml` изменений не требует (уже гейтится юнит-тестами, e2e там нет). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
agent_vscode added 2 commits 2026-07-04 22:33:37 +03:00
PR #333 deliberately changed the canonical markdown export of callout
nodes to the Obsidian-native format ('> [!type]' + blockquote body,
pinned by packages/prosemirror-markdown unit tests); the importer still
parses both ':::type' fences and '> [!type]'. The get_page e2e assertion
was missed in that switch and still expected ':::info', failing the
e2e-mcp job on develop since 4369bbc5.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Reverse the previous policy where e2e jobs only turned the run red
without blocking the image publish: build.needs now lists test,
e2e-server and e2e-mcp, so a failing test of any kind stops the
:develop image from being built and pushed. Stale policy comments
updated accordingly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
vvzvlad added 1 commit 2026-07-04 22:41:48 +03:00
Two-phase scheme instead of the sequential gate: the build job runs in
parallel with test/e2e jobs and only warms the buildx GHA cache
(push:false, cache-to mode=max); a new publish job (needs: test,
e2e-server, e2e-mcp, build) rebuilds from the warm cache (near-instant
on hit, full rebuild on eviction — same as the old sequential timing)
and pushes :develop. GHCR login moved to publish; build-args blocks are
kept textually identical between the two jobs so the cache hits.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
agent_vscode changed title from fix(e2e)+ci: канон callout '> [!info]' в e2e-mcp + e2e гейтят сборку образа to fix(e2e)+ci: канон callout '> [!info]' в e2e-mcp + параллельная сборка с гейтом на publish 2026-07-04 22:42:04 +03:00
agent_vscode merged commit 5336f06d10 into develop 2026-07-04 22:42:12 +03:00
Sign in to join this conversation.