Repository navigation
Release v0.4.4
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-versionfile
- 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.ps1to run full test suite before proceeding - Release now fails if any tests fail, ensuring quality
- Added
-CIand-PassThruparameters to test runner for automation - Added
-LiveProgressparameter to show real-time test progress during release
- Modified
- Architectural analysis and recommendations
- Created
CLAUDE.mdwith detailed code analysis and improvement recommendations - Identified and documented dead code in UpdateCheck module
- Created
REFACTORING_ANALYSIS.mddocumenting the architectural changes - Created
REFACTOR_TO_PLUGIN_ARCHITECTURE.mdwith detailed plugin architecture design
- Created
- 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
- Removed obsolete
- 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 -Ato 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
- Now uses
- 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: msiinstead ofzip
- 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.psm1module- 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-LoxoneConfigToastAppIdfrom exports (now internal) - Added
Reset-ToastDataBindingto 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
-GenerateCoverageto-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 incorrect test runner parameter from
- Fixed app update showing rocket emoji (🚀) instead of update arrow (⬆�)
Invoke-InstallLoxoneAppandInvoke-InstallLoxoneConfignow 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
- Log files no longer get double timestamps during rotation (e.g.,
- Toast notification fixes
- Fixed toast notification auto-dismiss issue
- Toast notifications were dismissing after ~6 seconds during long operations
- Root cause:
New-BurntToastNotificationdoesn't support scenarios that prevent auto-dismiss - Solution: Switched to
Submit-BTNotificationwithReminderscenario - 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
- Fixed toast notification auto-dismiss issue
- 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
.mdfiles with current project state - Added plugin architecture design document
- Documented refactoring strategy and implementation phases
Release Commit: c5df496