Building the app
The standalone apps are built from the same source with one command, from an installed TRACE:
python build_app.py| Platform | Output |
|---|---|
| Windows | dist/TRACE-<version>-windows-<arch>.zip (TRACE\TRACE.exe inside) |
| macOS | dist/TRACE-<version>-macos-<arch>.dmg (TRACE.app inside) |
Each comes with a .sha256 beside it. A macOS build runs on the architecture it was built on – Apple Silicon or Intel.
What the build does
Section titled “What the build does”-
Bundles the application with PyInstaller, from one build definition (
TRACE.spec). Nothing is listed by hand: every TRACE module and every library’s data is collected by PyInstaller’s hooks, and libraries only optional code reaches are left out (about 70 MB). -
Packages it: a zip on Windows, a DMG on macOS – signed ad hoc and sealed, or with your own identity if
TRACE_CODESIGN_IDENTITYis set. Icons and the Windows version resource are generated from the logo and the version number. -
Tests the package, not the build folder: the zip is unpacked into a path with spaces and a non-ASCII letter, the DMG mounted read-only, and the app started with
--self-testagainst public images. Every check must pass and every image’s manifest must equal the test suite’s – or the build fails.
Releases
Section titled “Releases”-
Set
__version__intrace_app/__init__.pyand merge tomaster. -
Push a tag:
git tag v2.1.0 && git push origin v2.1.0. -
The Release workflow checks the tag matches the version, builds and self-tests the Windows x64 zip and both macOS DMGs on GitHub’s runners, and – only if every one passed – publishes the release with the packages and their checksums. GitHub adds the source archives.
A tag with a suffix, such as v2.1.0-rc1, is published as a pre-release.