Two cooperating bugs we hit in production caused a Pillow version
mismatch error on in-place upgrades. Documenting both so future
projects do not reproduce them.
- Section 4.3: removed the "delete .py, keep .pyc" snippet (no
compileall step ever ran, so the dist shipped with no .py and no
.pyc — every package's submodules were unimportable). Added a
warning box and the correct compileall -b pattern.
- Section 6: NSIS Core section now shows explicit RMDir /r of payload
dirs before File /r. NSIS File /r is a merge, not a replace, so
upgrades produce half-old/half-new site-packages.
- Section 14: new troubleshooting entry "Pillow / package version
mismatch on upgrade" with the symptom, both root causes, and a
file-state table showing how the mismatch arises.
Bare labels like 'dev' or 'nightly' break pip/setuptools when
stamped into pyproject.toml. Add a regex check that falls back
to 0.0.0.dev0 with a warning, plus a callout explaining the
gotcha.
Describes a workflow_dispatch-triggered build.yml that produces
CI artifacts without creating a Gitea release. Useful for testing
builds before tagging.
- Section 10: Single source of truth via pyproject.toml + importlib.metadata,
CI version stamping, Docker build args, updated fallback chain
- Section 11: Release provider abstraction, PEP 440 version normalization,
install type detection, update service pattern, NSIS silent install,
portable ZIP/tarball swap scripts, API endpoints, frontend integration
Document the VBS wrapper approach for launching Windows apps
without console window flash. Update NSIS example to prefer
VBS over direct bat execution.
Add ::warning:: annotation and fallback to fetch existing release
when tag already has a release. Add troubleshooting section for
re-triggering failed release workflows. Fix markdown lint warnings.