Skip to content
This repository was archived by the owner on May 5, 2026. It is now read-only.

Commit 41a9f0b

Browse files
Add Windows installer build and release enhancements
Introduced an Inno Setup installer script for Intrudex Client and updated the GitHub Actions workflow to build the installer, include it in releases, and improve release notes formatting. These changes streamline the release process and provide users with an easy-to-use Windows installer.
1 parent d98aed1 commit 41a9f0b

2 files changed

Lines changed: 142 additions & 19 deletions

File tree

.github/workflows/Build-Intrudex-Client.yaml

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ jobs:
2323
- name: 📥 Install MinGW
2424
run: choco install mingw -y
2525

26+
# Install Inno Setup
27+
- name: 📥 Install Inno Setup
28+
run: choco install innosetup -y
29+
2630
- name: ➕ Add mc.exe to PATH
2731
shell: pwsh
2832
run: |
@@ -41,6 +45,7 @@ jobs:
4145
cmake -S Intrudex-Client -B Intrudex-Client\Build-Files -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release
4246
cmake --build Intrudex-Client\Build-Files -- -j4
4347
48+
# Extract version from version.rc
4449
- name: 🏷️ Extract Version from version.rc
4550
id: get_version
4651
shell: pwsh
@@ -56,6 +61,21 @@ jobs:
5661
echo "VERSION=unknown" >> $env:GITHUB_ENV
5762
}
5863
64+
- name: 📋 Prepare Installer Directory
65+
run: |
66+
Remove-Item -Recurse -Force Intrudex-Client\build -ErrorAction SilentlyContinue
67+
New-Item -ItemType Directory -Force -Path Intrudex-Client\build
68+
Copy-Item -Recurse -Force Intrudex-Client\Build-Files\* Intrudex-Client\build\
69+
70+
# Ensure LICENSE is present for the installer
71+
- name: 📄 Copy LICENSE for Installer
72+
run: Copy-Item LICENSE Intrudex-Client-installer.iss -Destination .
73+
74+
- name: 🛠 Build Installer
75+
shell: pwsh
76+
run: |
77+
& "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" "Intrudex-Client-installer.iss"
78+
5979
- name: 📦 Create Zip Archive of Build Folder
6080
run: |
6181
Compress-Archive -Path Intrudex-Client\build -DestinationPath intrudex-client-build.zip
@@ -65,7 +85,7 @@ jobs:
6585
id: filelist
6686
run: |
6787
Expand-Archive -Path intrudex-client-build.zip -DestinationPath _release_temp
68-
Get-ChildItem _release_temp -Recurse | ForEach-Object { $_.FullName } | Out-File included_files.txt -Encoding utf8
88+
Get-ChildItem _release_temp -Recurse | ForEach-Object { $_.Name } | Out-File included_files.txt -Encoding utf8
6989
echo "INCLUDED_FILES<<EOF" >> $env:GITHUB_ENV
7090
Get-Content included_files.txt >> $env:GITHUB_ENV
7191
echo "EOF" >> $env:GITHUB_ENV
@@ -74,34 +94,54 @@ jobs:
7494
uses: softprops/action-gh-release@v2
7595
with:
7696
tag_name: v${{ env.VERSION }}
77-
name: "Intrudex Client - v${{ env.VERSION }}"
97+
name: "🚀 Intrudex Client v${{ env.VERSION }} Released!"
7898
body: |
79-
## 🔐 Intrudex Client - v${{ env.VERSION }}
80-
81-
### 📦 Summary
82-
- Version: `${{ env.VERSION }}`
83-
- Commit: `${{ github.sha }}`
84-
- Branch: `${{ github.ref_name }}`
85-
- Author: `${{ github.actor }}`
86-
- Build Type: `Release`
87-
- Built On: `${{ runner.os }}`
88-
- Build Date: `${{ github.event.head_commit.timestamp || github.run_started_at }}`
89-
90-
### 📁 Included in Release
99+
<h2 align="center">🔐 <b>Intrudex Client v${{ env.VERSION }}</b> 🚀</h2>
100+
<p align="center">
101+
<img src="https://img.shields.io/github/v/release/ToolsHive/Intrudex?label=Latest%20Release&style=for-the-badge" />
102+
<img src="https://img.shields.io/github/downloads/ToolsHive/Intrudex/total?style=for-the-badge" />
103+
</p>
104+
105+
---
106+
### 🗒️ **Summary**
107+
- **Version:** `${{ env.VERSION }}`
108+
- **Commit:** `${{ github.sha }}`
109+
- **Branch:** `${{ github.ref_name }}`
110+
- **Author:** `${{ github.actor }}`
111+
- **Build Type:** `Release`
112+
- **Platform:** `${{ runner.os }}`
113+
- **Build Date:** `${{ github.event.head_commit.timestamp || github.run_started_at }}`
114+
- **Workflow:** [View Run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
115+
116+
### 📦 **Included in Release**
117+
<details>
118+
<summary>Click to expand file list</summary>
119+
91120
```
92121
${{ env.INCLUDED_FILES }}
93122
```
94123
95-
### ✅ Usage
124+
</details>
125+
126+
### 🖥️ **Installer**
127+
- Download and run: **Intrudex-Client-Setup.exe**
128+
129+
### ✅ **Usage**
96130
1. Extract `intrudex-client-build.zip`
97131
2. Run `intrudex-client.exe`
98-
3. Refer to README for config instructions
132+
3. See README for configuration
133+
134+
### 💡 **Features**
135+
- Fast, secure, and modern client
136+
- Easy configuration
137+
- Automatic updates
99138
100-
### ⚠️ Known Issues
101-
- None reported yet. Open issues if any.
139+
### ⚠️ **Known Issues**
140+
- None reported yet. Please [open an issue](https://github.com/ToolsHive/Intrudex/issues) if you find any.
102141
103142
---
104-
🧠 *Built and deployed automatically by GitHub Actions.*
143+
<p align="center">✨ Built and deployed automatically by <b>GitHub Actions</b> ✨</p>
105144
106145
files: |
107146
intrudex-client-build.zip
147+
Intrudex-Client-Setup.exe

Intrudex-Client-installer.iss

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
; Script generated by the Inno Setup Script Wizard.
2+
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
3+
4+
#define MyAppName "Intrudex-Client"
5+
#define MyAppVersion "1.0.0"
6+
#define MyAppPublisher "ToolsHive, Inc."
7+
#define MyAppURL "https://github.com/ToolsHive/Intrudex/"
8+
#define MyAppExeName "Intrudex_Client.exe"
9+
#define MyAppAssocName MyAppName + ""
10+
#define MyAppAssocExt ".myp"
11+
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
12+
13+
[Setup]
14+
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
15+
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
16+
AppId={{F599BB8F-FF0F-4965-B2C3-D46682D7DBF5}
17+
AppName={#MyAppName}
18+
AppVersion={#MyAppVersion}
19+
;AppVerName={#MyAppName} {#MyAppVersion}
20+
AppPublisher={#MyAppPublisher}
21+
AppPublisherURL={#MyAppURL}
22+
AppSupportURL={#MyAppURL}
23+
AppUpdatesURL={#MyAppURL}
24+
DefaultDirName={autopf}\{#MyAppName}
25+
UninstallDisplayIcon={app}\{#MyAppExeName}
26+
; "ArchitecturesAllowed=x64compatible" specifies that Setup cannot run
27+
; on anything but x64 and Windows 11 on Arm.
28+
ArchitecturesAllowed=x64compatible
29+
; "ArchitecturesInstallIn64BitMode=x64compatible" requests that the
30+
; install be done in "64-bit mode" on x64 or Windows 11 on Arm,
31+
; meaning it should use the native 64-bit Program Files directory and
32+
; the 64-bit view of the registry.
33+
ArchitecturesInstallIn64BitMode=x64compatible
34+
ChangesAssociations=yes
35+
DefaultGroupName={#MyAppName}
36+
AllowNoIcons=yes
37+
LicenseFile=Intrudex\LICENSE
38+
; Uncomment the following line to run in non administrative install mode (install for current user only).
39+
;PrivilegesRequired=lowest
40+
PrivilegesRequiredOverridesAllowed=dialog
41+
OutputDir=C:\Users\armog\OneDrive\Desktop\Intrudex-Client
42+
OutputBaseFilename=Intrudex-Client-Setup
43+
SolidCompression=yes
44+
WizardStyle=modern
45+
46+
[Languages]
47+
Name: "english"; MessagesFile: "compiler:Default.isl"
48+
49+
[Tasks]
50+
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
51+
Name: autostart; Description: "Start Intrudex Client with Windows"; GroupDescription: "Startup options:"; Flags: unchecked
52+
53+
[Files]
54+
; Main EXE
55+
Source: "Intrudex-Client\build\Intrudex_Client.exe"; DestDir: "{app}"; Flags: ignoreversion
56+
57+
; All folders and files under build (preserve structure)
58+
Source: "Intrudex-Client\build\config\*"; DestDir: "{app}\config"; Flags: ignoreversion recursesubdirs createallsubdirs
59+
Source: "Intrudex-Client\build\assets\*"; DestDir: "{app}\assets"; Flags: ignoreversion recursesubdirs createallsubdirs
60+
61+
; All DLLs at the root of build
62+
Source: "Intrudex-Client\build\*.dll"; DestDir: "{app}"; Flags: ignoreversion
63+
64+
[Registry]
65+
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocKey}"; ValueData: ""; Flags: uninsdeletevalue
66+
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}"; ValueType: string; ValueName: ""; ValueData: "{#MyAppAssocName}"; Flags: uninsdeletekey
67+
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"
68+
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
69+
; Optional: Write uninstall path
70+
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Uninstall\Intrudex_Client"; ValueType: string; ValueName: "UninstallString"; ValueData: """{uninstallexe}"""
71+
; Auto-start only if selected in [Tasks]
72+
Root: HKCU; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "IntrudexClient"; ValueData: """{app}\intrudex-client.exe"""; Tasks: autostart
73+
74+
75+
[Icons]
76+
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
77+
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
78+
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
79+
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
80+
81+
[Run]
82+
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
83+

0 commit comments

Comments
 (0)