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:
@@ -1,11 +1,26 @@
|
||||
; Inno Setup script for DataTools — Windows installer.
|
||||
;
|
||||
; Compile from the repo root:
|
||||
; iscc /DAppVersion=1.0.0 build\installer.iss
|
||||
; iscc /DAppVersion=3.0 build\installer.iss
|
||||
;
|
||||
; CI passes the version via /DAppVersion to keep src/__init__.py the
|
||||
; single source of truth. Local manual builds: pass /DAppVersion or
|
||||
; let the default kick in.
|
||||
;
|
||||
; What this installer wires up (covers the "easy launch" surface):
|
||||
; * Start Menu group: Start → DataTools → DataTools / Uninstall
|
||||
; * Desktop shortcut: optional, checked by default during install
|
||||
; * Quick Launch: optional, off by default (legacy Win 7 + power
|
||||
; users who keep the bar enabled). Windows 10/11
|
||||
; users pin to taskbar manually via right-click —
|
||||
; OS security policy forbids programmatic pinning.
|
||||
; * App Paths entry: so ``DataTools`` typed into Win+R / cmd works.
|
||||
;
|
||||
; Self-contained: the installer contains a frozen PyInstaller bundle
|
||||
; (Python + every runtime dep). No pre-install or post-install steps
|
||||
; on the buyer's machine. UAC is NOT required because we install
|
||||
; per-user by default; the prompt only fires if the buyer asks for an
|
||||
; all-users install.
|
||||
|
||||
#ifndef AppVersion
|
||||
#define AppVersion "0.0.0-dev"
|
||||
@@ -18,11 +33,15 @@ AppVersion={#AppVersion}
|
||||
AppVerName=DataTools {#AppVersion}
|
||||
AppPublisher=DataTools
|
||||
AppPublisherURL=https://datatools.app
|
||||
AppSupportURL=https://datatools.app/support
|
||||
AppUpdatesURL=https://datatools.app/releases
|
||||
DefaultDirName={autopf}\DataTools
|
||||
DefaultGroupName=DataTools
|
||||
DisableProgramGroupPage=yes
|
||||
OutputDir=..\dist
|
||||
OutputBaseFilename=DataTools-{#AppVersion}-win-setup
|
||||
SetupIconFile=icon.ico
|
||||
UninstallDisplayIcon={app}\DataTools.exe
|
||||
Compression=lzma2/max
|
||||
SolidCompression=yes
|
||||
WizardStyle=modern
|
||||
@@ -30,20 +49,37 @@ ArchitecturesInstallIn64BitMode=x64
|
||||
PrivilegesRequired=lowest
|
||||
PrivilegesRequiredOverridesAllowed=dialog
|
||||
; Allow per-user install (no UAC prompt) when admin isn't available.
|
||||
; Buyers without admin rights can still install without IT involvement.
|
||||
|
||||
ChangesAssociations=no
|
||||
CloseApplications=force
|
||||
RestartApplications=no
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Tasks]
|
||||
Name: "desktopicon"; Description: "Create a &desktop shortcut"; GroupDescription: "Additional shortcuts:"
|
||||
Name: "quicklaunchicon"; Description: "Create a &Quick Launch shortcut"; GroupDescription: "Additional shortcuts:"; Flags: unchecked; OnlyBelowVersion: 6.1
|
||||
|
||||
[Files]
|
||||
Source: "..\dist\DataTools\*"; DestDir: "{app}"; Flags: recursesubdirs ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\DataTools"; Filename: "{app}\DataTools.exe"
|
||||
; Start Menu entries — created unconditionally so the app is always
|
||||
; discoverable via Start search.
|
||||
Name: "{group}\DataTools"; Filename: "{app}\DataTools.exe"; IconFilename: "{app}\DataTools.exe"
|
||||
Name: "{group}\Uninstall DataTools"; Filename: "{uninstallexe}"
|
||||
Name: "{autodesktop}\DataTools"; Filename: "{app}\DataTools.exe"; Tasks: desktopicon
|
||||
; Desktop shortcut — opt-in via the Tasks page.
|
||||
Name: "{autodesktop}\DataTools"; Filename: "{app}\DataTools.exe"; IconFilename: "{app}\DataTools.exe"; Tasks: desktopicon
|
||||
; Quick Launch (legacy) — only relevant on Win 7 and older.
|
||||
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\DataTools"; Filename: "{app}\DataTools.exe"; IconFilename: "{app}\DataTools.exe"; Tasks: quicklaunchicon
|
||||
|
||||
[Registry]
|
||||
; App Paths — lets the buyer launch from Win+R or cmd with just
|
||||
; "DataTools" instead of a full path. Per-user hive so the per-user
|
||||
; install path doesn't need admin to register.
|
||||
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\DataTools.exe"; ValueType: string; ValueName: ""; ValueData: "{app}\DataTools.exe"; Flags: uninsdeletekey
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\DataTools.exe"; Description: "Launch DataTools"; Flags: nowait postinstall skipifsilent
|
||||
|
||||
Reference in New Issue
Block a user