The releases carried the wheel and the sdist; the only zip was GitHub's source
archive of the whole repository (tests, CI, tools). A Windows user just wants
to extract a folder and double-click start.bat.
- scripts/build_release_zip.py builds simtrace-analyser-<version>.zip with a
single top-level directory: the two Python packages, the PWA runtime files
(frontend/tests and package.json stay out), the four launchers, the udev
rule, the READMEs and the screenshot. The .bat entries are written with
CRLF line endings (cmd.exe mishandles bare-LF labels/goto), the .sh files
keep their executable bit; LICENSE is included automatically once the repo
has one.
- tests/test_release_zip.py pins the archive shape, the exclusions, the sw.js
PRECACHE drift (every precached asset must travel), the CRLF/LF line endings
and start.sh's mode.
- the release workflow builds the zip, checks it carries start.bat and the
PWA, uploads it with the run and attaches it to the release.
- READMEs (EN/RU) and the release-notes template offer the zip as the
Windows-friendly option; version 2.7.12, PWA cache v94.
Verified: the built zip (34 entries, 658 KB compressed) extracted and started
on Linux serves the same index.html; 553 Python + 80 Node tests.
The artifacts and the GitHub release were made by hand (`python -m build` plus
`gh release create`). `.github/workflows/release.yml` now does it from the
pushed tag: Python and PWA tests, the sdist/wheel build, a check that the
wheel carries the PWA, an install-and-serve smoke test of that wheel, and
`gh release create` with the generated notes (prepended by
`.github/release-notes.md`) and the three assets (wheel, sdist, udev rule).
A `workflow_dispatch` run does everything except publish, so the pipeline can
be exercised without minting a release; the artifacts land in the run. A tag
that does not match version.py/PWA_VERSION fails before anything is published.