Skip to content

Commit ed3ccc9

Browse files
committed
feat: complete dual Windows installers with enhanced features
- Add System installer (admin required) and User installer (no admin) - Automatic PATH environment variable setup - Desktop shortcut checked by default - Proper icons in Windows uninstall programs list - Enhanced release documentation - Improved build notifications
1 parent e07f667 commit ed3ccc9

File tree

1 file changed

+139
-22
lines changed

1 file changed

+139
-22
lines changed

.github/workflows/build-release.yml

Lines changed: 139 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,12 @@ jobs:
233233
exit 1
234234
}
235235
236-
- name: Create Windows installer script
236+
- name: Create Windows installer scripts
237237
run: |
238238
$version = "${{ needs.build-linux.outputs.version }}"
239-
$issScript = @"
239+
240+
# SYSTEM INSTALLER (Admin required) - Fixed version
241+
$issSystemScript = @"
240242
#define MyAppName "FileFind"
241243
#define MyAppVersion "$version"
242244
#define MyAppPublisher "Nicolas DEOUX"
@@ -255,20 +257,24 @@ jobs:
255257
DefaultGroupName={#MyAppName}
256258
AllowNoIcons=yes
257259
OutputDir=.
258-
OutputBaseFilename=FileFind-Setup-{#MyAppVersion}
260+
OutputBaseFilename=FileFind-Setup-System-{#MyAppVersion}
259261
Compression=lzma
260262
SolidCompression=yes
261263
WizardStyle=modern
262264
ArchitecturesAllowed=x86 x64
263265
ArchitecturesInstallIn64BitMode=x64
266+
PrivilegesRequired=admin
267+
ChangesEnvironment=yes
268+
UninstallDisplayIcon={app}\{#MyAppExeName}
264269
265270
[Languages]
266271
Name: "english"; MessagesFile: "compiler:Default.isl"
267272
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
268273
269274
[Tasks]
270-
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
275+
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkonce
271276
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1
277+
Name: "addtopath"; Description: "Add to PATH environment variable"; GroupDescription: "System Integration"; Flags: checkonce
272278
273279
[Files]
274280
Source: "src\filefind.exe"; DestDir: "{app}"; Flags: ignoreversion
@@ -277,15 +283,86 @@ jobs:
277283
Source: "docs\*"; DestDir: "{app}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs
278284
279285
[Icons]
280-
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
286+
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"
281287
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
282-
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
283-
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
288+
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
289+
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
284290
285291
[Registry]
286292
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekeyifempty
287293
Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekeyifempty
288294
295+
[Environment]
296+
Name: "PATH"; Value: "{app}"; Flags: expandconstants; Check: IsTaskSelected('addtopath')
297+
298+
[Run]
299+
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
300+
301+
[Code]
302+
procedure InitializeWizard;
303+
begin
304+
WizardForm.LicenseAcceptedRadio.Checked := True;
305+
end;
306+
"@
307+
308+
# USER INSTALLER (No admin required)
309+
$issUserScript = @"
310+
#define MyAppName "FileFind"
311+
#define MyAppVersion "$version"
312+
#define MyAppPublisher "Nicolas DEOUX"
313+
#define MyAppURL "https://github.com/NDXDeveloper/FileFind"
314+
#define MyAppExeName "filefind.exe"
315+
316+
[Setup]
317+
AppId={{B8C5C1F0-8A2D-4E3F-9B1A-2C4D5E6F7G8H-USER}
318+
AppName={#MyAppName} (User Install)
319+
AppVersion={#MyAppVersion}
320+
AppPublisher={#MyAppPublisher}
321+
AppPublisherURL={#MyAppURL}
322+
AppSupportURL={#MyAppURL}
323+
AppUpdatesURL={#MyAppURL}
324+
DefaultDirName={localappdata}\Programs\{#MyAppName}
325+
DefaultGroupName={#MyAppName}
326+
AllowNoIcons=yes
327+
OutputDir=.
328+
OutputBaseFilename=FileFind-Setup-User-{#MyAppVersion}
329+
Compression=lzma
330+
SolidCompression=yes
331+
WizardStyle=modern
332+
ArchitecturesAllowed=x86 x64
333+
ArchitecturesInstallIn64BitMode=x64
334+
PrivilegesRequired=lowest
335+
PrivilegesRequiredOverridesAllowed=dialog
336+
ChangesEnvironment=yes
337+
UninstallDisplayIcon={app}\{#MyAppExeName}
338+
339+
[Languages]
340+
Name: "english"; MessagesFile: "compiler:Default.isl"
341+
Name: "french"; MessagesFile: "compiler:Languages\French.isl"
342+
343+
[Tasks]
344+
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkonce
345+
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1
346+
Name: "addtopath"; Description: "Add to PATH environment variable (current user only)"; GroupDescription: "User Integration"; Flags: checkonce
347+
348+
[Files]
349+
Source: "src\filefind.exe"; DestDir: "{app}"; Flags: ignoreversion
350+
Source: "README.md"; DestDir: "{app}"; Flags: ignoreversion
351+
Source: "LICENSE.txt"; DestDir: "{app}"; Flags: ignoreversion
352+
Source: "docs\*"; DestDir: "{app}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs
353+
354+
[Icons]
355+
Name: "{userprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"
356+
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
357+
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; IconFilename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
358+
359+
[Registry]
360+
Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName}"; Flags: uninsdeletekeyifempty
361+
Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\{#MyAppExeName}"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekeyifempty
362+
363+
[Environment]
364+
Name: "PATH"; Value: "{app}"; Flags: expandconstants; Check: IsTaskSelected('addtopath')
365+
289366
[Run]
290367
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent
291368
@@ -296,15 +373,21 @@ jobs:
296373
end;
297374
"@
298375
299-
$issScript | Out-File -FilePath "installer.iss" -Encoding utf8
376+
# Save both scripts
377+
$issSystemScript | Out-File -FilePath "installer-system.iss" -Encoding utf8
378+
$issUserScript | Out-File -FilePath "installer-user.iss" -Encoding utf8
300379
301380
- name: Install Inno Setup
302381
run: |
303382
choco install innosetup -y
304383
305-
- name: Create Windows installer
384+
- name: Create Windows installers
306385
run: |
307-
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer.iss
386+
# Create System installer (admin required)
387+
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer-system.iss
388+
389+
# Create User installer (no admin required)
390+
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" installer-user.iss
308391
309392
- name: Create portable Windows archive
310393
run: |
@@ -327,7 +410,8 @@ jobs:
327410
with:
328411
name: windows-builds
329412
path: |
330-
FileFind-Setup-*.exe
413+
FileFind-Setup-System-*.exe
414+
FileFind-Setup-User-*.exe
331415
filefind-windows-portable-*.zip
332416
src/filefind.exe
333417
retention-days: 30
@@ -374,10 +458,14 @@ jobs:
374458
375459
### Downloads 📦
376460
377-
- **Linux Debian/Ubuntu Package:** `filefind_${{ needs.build-linux.outputs.version }}_amd64.deb`
378-
- **Linux Portable Archive:** `filefind-linux-portable-${{ needs.build-linux.outputs.version }}.tar.gz`
379-
- **Windows Installer:** `FileFind-Setup-${{ needs.build-linux.outputs.version }}.exe`
380-
- **Windows Portable Archive:** `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
461+
**Linux:**
462+
- 📦 **Debian/Ubuntu Package:** `filefind_${{ needs.build-linux.outputs.version }}_amd64.deb`
463+
- 📁 **Portable Archive:** `filefind-linux-portable-${{ needs.build-linux.outputs.version }}.tar.gz`
464+
465+
**Windows:**
466+
- 🔧 **System Installer (Admin):** `FileFind-Setup-System-${{ needs.build-linux.outputs.version }}.exe`
467+
- 👤 **User Installer (No Admin):** `FileFind-Setup-User-${{ needs.build-linux.outputs.version }}.exe`
468+
- 📁 **Portable Archive:** `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
381469
382470
---
383471
@@ -417,19 +505,42 @@ jobs:
417505
```
418506
419507
#### Windows
420-
- **Installer:** Download and run `FileFind-Setup-${{ needs.build-linux.outputs.version }}.exe`
421-
- **Portable:** Download and extract `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
508+
509+
**System Installer (Recommended for Admins):**
510+
- Download and run `FileFind-Setup-System-${{ needs.build-linux.outputs.version }}.exe`
511+
- Requires administrator privileges
512+
- Installs for all users in Program Files
513+
- Automatically adds to system PATH
514+
515+
**User Installer (For Standard Users):**
516+
- Download and run `FileFind-Setup-User-${{ needs.build-linux.outputs.version }}.exe`
517+
- No administrator privileges required
518+
- Installs in user AppData folder
519+
- Adds to user PATH only
520+
521+
**Portable:**
522+
- Download and extract `filefind-windows-portable-${{ needs.build-linux.outputs.version }}.zip`
523+
- No installation required
422524
423525
---
424526
527+
### Features ✨
528+
529+
**New in this release:**
530+
- 🔧 **Dual Windows installers** - System (admin) and User (no admin) options
531+
- 🎯 **Automatic PATH setup** - FileFind available from command line
532+
- 🖥️ **Desktop shortcut** - Checked by default during installation
533+
- 🎨 **Proper icons** - Display correctly in Windows uninstall list
534+
- 📦 **Enhanced packaging** - Professional Linux .deb and Windows installers
535+
425536
### Verification ✅
426537
All files are signed with SHA256 checksums available in `checksums.txt`.
427538
428-
### What's New
429-
- Automated CI/CD pipeline for cross-platform builds
430-
- Professional packaging for Linux (.deb) and Windows (installer)
431-
- Portable archives for both platforms
432-
- Enhanced build process with Lazarus 4.0.0
539+
### Technical Details 🛠️
540+
- **Build System:** Automated CI/CD with GitHub Actions
541+
- **Compiler:** Lazarus 4.0.0 with Free Pascal Compiler 3.2.2
542+
- **Platforms:** Linux x86_64, Windows x86/x64
543+
- **Dependencies:** Minimal system dependencies for maximum compatibility
433544
env:
434545
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
435546

@@ -444,6 +555,12 @@ jobs:
444555
if [[ "${{ needs.build-linux.result }}" == "success" ]] && [[ "${{ needs.build-windows.result }}" == "success" ]]; then
445556
echo "✅ All builds completed successfully!"
446557
echo "Version: ${{ needs.build-linux.outputs.version }}"
558+
echo ""
559+
echo "📦 Artifacts generated:"
560+
echo " Linux: .deb package + portable archive"
561+
echo " Windows: System installer + User installer + portable archive"
562+
echo ""
563+
echo "🚀 Ready for release!"
447564
else
448565
echo "❌ Some builds failed"
449566
echo "Linux: ${{ needs.build-linux.result }}"

0 commit comments

Comments
 (0)