build: add single-command release script + portable zip artifacts

One-developer workflow: ``python build/make_release.py`` on each
target OS produces both the installer and a portable .zip for that
platform. Preflight checks PyInstaller / Pillow / iscc / hdiutil /
ditto / appimagetool and bails with install hints if anything is
missing — no half-built dist/.

New scripts:
- build/make_release.py   — orchestrator, auto-detects host OS.
- build/generate_icons.py — icon.ico / icon.icns / icon.png from
  src/gui/assets/datatools_icon_256.png (Pillow ships ICO + ICNS
  writers; no platform tooling needed).
- build/build_portable_zip.py — Win/Linux portable zip via stdlib.
- build/macos/build_zip.sh — Mac portable .app via ditto so
  bundle metadata survives.

installer.iss now adds: Quick Launch task (opt-in, legacy Win 7),
App Paths registry entry (Win+R "DataTools" works), SetupIconFile,
UninstallDisplayIcon, AppSupportURL, AppUpdatesURL.

CI workflow uploads installer + portable per platform and attaches
both to GitHub Releases on tag push.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-22 19:30:17 +00:00
parent 6627895a10
commit 9c426194b1
8 changed files with 706 additions and 29 deletions

5
.gitignore vendored
View File

@@ -11,6 +11,11 @@ dist/
build/build/
build/__pycache__/
build/dist/
# Generated by build/generate_icons.py from src/gui/assets/datatools_icon_256.png.
# Build artifacts, not source — regenerated each CI run.
build/icon.ico
build/icon.icns
build/icon.png
.pytest_cache/
# Claude Code agent worktrees + local settings