jonathanpeppers / boots

boots is a .NET global tool for "bootstrapping" vsix & pkg files. Just "boots https://url/to/your/package"!
MIT License
86 stars 9 forks source link

Add --downgrade-first option. #115

Closed jpobst closed 2 years ago

jpobst commented 2 years ago

Because we are sharing build agents with a process that is testing PR .vsix files, we often need to replace those PR builds with a stable lower version .vsix, which is not supported by vsixinstaller.exe. Add the option --downgrade-first, which will first revert the installed package back to the version that ships with the VS version, so we may then upgrade it to our desired version.

Log file where downgrade was performed but not needed (error is written to log, but does not stop the process): no-downgrade-needed.txt

Log file where downgrade was needed (first installs higher version, then downgrades and installs desired version): downgrade-needed.txt

jonathanpeppers commented 2 years ago

The test does this, but doesn't fail the overall operation:

3/22/2022 9:35:00 PM - System.InvalidOperationException: CodeMaid VS2022 cannot be reverted
   at VSIXInstaller.ExtensionService.GetDowngradableData(IStateData stateData, String vsixId, IEnumerable`1& targetSkus)
   at VSIXInstaller.ExtensionService.ComputeDowngradableExtensions(IStateData stateData, IDictionary`2 skuDataMapping)
   at VSIXInstaller.App.Initialize(Boolean isRepairSupported)
   at VSIXInstaller.App.OnStartup(StartupEventArgs e)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.VisualStudio.Telemetry.WindowsErrorReporting.WatsonReport.GetClrWatsonExceptionInfo(Exception exceptionObject)

I say we just merge this and I'll release a prerelease, and @jpobst you can test for real somewhere?

jpobst commented 2 years ago

Since CodeMaid does not ship with VS, it cannot be reverted to the "shipped" version.

The attached logs are from my tests here (using a locally built boots nupkg): https://github.com/xamarin/AndroidX/pull/513

So I can run them again with a prerelease to ensure it works.