Skip to content

ci(smoke): every smoke leg gates + fix matrix collapse (no false-green)#882

Merged
DeusData merged 1 commit into
mainfrom
fix/smoke-gating
Jul 5, 2026
Merged

ci(smoke): every smoke leg gates + fix matrix collapse (no false-green)#882
DeusData merged 1 commit into
mainfrom
fix/smoke-gating

Conversation

@DeusData

@DeusData DeusData commented Jul 5, 2026

Copy link
Copy Markdown
Owner

Fixes two defects that let the release dry run report green despite real smoke-windows failures (surfaced by the strict release dry run). Companion to #872 (which did the same for _test.yml).

1. Matrix collapse — native platforms silently weren't running

The smoke matrices used {variant:[standard,ui], include:$OS_LIST}. GitHub's include-merge overwrites the variant combos last-wins with each OS entry, so only the last OS ran (both variants) and the earlier ones were dropped. In broad mode:

  • windows smoke → only windows-11-arm (emulated x86_64), never windows-latest (native x86_64)
  • unix → only macos-15; portable → only ubuntu-22.04-arm

So the dry-run smoke was testing one OS per category. Rebuilt each matrix as an explicit os × variant cartesian (flat include list) so every leg runs. Windows smoke now = windows-latest + windows-2025 + windows-11-arm, each × standard/ui.

2. Optional escape hatch — failures didn't gate

The broad legs carried optional:true + continue-on-error: ${{ matrix.optional == true }}, so a failing leg didn't fail _smoke.yml → didn't gate the dry run or a release (release.yml calls the same _smoke.yml, and release-draft's if: !failure() was bypassed). Removed all optional flags + the continue-on-error lines. Every product-smoke leg now gates.

Kept intentionally

  • smoke-packages stays continue-on-error: true — it builds the external Glama directory image + brew tap, not the shipped product binary; a broken directory listing must not block a release.
  • fail-fast: false kept so all legs still run for a complete picture on any failure.

Scope / CI-sensitivity

Refs #872.

Two defects let the release dry run report green despite real smoke failures:

1. Matrix collapse — the smoke matrices used {variant:[standard,ui],
   include:$OS_LIST}. GitHub's include-merge overwrites the variant combos
   last-wins with each OS entry, so only the LAST OS ran (both variants) and the
   earlier ones were silently dropped. In broad mode windows smoke only ran
   windows-11-arm (emulated x86_64), never windows-latest (native); unix only
   macos-15; portable only ubuntu-22.04-arm. Rebuild each matrix as an explicit
   os x variant cartesian so every leg actually runs.

2. Optional escape hatch — the broad legs carried optional:true +
   continue-on-error: matrix.optional, so a failing leg didn't fail _smoke.yml
   and didn't gate the dry run or a release. Removed all optional flags + the
   continue-on-error lines; every product-smoke leg now gates.

smoke-packages stays continue-on-error (external Glama directory image, not the
shipped product). fail-fast:false kept so all legs still run for a full picture.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
@DeusData DeusData merged commit 94ba1e2 into main Jul 5, 2026
16 checks passed
timothybrush pushed a commit to timothybrush/codebase-memory-mcp that referenced this pull request Jul 5, 2026
Two release-blockers surfaced once DeusData#882 made every smoke leg a required gate
(continue-on-error previously masked them):

- smoke-unix ran the *dynamic* linux binary on ubuntu-22.04 / 22.04-arm, where
  it cannot start (it links glibc 2.38+) -> Phase 1 died. Older-glibc coverage
  is the -portable (static) binary's job and is green via the smoke-linux-portable
  broad legs, so drop the impossible dynamic broad legs (keep macOS).
- the ClamAV scan died on every linux leg: apt auto-starts the clamav-freshclam
  daemon which holds the freshclam log lock, so the manual freshclam failed with
  "Failed to lock the log file ... Resource temporarily unavailable". Stop the
  daemon first.

Also add native ARM64 Windows as a first-class release target -- the one platform
we test (windows-11-arm) but never shipped:
- build-windows-arm64 job (CLANGARM64) producing codebase-memory-mcp[-ui]-windows-arm64.zip
- smoke-windows is now arch-aware: windows-11-arm smokes the NATIVE arm64 binary
  instead of the x86_64 binary under emulation
- a native soak-quick-windows-arm64 leg (no sanitizer -- ASan is unavailable on
  native ARM64 Windows)
- arm64 detection in install.ps1

release.yml already publishes windows-arm64 (asset filter + merge-multiple) and
build_update_url/detect_arch already resolve it; npm/pip/install.sh compute arm64
already. scoop/winget/chocolatey per-version manifests are updated at release time.

Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant