Modify WinNUT Update Routines (ClickOnce deployments)
gbakeman opened this issue · comments
The old MSI Installer/Setup system is not CI/CD friendly, so the need has arisen to find a new packaging and deployment system. Per #85, ClickOnce is a native msbuild
packaging system that looks like a good solution. Prior to completing that, the WinNUT client needs to gracefully transition from the old system to the new one.
Strategies
Gradual procedure
Stage 1 - New Update Code
The current system relies on parsing HTTP queries sent directly to the GitHub web API, and presents a Form control prompting the user to update. To prepare for integrating the new updating method, it would be good to have a solid foundation first. The updating system should be moved to the common library as much as possible, providing events to the WinNUT client as needed. This system will allow upgrading from MSI to ClickOnce.
Changes
- Use a .Net Library to communicate with GitHub for update information
- Modular update installation system
- MSI download & install
- ClickOnce deployments
Todo
- Create new updater and verify changes in Debug building
- After full deployment, remove code for manually updating Settings #135
Swift migration
- Adopt true Semver versioning scheme for 2.4 release cycle (resetting the
patch
value to zero). - Switch to dual ClickOnce and MSI deployment system with the next pre-release
- Maintain this throughout the 2.4 release cycle to catch everyone upgrading
- Starting with the 2.5 release cycle, remove the MSI build system and associated project, leaving only the ClickOnce deployments
An alternative to the gradual procedure, especially since we're already seeing issues with our current hybrid method of using Application Settings with the old MSI deployment scheme.
Dealing with old MSI installation
If we provide the ClickOnce installer to a user who is currently on the MSI installation, I don't think there's an automatic facility to remove the MSI installation and replace it with the ClickOnce installation. May need to look a specific call or command that runs the MSI removal in silent mode.