Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
- CI: bumped `actions/checkout` v4→v5 and `actions/setup-python` v5→v6 onto the Node 24 runtime ahead of GitHub's Node 20 removal, and added a `node --check` syntax gate for the dashboard's `app.js`.
- CI: added a `Build & release installer` workflow (manual dispatch or `v*` tag) that PyInstaller-freezes the four executables, compiles the Inno Setup installer, and uploads the artifact (attaching it to a GitHub Release on tag). Uses Node-24 actions (`checkout@v5`, `setup-python@v6`, `upload-artifact@v7`).
- Installer build: `build.ps1 -BundleAhk` now fetches AutoHotkey v2 from its GitHub release (pinned 2.0.26) instead of `autohotkey.com`, which began returning a Cloudflare bot-challenge page to non-browser clients (the download succeeded but `Expand-Archive` failed on the HTML). `autohotkey.com` is kept as a fallback.
- Installer compile: `installer.iss` now actually compiles end-to-end (the build workflow's first green run). Three latent bugs, each masking the next, are fixed: (1) a trailing `; ...` comment on the `MinVersion` directive was parsed as part of the value (Inno Setup only treats `;` as a comment at the start of a line); (2) no `SourceDir` was set, so Inno resolved every repo-root-relative `Source`/`SetupIconFile`/`OutputDir` against the script's own `installer\` directory — now `SourceDir=..`, which also lands the output at `<root>\out` where the build script and CI look for it; (3) an `{app}` Inno constant inside a Pascal `{ }` doc-comment in `[Code]` closed the comment early (these comments don't nest). Also ships `scripts\assets\*` (the tray `.ico` the AHK loads at runtime), which `[Files]` had omitted.

## 1.6.0

Expand Down
18 changes: 16 additions & 2 deletions installer/installer.iss
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,13 @@ AppUpdatesURL={#AppURL}/releases
DefaultDirName={commonpf}\FastFlowPrompt
DefaultGroupName={#AppName}
DisableProgramGroupPage=yes
; Every Source path below (dist\, vendor\, scripts\, SetupIconFile, LICENSE,
; README.md) is written relative to the REPO ROOT, but Inno Setup resolves
; relative paths against the directory containing this .iss by default — which
; is installer\, not the root. Point SourceDir at the root (this script lives
; in installer\, so "..") so every Source resolves. This also lands OutputDir
; at <root>\out, where build.ps1 and release-installer.yml look for the exe.
SourceDir=..
OutputDir=out
OutputBaseFilename=Flowkey-Setup-{#AppVersion}
PrivilegesRequired=admin
Expand Down Expand Up @@ -96,6 +103,10 @@ Source: "vendor\ahk\LICENSE.txt"; DestDir: "{app}\ahk"; Flags: ignoreversio
Source: "scripts\grammarFix.ahk"; DestDir: "{app}\scripts"; Flags: ignoreversion
Source: "scripts\lib\*"; DestDir: "{app}\scripts\lib"; Flags: ignoreversion recursesubdirs
Source: "scripts\ui\*"; DestDir: "{app}\scripts\ui"; Flags: ignoreversion recursesubdirs
; Tray/window icon — grammarFix.ahk loads {app}\scripts\assets\flowkey.ico at
; runtime (A_ScriptDir "\assets\flowkey.ico"); without this it silently has no
; tray icon. Same .ico is the compile-time SetupIconFile above.
Source: "scripts\assets\*"; DestDir: "{app}\scripts\assets"; Flags: ignoreversion recursesubdirs

; --- Docs ---------------------------------------------------------------------
Source: "LICENSE"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; DestName: "LICENSE.txt"
Expand Down Expand Up @@ -168,6 +179,7 @@ Type: filesandordirs; Name: "{app}\dist"
Type: dirifempty; Name: "{app}\ahk"
Type: dirifempty; Name: "{app}\scripts\lib"
Type: dirifempty; Name: "{app}\scripts\ui"
Type: dirifempty; Name: "{app}\scripts\assets"
Type: dirifempty; Name: "{app}\scripts"
Type: dirifempty; Name: "{app}"

Expand Down Expand Up @@ -269,8 +281,10 @@ begin
end;

{ During uninstall: ask whether to wipe per-user config/data/logs, then act.
Runs AFTER files in {app} are removed but BEFORE the uninstaller exits, so
the prompt isn't competing with file-in-use errors. }
Runs AFTER files in the install dir are removed but BEFORE the uninstaller
exits, so the prompt isn't competing with file-in-use errors.
NB: never put an Inno brace-constant in a Pascal comment — these comments
do not nest, so the constant's closing brace would end the comment early. }
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Wipe: Integer;
Expand Down