Skip to content

Release v0.4.4

Choose a tag to compare

@deafsquad deafsquad released this 19 Jul 01:36
· 43 commits to master since this release

Added

  • Dry run version management improvements
    • Auto-increment version for repeated dry runs to avoid duplicate MSI installations
    • Skip CHANGELOG requirement for auto-incremented dry run versions
    • Track last dry run version in .last-dryrun-version file
  • Comprehensive test suite with 100% module coverage
    • Created 39 test files covering all 11 PowerShell modules
    • Implemented four test types per module: Simple, Working, Characterization, and Full tests
    • Added test runner scripts with CI/CD support
    • Created test documentation and summaries
    • All modules now have complete test coverage: Logging, Utility, Network, Installation, Miniserver, UpdateCheck, WorkflowSteps, ErrorHandling, System, Toast, and RunAsUser
  • Automated testing in release process
    • Modified publish_new_release.ps1 to run full test suite before proceeding
    • Release now fails if any tests fail, ensuring quality
    • Added -CI and -PassThru parameters to test runner for automation
    • Added -LiveProgress parameter to show real-time test progress during release
  • Architectural analysis and recommendations
    • Created CLAUDE.md with detailed code analysis and improvement recommendations
    • Identified and documented dead code in UpdateCheck module
    • Created REFACTORING_ANALYSIS.md documenting the architectural changes
    • Created REFACTOR_TO_PLUGIN_ARCHITECTURE.md with detailed plugin architecture design
  • Test infrastructure improvements
    • Set up Pester v5 testing framework
    • Created proper test directory structure (Unit, Integration, Fixtures)
    • Added characterization tests to document actual behavior
    • Implemented test helpers and utilities
    • Added UTF-8 BOM to test runner script to fix PowerShell 5.1 Unicode parsing issues

Changed

  • Reorganized test directory structure
    • Removed obsolete test/ folder completely
    • Created new tests/ structure with Unit, Integration, and Fixtures subdirectories
    • Updated all test imports to use new module paths
  • Enhanced release process
    • Release script now runs comprehensive test suite first
    • Added test result summary display in release output
    • Release aborts if tests fail or no tests pass
  • Test runner improvements
    • Fixed coverage summary not displaying in CI mode
    • Added special handling for COVERAGE and SUMMARY log levels in CI mode
    • Improved coverage report positioning to appear before test summary
    • Removed hardcoded verbose flags from TestCoverage module
    • Fixed coverage module path resolution issue
    • Suppressed Pester test discovery output in CI mode by redirecting console streams
    • Fixed missing test statistics in CI mode by adding SUMMARY level to all test result outputs
    • Fixed "Test discovery complete" not showing in CI mode by adding SUMMARY level
    • Suppressed Pester discovery output ("Test run was skipped", "Tests completed in Xms") in all modes
    • Refactored test summary display to use dynamic discovery instead of hardcoded test types
    • Fixed System test duration not displaying by improving duration handling in dynamic summary
    • Added duration placeholder (--:---.---) when tests ran but duration is missing
    • Fixed System test skip reason showing when only some tests were skipped (now only shows when ALL are skipped)
    • Fixed System test duration showing as 0 by ensuring minimum duration for categories that ran tests
    • Added duration estimation for SYSTEM tests when no duration is reported by PsExec helper
    • Fixed System Test Skip Reason showing at top level when RunAsUser tests pass
    • Improved skip reason display logic to show contextually appropriate messages
  • Enhanced publish script to stage all project files instead of selective files
    • Now uses git add -A to include all changes (new, modified, deleted)
    • Added pre-flight check for untracked files with user confirmation
    • Shows detailed list of files being staged with their status
    • Prompts user to handle untracked files before proceeding
    • Ensures all project changes are included in release commits
  • Replaced ZIP packaging with MSI installer for winget compatibility
    • Now creates proper MSI installer using PSMSI module
    • MSI installs to Program Files with Start Menu shortcut
    • Supports proper uninstallation through Windows Add/Remove Programs
    • Enables future submission to winget-pkgs repository
    • Updated all publish script references from ZIP to MSI
    • Installer manifest now uses InstallerType: msi instead of zip
  • Enhanced publish script to include release commit link in GitHub release notes
    • Release notes now include a direct link to the actual branch commit
    • Makes it easier to trace releases back to their source commits
    • Improves transparency by linking to the real commit instead of just the tag
  • Optimized LoxoneUtils.Toast.psm1 module
    • Reduced code size by ~50% through consolidation of redundant code
    • Replaced custom logging with centralized logging functions (Write-Log, Enter-Function, Exit-Function)
    • Improved function organization and separation of concerns
    • Preserved critical data binding fix to prevent toast dismissal
    • Fixed PowerShell 5.1 compatibility issues (removed null-coalescing operator)
    • Module now properly handles initialization when loaded before logging module
    • Removed Get-LoxoneConfigToastAppId from exports (now internal)
    • Added Reset-ToastDataBinding to exports for testing scenarios

Fixed

  • MSI installer now properly redirects logs to %LOCALAPPDATA%\UpdateLoxone when installed in Program Files
  • Fixed MSI upgrade behavior by using stable UpgradeCode
  • Removed version revert for dry runs to allow proper version increment testing
  • Fixed publish script error handling
    • Fixed incorrect test runner parameter from -GenerateCoverage to -Coverage
    • Added exit code checking after test execution to prevent releases when tests fail
    • Added error handling for git push operations with helpful error messages
    • Script now properly exits with code 1 when tests fail or git operations fail
    • Prevents creating releases with broken code
  • Fixed app update showing rocket emoji (🚀) instead of update arrow (⬆ï¸�)
    • Invoke-InstallLoxoneApp and Invoke-InstallLoxoneConfig now properly detect updates vs new installs
    • Action type is determined dynamically based on InitialVersion presence
    • Toast notifications and log messages now correctly reflect the action being performed
  • Identified missing return statement in New-LoxoneComponentStatusObject (though function is dead code)
  • Documented parameter naming inconsistencies across modules
  • Identified and documented functions that are exported but not used
  • Fixed log rotation timestamp duplication issue
    • Log files no longer get double timestamps during rotation (e.g., file_20250603_120000_20250603_120500.log)
    • Files with existing timestamps are now rotated without adding additional timestamps
    • Simplified cleanup logic to properly group files by prefix and clean up old logs
    • Improved regex patterns to handle both legacy double-timestamp files and new single-timestamp files
  • Toast notification fixes
    • Fixed toast notification auto-dismiss issue
      • Toast notifications were dismissing after ~6 seconds during long operations
      • Root cause: New-BurntToastNotification doesn't support scenarios that prevent auto-dismiss
      • Solution: Switched to Submit-BTNotification with Reminder scenario
      • Toast notifications now remain visible until user interaction or script updates
    • Fixed progress bar getting stuck at 98% when transitioning from download to installation
    • Fixed toast losing foreground state and auto-dismissing after download completion
    • Fixed stale text appearing when reusing existing toast notifications
    • Added comprehensive runtime tracking for all workflow steps
    • Made toast text configuration-driven with dynamic step categories
    • Added visual symbols (✓, ✗, ðŸ”�, ⬇ï¸�, 📦, âš™ï¸�, 🔄, ðŸ��, â�³, 🚀) throughout messages
    • Fixed Loxone app icon missing in Start Menu shortcut
  • Final notification improvements
    • Added proper sorting (APP first, then Conf, then MS)
    • Fixed app build date display to show just the date (YYYY-MM-DD)
    • Added channel information display for all components
    • Replaced verbose status text with symbols
    • Shortened final message to show only what was updated

Security

  • Documented secure credential handling patterns for Miniserver connections
  • Added recommendations for least-privilege Miniserver user setup
  • Identified webhook URL exposure (low risk - posting only)
  • Recommended credential encryption strategies for future implementation

Documentation

  • Created comprehensive test documentation (TEST_SUMMARY.md)
  • Added module-specific test summaries for complex modules
  • Created testing progress tracking documentation
  • Updated all .md files with current project state
  • Added plugin architecture design document
  • Documented refactoring strategy and implementation phases

Release Commit: c5df496