Skip to content

feat: Re-resolve extension dependencies on Beutl version change#1611

Open
yuto-trd wants to merge 2 commits intomainfrom
yuto-trd/resolve-package-deps-runtime
Open

feat: Re-resolve extension dependencies on Beutl version change#1611
yuto-trd wants to merge 2 commits intomainfrom
yuto-trd/resolve-package-deps-runtime

Conversation

@yuto-trd
Copy link
Member

Description

Track the Beutl version for each extension's dependencies and re-run dependency resolution on startup if the version differs. Introduce a new task for resolving package dependencies and handle failures during the loading of packages.

Breaking changes

The LoadInstalledExtensionTask constructor now requires a Startup parameter.

Fixed issues

Track the Beutl version at which each extension's dependencies were
resolved. On startup, if the current version differs, re-run dependency
resolution so that extensions pick up the updated CoreLibraries packages.

- Add BeutlVersion field to installedPackages.json (backward-compatible)
- Add ResolvePackageDependenciesTask startup task
- Add PackageInstaller.ReResolveDependencies() method
- Add LoggerAdapter to bridge NuGet ILogger to M.E.Logging
- LoadInstalledExtensionTask now awaits dependency re-resolution
Copilot AI review requested due to automatic review settings March 14, 2026 17:09
@github-actions
Copy link
Contributor

No TODO comments were found.

@github-actions
Copy link
Contributor

Code Coverage

Package Line Rate Branch Rate Complexity Health
Beutl.Editor 82% 76% 864
Beutl.Extensibility 12% 14% 108
Beutl.Operators 0% 100% 1
Beutl.Language 1% 50% 1100
Beutl.ProjectSystem 10% 5% 3202
Beutl.Threading 99% 89% 122
Beutl.Engine 20% 19% 16064
Beutl.Configuration 39% 20% 308
Beutl.Utilities 73% 67% 358
Beutl.Core 38% 35% 3067
Summary 24% (14253 / 58963) 23% (4016 / 17671) 25194

Minimum allowed line rate is 0%

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds startup-time package dependency re-resolution when the Beutl app version changes, so installed extensions can refresh their dependency graphs across upgrades and gracefully handle resolution failures.

Changes:

  • Track the Beutl version used for dependency resolution per installed package and persist it in installedPackages.json.
  • Add a new startup task to re-resolve dependencies when the stored Beutl version differs from the current one.
  • Skip loading installed extensions whose dependency re-resolution failed, surfacing them via existing startup failure reporting.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/Beutl/Services/StartupTasks/Startup.cs Registers the new dependency re-resolution startup task and wires Startup into LoadInstalledExtensionTask.
src/Beutl/Services/StartupTasks/ResolvePackageDependenciesTask.cs New task that detects packages needing re-resolution and runs PackageInstaller to re-resolve dependencies, recording failures.
src/Beutl/Services/StartupTasks/LoadInstalledExtensionTask.cs Waits for dependency re-resolution and skips loading packages that failed re-resolution, recording failures for UI reporting.
src/Beutl.Api/Services/PluginDependencyResolver.cs Switches NuGet dependency extraction logging from NullLogger to the new adapter-backed logger.
src/Beutl.Api/Services/PackageInstaller.cs Adds ReResolveDependencies helper and defaults NuGet logging to the adapter-backed logger instead of NullLogger/ConsoleLogger.
src/Beutl.Api/Services/LoggerAdapter.cs New bridge from Microsoft.Extensions.Logging.ILogger to NuGet.Common.ILogger.
src/Beutl.Api/Services/InstalledPackageRepository.cs Persists and restores per-package “resolved under Beutl version”, and exposes APIs to query/update it.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

_logger.LogTrace(message.ToString());
break;
case LogLevel.Minimal:
_logger.LogTrace(message.ToString());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

実行時に拡張機能の依存関係をダウンロードできるようにする

2 participants