uscheduler/CHANGELOG.md

144 lines
7.6 KiB
Markdown

# MaksIT.UScheduler Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [1.1.0] - 2026-09-06
### Added
- **Avalonia UScheduler UI** on Windows and Linux (replaces WPF Schedule Manager).
- **Linux systemd** install/start/stop for the worker (`Type=notify`), matching Windows SCM.
- `--prepare-data` creates scripts, logs, and shared-settings folders (and ACLs) without registering the service.
- Community desktop GitHub assets: portable `maksit-uscheduler-{version}.zip` (win-x64 worker, UI, Scripts), Windows setup exe, and Flatpak of the UI.
- Script list shows a description and platform (`Windows` / `Linux`). Incompatible scripts stay in the list but are grayed out; the worker does not run them. Bundled Hyper-V Backup, Windows Update, and File Sync are Windows-only.
### Changed
- **Schedule Manager** is now **MaksIT.UScheduler.UI**. The UI launches without elevation; register/start/stop/unregister prompt for UAC (or pkexec) in place.
- Worker and UI install to `C:\Program Files\MaksIT\UScheduler` (Linux: `/opt/maksit/uscheduler`). Scripts live in `C:\MaksIT\Scripts` (`/var/lib/maksit/scripts`) and logs in `C:\MaksIT\Logs` (`/var/log/maksit`), with Users/group write after `--install` / `--prepare-data`. Bundled examples are copied only when the destination file or script folder does not already exist; existing customizations are left unchanged.
- Schedule configuration is stored in `%ProgramData%\MaksIT\UScheduler\settings.json` (Linux: `/var/lib/maksit/uscheduler/settings.json`). Shipped `appsettings.json` next to the worker keeps host logging and a first-run Configuration seed. Per-user UI prefs stay in `%AppData%\MaksIT\UScheduler\settings.json`.
- UI dark theme uses the MAKS.IT origami blues (`#33A5CF` / `#006199`). App icon is a faceted scheduler clock (not the brand M).
- Worker is no longer Windows-only: no `win-x64` RID lock; Event Log logging stays Windows-only.
- `sc.exe create` uses `binPath= ` / `start= auto` (space after `=`).
- **Tests:** migrate to **xunit.v3** **4.0** + **Microsoft Testing Platform** (`src/global.json` `test.runner`; **coverlet.MTP**). README coverage badges are shields.io URLs.
- Synced RepoUtils to the Community desktop profile (local-copy only; no `Update-RepoUtils`).
### Removed
- WPF **MaksIT.UScheduler.ScheduleManager** project.
- SVG coverage badges under `assets/badges/`.
## [1.0.3] - 2026-06-28
### Added
- **RepoUtils release engine**: `utils/engines/release/` with `BundleCustomization` plugin for bundled ZIP releases
- **`.editorconfig`**: repo-wide C# formatting (2-space indent, MaksIT brace style)
### Changed
- **PSScriptGateway**: MaksIT.Core logging/middleware, layered config, camelCase JSON, and `Result<T>` → `ToActionResult()` flow
- **README** and **CONTRIBUTING**: RepoUtils test/release entry points, commit format, and coverage badge workflow
### Fixed
- **Release packaging**: `utils/Invoke-ReleasePackage.bat` now targets a wired release engine (previously missing `utils/engines/release/`)
- **ScheduleManager version**: aligned with `MaksIT.UScheduler` at `1.0.3`
## [1.0.2] - 2026-03-01
### Fixed
- **PowerShell module loading**: Scripts with module dependencies now execute correctly when running as Windows service
- Added recursive dependency scanning using PowerShell AST parser
- Automatically unblocks `Import-Module`, `using module`, and dot-sourced (`. ./file.ps1`) dependencies
- Resolves "AuthorizationManager check failed" errors for modules downloaded from the internet
- Supports `.psm1` and `.psd1` module files in script directory and subfolders
## [1.0.1] - 2026-02-15
### Added
- **CLI service management**: Added command-line arguments for service installation and management
- `--install`, `-i`: Install the Windows service
- `--uninstall`, `-u`: Uninstall the Windows service
- `--start`: Start the service
- `--stop`: Stop the service
- `--status`: Query service status
- `--help`, `-h`: Show help message
- **Relative path support**: Script and process paths can now be relative to the application directory
- **OS guard**: Application now checks for Windows at startup and exits with error on unsupported platforms
- **Release script enhancement**: Example scripts are now automatically added to `appsettings.json` in disabled state during release build
- **Unit tests**: Added comprehensive test project `MaksIT.UScheduler.Tests` with tests for background services and configuration
- **Uscheduler Manager UI**: Introduced a graphical user interface (WPF) for managing script schedules, viewing script status, and editing configuration in real time
- **Live configuration reload**: Added `ConfigurationReloadBackgroundService` to log configuration changes at runtime
- **Hot-reload for scripts/processes**: Background services now use `IOptionsMonitor<Configuration>` to pick up changes in `appsettings.json` without restart
### Changed
- Default value for `IsSigned` in PowerShell script configuration changed from `false` to `true` for improved security
- PSScriptService now implements `IDisposable` for proper RunspacePool cleanup
- Method signatures updated: `RunScript` → `RunScriptAsync`, `RunProcess` → `RunProcessAsync`
- Service is now installed with `start=auto` for automatic startup on boot
- Updated package dependencies:
- MaksIT.Core: 1.6.0 → 1.6.3
- Microsoft.Extensions.Hosting: 10.0.0 → 10.0.3
- Microsoft.Extensions.Hosting.WindowsServices: 10.0.0 → 10.0.3
- System.Diagnostics.PerformanceCounter: 10.0.0 → 10.0.3
- Microsoft.Extensions.Logging.Abstractions: 10.0.2 → 10.0.3
### Removed
- `Install.cmd` and `Uninstall.cmd` files (replaced by CLI arguments)
### Fixed
- **Parallel execution**: Restored parallel execution of PowerShell scripts and processes (broken during .NET Framework to .NET migration)
- PSScriptService now uses RunspacePool (up to CPU core count) for concurrent script execution
- Background services use `Task.WhenAll` to launch all tasks simultaneously
- **Unit test improvements**: Refactored tests to use `IOptionsMonitor<Configuration>` for better coverage and reliability
## [1.0.0] - 2025-12-06
### Major Changes
- Migrate of the Unified Scheduler Service in .NET 10 (previously .NET 8).
- New solution and project structure under `MaksIT.UScheduler`.
- Added support for scheduling and running both PowerShell scripts and console applications as Windows services.
- Strongly typed configuration via `appsettings.json` and `Configuration.cs`.
- Improved logging with configurable log directory.
- New background services:
- `PSScriptBackgroundService` for PowerShell script execution.
- `ProcessBackgroundService` for process management.
- Enhanced PowerShell script execution with signature validation and script unblocking.
- Improved process management with restart-on-failure logic.
- Added install/uninstall scripts (`Install.cmd`, `Uninstall.cmd`) for service management (removed in v1.0.1).
- Added comprehensive README with usage, configuration, and scheduling examples.
- MIT License included.
### Breaking Changes
- Old solution, project, and service files removed.
- Configuration format and service naming conventions updated.
- Scheduling logic for console applications is not yet implemented (runs every 10 seconds).
<!--
Template for new releases:
## [1.x.x] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes in existing functionality
### Deprecated
- Soon-to-be removed features
### Removed
- Removed features
### Fixed
- Bug fixes
### Security
- Security improvements
-->