Release Smoke Tests (Windows)
Goal
Prevent installer regressions by validating packaged behavior in a repeatable way.
Automated smoke command
- full flow (build + install + smoke):
npm run smoke:release- CI-friendly full flow (skip launch persistence check):
npm run test:release:smoke- re-check existing build/install:
powershell -ExecutionPolicy Bypass -File scripts/release-smoke.ps1 -SkipBuild -SkipInstall
What the smoke run validates
- Installer package is produced (unless
-SkipBuild). - Packaged worker exists:
release/win-unpacked/resources/python-worker/worker.exe- Installed worker exists:
%LOCALAPPDATA%\Programs\Math3D\resources\python-worker\worker.exe- CLI worker checks pass for packaged and installed executables:
worker.exe --pingworker.exe --version- Protocol smoke passes for packaged and installed executables:
pingmesh.preview(simple mesh op)mesh.transformwithvtk_clean_normals(VTK-based op)- App launch check passes (unless
-SkipLaunchCheck). - Worker smoke passes even when python/conda paths are removed from
PATH.
Manual release checklist
- Run
npm run smoke:releaseon release machine. - Install same installer on a clean Windows VM with no Python installation.
- Launch app from Start Menu / install folder.
- In implicit mode:
- run
preview (VTK) - run
gcalc (CGAL) - Confirm no fallback/setup prompt for system Python.
- If any failure occurs, collect diagnostics log from:
%APPDATA%\Math3D\logs\python-worker-diagnostics.log
GitHub Actions
- Build + worker smoke workflow:
.github/workflows/ci-build-and-worker-smoke.yml - Triggers: push/pull request to
main|master, manualworkflow_dispatch - Flow:
- install Node + Python
- install npm dependencies (
root+renderer) - install Python freeze dependencies (
pyinstaller,numpy,scipy,sympy,vtk) - try to install
pygalmesh(optional; workflow continues if unavailable on runner) - run
npm run build:core - run
npm run test:worker:smoke
- Installer smoke workflow:
.github/workflows/windows-release-smoke.yml - Runs on:
windows-latest - Trigger methods:
- push to
main|master - weekly schedule (Monday, 04:00 UTC)
- manual
workflow_dispatch(optionalskip_launch_checkinput) - PR label: add
ci:installer-smokelabel - API:
repository_dispatchevent typerun-installer-smoke
- push to
- Flow:
- install Node + Python
- install npm dependencies (
root+renderer) - install Python freeze dependencies (
pyinstaller,numpy,scipy,sympy,vtk) - try to install
pygalmesh(optional; workflow continues if unavailable on runner) - build installer, install silently, run packaged and installed worker smoke checks
Minimal packaged-build test plan
Build:npm run distInstall: silent install via smoke script or manual installer run.Health: worker--pingand--versionfor packaged and installedworker.exe.Function: one mesh preview + one VTK transform operation for packaged and installed workers.Launch: installed app process starts and remains running.Environment: smoke still passes without python/conda paths inPATH.