Maintain portable installation integrity and document exceptions - #5343
Maintain portable installation integrity and document exceptions#5343Gabriel Dufresne (GabrielDuf) wants to merge 10 commits into
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
Root-path handling, failed-import retry behavior, missing translation keys, and incomplete temporary-file isolation remain unresolved.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Improves portable-mode isolation, migration, updating, and documentation.
Changes:
- Relocates application state and temporary artifacts into portable storage.
- Adds settings import and portable-aware updates.
- Ships Windows ZIPs as portable and upgrades Pinget to 0.11.0.
File summaries
| File | Description |
|---|---|
src/UniGetUI.Tests/UniGetUI.Tests.csproj |
Includes updater argument helper in tests. |
src/UniGetUI.Tests/AutoUpdaterTests.cs |
Tests portable installer arguments. |
src/UniGetUI.PackageEngine.Operations/AbstractProcessOperation.cs |
Relocates elevated WinGet temporary data. |
src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs |
Uses the shared scratch directory. |
src/UniGetUI.PackageEngine.Managers.WinGet/UniGetUI.PackageEngine.Managers.WinGet.csproj |
Upgrades Pinget Core. |
src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/WinGetCliHelper.cs |
Relocates WinGet temporary data. |
src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/PingetPackageDetailsProvider.cs |
Relocates Pinget temporary data. |
src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/PingetCliHelper.cs |
Uses portable scratch storage. |
src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs |
Reports resolved portable mode. |
src/UniGetUI.Interface.Telemetry.Tests/TelemetryHandlerTests.cs |
Updates portable telemetry tests. |
src/UniGetUI.Core.Settings/SettingsEngine_Names.cs |
Adds the import-banner state setting. |
src/UniGetUI.Core.Logging.Tests/LoggerTests.cs |
Isolates newly generated log entries. |
src/UniGetUI.Core.Logging.Tests/AppPathsTests.cs |
Tests portable path resolution. |
src/UniGetUI.Core.Logger/Logger.cs |
Moves session logs into scratch storage. |
src/UniGetUI.Core.Logger/AppPaths.cs |
Centralizes portable and scratch paths. |
src/UniGetUI.Core.Data/PortableDataImport.cs |
Implements selective settings import. |
src/UniGetUI.Core.Data/CoreData.cs |
Integrates portable paths and backups. |
src/UniGetUI.Core.Data.Tests/PortableDataImportTests.cs |
Tests import and backup behavior. |
src/UniGetUI.Avalonia/ViewModels/MainWindowViewModel.cs |
Adds the settings-import banner. |
src/UniGetUI.Avalonia/UniGetUI.Avalonia.csproj |
Upgrades Pinget CLI and links updater helper. |
src/UniGetUI.Avalonia/Infrastructure/ProcessEnvironmentConfigurator.cs |
Redirects Pinget storage. |
src/UniGetUI.Avalonia/Infrastructure/AvaloniaAutoUpdater.cs |
Preserves portable installs during updates. |
src/UniGetUI.Avalonia/Infrastructure/AvaloniaAppHost.cs |
Configures Pinget during startup. |
src/UniGetUI.Avalonia/CrashHandler.cs |
Relocates pending crash reports. |
src/UniGetUI.Avalonia/App.axaml.cs |
Relocates the WebView profile. |
src/Shared/AutoUpdater.InstallerArguments.cs |
Builds portable-aware installer arguments. |
README.md |
Identifies Windows ZIPs as portable. |
docs/PORTABLE.md |
Documents portable behavior and exceptions. |
.github/workflows/build-release.yml |
Adds the portable marker to ZIP releases. |
Review details
Suppressed comments (1)
src/UniGetUI.Avalonia/ViewModels/MainWindowViewModel.cs:579
- The new success title and message keys are also missing from
src/Languages/lang_en.json, so translation-source synchronization cannot export them for translators. Add both literals to the English translation source.
PortableImportBanner.Title = CoreTools.Translate("Settings imported");
PortableImportBanner.Message = CoreTools.Translate(
"{0} file(s) were copied. Restart UniGetUI to apply them.", copied);
- Files reviewed: 29/29 changed files
- Comments generated: 6
- Review effort level: Balanced
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
🤖 This pull request will not be approved automatically: it modifies files listed in human-review-paths, so a human review is required.
.github/workflows/build-release.ymlmatches.github/
Integration Details
{
"deliveryId": "4c2eb166-a642-11f1-9088-bee494c05993",
"headSha": "84cd2a7a1533e6edf0c9500a3fe9ea5f0fc42a35"
}There was a problem hiding this comment.
🟡 Changes recommended
Portable import freshness, username exposure in logs, and a cross-platform test failure remain unresolved.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 30/30 changed files
- Comments generated: 4
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
The portable guide contradicts the new Pinget storage relocation and omits its portable path.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 30/30 changed files
- Comments generated: 1
- Review effort level: Balanced
There was a problem hiding this comment.
🟡 Changes recommended
The import offer is permanently lost when the first portable launch exits before creating the GUI.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 30/30 changed files
- Comments generated: 1
- Review effort level: Balanced
This pull request significantly improves portable mode support in UniGetUI, especially for the Windows
.ziprelease. It ensures portable mode is enabled by default for the.zip, relocates temporary and cache files to the portable directory, and introduces a user-friendly way to import settings from a previous installation. It also updates documentation to reflect these changes and upgrades the Pinget dependency.Portable mode improvements:
.ziprelease now ships with theForceUniGetUIPortablemarker, making it portable out of the box. Documentation is updated to clarify that only the installer and non-Windows archives require manual activation of portable mode.AppPaths.ScratchDirectory) rather than system temp directories, ensuring no data is left behind on the host system.Settings import feature:
Installer and update enhancements:
AutoUpdaterInstallerArguments) to ensure that updates to portable copies are performed in place and do not accidentally convert them to regular installs.Third-party integration:
Pinget's data storage is redirected to the portable folder in portable mode, preventing it from writing to the user's profile.
Dependency updates:
Upgrades
Devolutions.Pinget.Cli.Rustto version 0.11.0.These changes provide a more robust and privacy-conscious portable mode, improve the user experience for portable users, and ensure better consistency across platforms.