Skip to content

PR: Inno Setup Windows installer suite, centric hidden process runner, and non-blocking GUI lifecycle (v3.1.0) - #1

Merged
EG1DOTIN merged 4 commits into
mainfrom
feature/v3.1.0-inno-setup-and-process-engine
Oct 3, 2026
Merged

EG1DOTIN merged 4 commits into
mainfrom
feature/v3.1.0-inno-setup-and-process-engine

Conversation

@EG1DOTIN

@EG1DOTIN EG1DOTIN commented Oct 3, 2026

Copy link
Copy Markdown
Owner

Summary of Changes

This pull request introduces pyEGClamUI v3.1.0, featuring an official Windows Inno Setup standalone installation suite, a unified centric hidden process runner to eliminate console window flashes, an asynchronous background GUI lifecycle to prevent "Not Responding" titlebar freezes, and duration-tracked multi-OS CI/CD packaging pipelines.


1. 🪟 Windows Inno Setup & Silent ClamD Activation Suite

  • Native Inno Setup Compiler (setup/windows/pyegclamui_installer.iss):
    • Bundles signed Python 3.12 embedded runtime with pre-staged PySide6 and wheel dependencies into a standalone installer (pyEGClamUI-v3.1.0-Windows-Setup.exe).
    • Provides optional ClamD daemon activation checkbox and auto-starts the resident memory service.
    • Creates native Windows Desktop & Start Menu shortcuts with clean uninstaller registration.
  • Automated ClamAV Provisioning (setup/windows/install_clamav.ps1):
    • Detects missing ClamAV engine and provisions the latest release via Microsoft Windows Package Manager (winget install --id Cisco.ClamAV --source winget).
  • Self-Elevating Service Activator (setup/windows/setup_clamd_service.ps1):
    • Win32 ShellExecuteExW UAC elevation to configure clamd.conf and register the native Windows Service "ClamAV ClamD" listening on TCP 127.0.0.1:3310.

2. 🛡️ Centric Hidden Process Foundation (pyegclamui.core.process)

  • Single Source of Process Execution:
    • Created pyegclamui.core.process exporting spawn_hidden_process(), run_hidden_process(), and get_hidden_subprocess_kwargs().
    • Windows: Injects creationflags=CREATE_NO_WINDOW (0x08000000) and STARTUPINFO(wShowWindow=SW_HIDE, dwFlags=STARTF_USESHOWWINDOW). Completely eliminates all console window pops and command-prompt flashing across clamscan, clamd, freshclam, winget, pip, and service commands.
    • Linux & macOS: Transparently returns clean POSIX kwargs (close_fds=True), ensuring 100% cross-platform parity without platform crashes.
    • Zero shell=True: All invocations strictly pass tokenized argument lists without shell wrappers.

3. ⚡ Non-Blocking Asynchronous GUI Lifecycle (Freeze Elimination)

  • Dedicated Background Worker (StatusRefreshWorker(QThread)):
    • Offloads heavy engine audits (detector.inspect()), database freshness checks (updater.is_database_recent()), and socket queries (service_mgr.get_status()) to a background thread.
    • The Qt main event loop never blocks; Windows DWM message queues remain responsive at 60+ FPS, permanently resolving (Not Responding) titlebar freezes.
    • Thread-safe updates applied via status_ready Qt Signal.
  • In-Memory TTL Caching (ClamEngineDetector):
    • 6-second TTL cache for get_engine_version() and inspect(), eliminating redundant subprocess calls on tab switching.
  • Fast Socket Connect Timeouts (ClamDaemonClient):
    • Health check connection attempts timeout in 0.5s (down from 2.0s), preventing UI hangs when daemon is offline.

4. 🚀 Cross-Platform CI/CD Pipeline (.github/workflows/build.yml)

  • Automated Multi-OS Packaging:
    • Windows: Inno Setup (ISCC.exe) compiler + standalone portable .zip.
    • Linux: PyInstaller standalone binary + .desktop menu launcher + tar.gz.
    • macOS: PyInstaller standalone bundle + zip.
  • Quality Gates:
    • Runs all 125 unit & integration tests on Python 3.12 with --durations=10.
    • Post-build artifact verification ensuring all packages in dist/ are non-empty and >1MB.
    • Automated SHA-256 checksum generation (SHA256SUMS.txt) on tagged releases.

5. 🏷️ Centric Versioning (SSOT)

  • Bumped version to v3.1.0 strictly in src/pyegclamui/__init__.py.
  • Automatically propagated to pyproject.toml, packaging scripts, Inno Setup compiler (/DAppVersion=3.1.0), and documentation.

Test Suite Results

============================= test session starts =============================
platform win32 -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0
rootdir: E:\EG1DOTIN\apps\av\pyEGClamUI
collected 125 items

tests\test_autostart.py .....                                            [  4%]
tests\test_build_script.py ....                                          [  7%]
tests\test_config.py ...                                                 [  9%]
tests\test_config_edge_cases.py ...                                      [ 12%]
tests\test_daemon.py .............                                       [ 22%]
tests\test_desktop_integration.py ..                                     [ 24%]
tests\test_detector.py ....                                              [ 27%]
tests\test_dual_logging.py ...                                           [ 29%]
tests\test_global_updater.py ..                                          [ 31%]
tests\test_gui_lifecycle.py ......                                       [ 36%]
tests\test_monitor.py ......                                             [ 40%]
tests\test_monitored_folders.py ...                                      [ 43%]
tests\test_process.py ....                                               [ 46%]
tests\test_quarantine.py .                                               [ 47%]
tests\test_quarantine_edge_cases.py ......                               [ 52%]
tests\test_scanner.py ...                                                [ 54%]
tests\test_scanner_edge_cases.py .........                               [ 61%]
tests\test_service_manager.py .......                                    [ 67%]
tests\test_setup_engine.py ..............                                [ 78%]
tests\test_setup_script.py ............                                  [ 88%]
tests\test_telemetry.py .........                                        [ 95%]
tests\test_updater_edge_cases.py ...                                     [ 97%]
tests\test_version.py ...                                                [100%]

============================ 125 passed in 12.84s =============================

…er, and non-blocking GUI lifecycle (v3.1.0)

- Windows Inno Setup standalone installation compiler script and automated staging pipeline

- Centric hidden process engine (pyegclamui.core.process) eliminating console flashes

- Asynchronous StatusRefreshWorker, in-memory TTL caching, and non-blocking UI lifecycle

- Updated GitHub Actions CI/CD matrix with Inno Setup, integrity checks, and duration reporting

- Bumped version to v3.1.0 across centric SSOT and documentation
@EG1DOTIN
EG1DOTIN merged commit 1f72ae0 into main Oct 3, 2026
4 checks passed
@EG1DOTIN
EG1DOTIN deleted the feature/v3.1.0-inno-setup-and-process-engine branch October 3, 2026 16:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant