dependabot / dependabot/dependabot-core
No longer able to update multiple nuget packages in a group
- Dominant language
- Ruby
- Stars
- 5.8k
- Forks
- 1.5k
- Avg merge
- 2d 18h
- Merged PRs (30d)
- 149
Description
### Is there an existing issue for this?
- [X] I have searched the existing issues
### Package ecosystem
nuget
### Package manager version
_No response_
### Language version
.NET SDK 8.0.202
### Manifest location and content before the Dependabot update
https://github.com/xt0rted/dotnet-startup-projects/blob/aeee53717e182c592fec1ff5eda214fed7e7d1a7/test/Tests.csproj
```xml
StartupProjects
PreserveNewest
all
runtime; build; native; contentfiles; analyzers
runtime; build; native; contentfiles; analyzers; buildtransitive
all
```
### dependabot.yml content
https://github.com/xt0rted/dotnet-startup-projects/blob/main/.github/dependabot.yml
```yaml
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
github-actions:
patterns:
- "actions/*"
- "github/*"
my-actions:
patterns:
- "xt0rted/*"
- package-ecosystem: "npm"
directory: "/"
versioning-strategy: "increase"
schedule:
interval: "weekly"
open-pull-requests-limit: 99
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "weekly"
groups:
analyzers:
patterns:
- "IDisposableAnalyzers"
- "Roslynator.*"
dotnet:
patterns:
- "Microsoft.Extensions.*"
- "Microsoft.SourceLink.GitHub"
system-commandline:
patterns:
- "System.CommandLine"
- "System.CommandLine.*"
testing:
patterns:
- "GitHubActionsTestLogger"
- "Microsoft.NET.Test.Sdk"
- "Shouldly"
- "Verify.Xunit"
- "xunit"
- "xunit.*"
```
### Updated dependency
The update should have made the following changes:
Package | From | To
-- | -- | --
Verify.Xunit | 20.8.2 | 23.5.0
xunit | 2.6.6 | 2.7.0
xunit.runner.visualstudio | 2.5.6 | 2.5.7
### What you expected to see, versus what you actually saw
A PR should have been opened, instead the dependabot run failed with multiple errors. With the old non-.net based updater this would have opened a PR. Since the new version is using the dotnet cli/nuget it's not possible because it's doing one at a time and there's a mismatch between their versions. But if they're updated in a group, as the VS GUI does or hand editing the file, then it works just fine.
This is the PR that was opened but which doesn't build https://github.com/xt0rted/dotnet-startup-projects/pull/167
https://github.com/xt0rted/dotnet-startup-projects/network/updates/799629162
```
updater | Updating dotnet-tools.json files.
updater | Dependency [Verify.Xunit] not found in any dotnet-tools.json files.
updater | Running for project file [test/Tests.csproj]
updater | Updating project [/home/dependabot/dependabot-updater/repo/src/startup-projects.csproj]
updater | Updating [global.json] file.
updater | Dependency [Verify.Xunit] not found.
updater | Running for SDK-style project
updater | Package [Verify.Xunit] Does not exist as a dependency in [/home/dependabot/dependabot-updater/repo/src/startup-projects.csproj].
updater | Update complete.
updater | Updating project [/home/dependabot/dependabot-updater/repo/test/Tests.csproj]
updater | Running for SDK-style project
updater | Found incorrect [PackageReference] version attribute in [test/Tests.csproj].
updater | dotnet build in GetAllPackageDependenciesAsync failed. STDOUT: MSBuild version 17.9.6+a4ecab324 for .NET
updater | Determining projects to restore...
updater | /tmp/package-dependency-resolution_ZOYY5B/Project.csproj : error NU1107: Version conflict detected for xunit.extensibility.core. Install/reference xunit.extensibility.core 2.7.0 directly to project Project to resolve this issue.
updater | /tmp/package-dependency-resolution_ZOYY5B/Project.csproj : error NU1107: Project -> Verify.Xunit 23.5.0 -> xunit.extensibility.execution 2.7.0 -> xunit.extensibility.core (= 2.7.0)
updater | /tmp/package-dependency-resolution_ZOYY5B/Project.csproj : error NU1107: Project -> xunit 2.6.6 -> xunit.core 2.6.6 -> xunit.extensibility.core (= 2.6.6).
updater | Failed to restore /tmp/package-dependency-resolution_ZOYY5B/Project.csproj (in 385 ms).
updater |
updater | Build FAILED.
updater |
updater | /tmp/package-dependency-resolution_ZOYY5B/Project.csproj : error NU1107: Version conflict detected for xunit.extensibility.core. Install/reference xunit.extensibility.core 2.7.0 directly to project Project to resolve this issue.
updater | /tmp/package-dependency-resolution_ZOYY5B/Project.csproj : error NU1107: Project -> Verify.Xunit 23.5.0 -> xunit.extensibility.execution 2.7.0 -> xunit.extensibility.core (= 2.7.0)
updater | /tmp/package-dependency-resolution_ZOYY5B/Project.csproj : error NU1107: Project -> xunit 2.6.6 -> xunit.core 2.6.6 -> xunit.extensibility.core (= 2.6.6).
updater | 0 Warning(s)
updater | 1 Error(s)
```
```
updater | Updating dotnet-tools.json files.
updater | Dependency [xunit] not found in any dotnet-tools.json files.
updater | Running for project file [test/Tests.csproj]
updater | Updating project [/home/dependabot/dependabot-updater/repo/src/startup-projects.csproj]
updater | Updating [global.json] file.
updater | Dependency [xunit] not found.
updater | Running for SDK-style project
updater | Package [xunit] Does not exist as a dependency in [/home/dependabot/dependabot-updater/repo/src/startup-projects.csproj].
updater | Update complete.
updater | Updating project [/home/dependabot/dependabot-updater/repo/test/Tests.csproj]
updater | Running for SDK-style project
updater | dotnet build in GetAllPackageDependenciesAsync failed. STDOUT: MSBuild version 17.9.6+a4ecab324 for .NET
updater | Determining projects to restore...
updater | /tmp/package-dependency-resolution_yuAJio/Project.csproj : error NU1107: Version conflict detected for xunit.extensibility.core. Install/reference xunit.extensibility.core 2.7.0 directly to project Project to resolve this issue.
updater | /tmp/package-dependency-resolution_yuAJio/Project.csproj : error NU1107: Project -> Verify.Xunit 23.5.0 -> xunit.extensibility.execution 2.7.0 -> xunit.extensibility.core (= 2.7.0)
updater | /tmp/package-dependency-resolution_yuAJio/Project.csproj : error NU1107: Project -> xunit 2.6.6 -> xunit.core 2.6.6 -> xunit.extensibility.core (= 2.6.6).
updater | Failed to restore /tmp/package-dependency-resolution_yuAJio/Project.csproj (in 365 ms).
updater |
updater | Build FAILED.
updater |
updater | /tmp/package-dependency-resolution_yuAJio/Project.csproj : error NU1107: Version conflict detected for xunit.extensibility.core. Install/reference xunit.extensibility.core 2.7.0 directly to project Project to resolve this issue.
updater | /tmp/package-dependency-resolution_yuAJio/Project.csproj : error NU1107: Project -> Verify.Xunit 23.5.0 -> xunit.extensibility.execution 2.7.0 -> xunit.extensibility.core (= 2.7.0)
updater | /tmp/package-dependency-resolution_yuAJio/Project.csproj : error NU1107: Project -> xunit 2.6.6 -> xunit.core 2.6.6 -> xunit.extensibility.core (= 2.6.6).
updater | 0 Warning(s)
updater | 1 Error(s)
updater |
updater | Time Elapsed 00:00:01.50
updater |
updater | STDERR:
updater |
updater | Package [xunit] Does not exist as a dependency in [/home/dependabot/dependabot-updater/repo/test/Tests.csproj].
updater | Update complete.
updater | 2024/03/13 20:20:10 ERROR Error processing xunit (Dependabot::DependabotError)
updater | 2024/03/13 20:20:10 ERROR FileUpdater failed
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/dependency_change_builder.rb:69:in `run'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/sorbet-runtime-0.5.11193/lib/types/private/methods/call_validation_2_7.rb:59:in `bind_call'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/sorbet-runtime-0.5.11193/lib/types/private/methods/call_validation_2_7.rb:59:in `block in create_validator_method_fast0'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/dependency_change_builder.rb:42:in `create_from'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/sorbet-runtime-0.5.11193/lib/types/private/methods/call_validation.rb:169:in `bind_call'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/sorbet-runtime-0.5.11193/lib/types/private/methods/call_validation.rb:169:in `validate_call_skip_block_type'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/sorbet-runtime-0.5.11193/lib/types/private/methods/call_validation.rb:111:in `block in create_validator_slow_skip_block_type'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/group_update_creation.rb:114:in `create_change_for'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/group_update_creation.rb:72:in `block in compile_all_dependency_changes_for'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/group_update_creation.rb:38:in `each'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/group_update_creation.rb:38:in `compile_all_dependency_changes_for'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/create_group_update_pull_request.rb:70:in `dependency_change'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/create_group_update_pull_request.rb:44:in `perform'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:127:in `run_update_for'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:109:in `block in run_grouped_dependency_updates'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:108:in `each'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:108:in `run_grouped_dependency_updates'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:55:in `perform'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/updater.rb:45:in `run'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/update_files_command.rb:44:in `block in perform_job'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace/tracer.rb:37:in `block in in_span'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace.rb:70:in `block in with_span'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/context.rb:87:in `with_value'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace.rb:70:in `with_span'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/vendor/ruby/3.1.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace/tracer.rb:37:in `in_span'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/update_files_command.rb:18:in `perform_job'
updater | 2024/03/13 20:20:10 ERROR /home/dependabot/dependabot-updater/lib/dependabot/base_command.rb:37:in `run'
updater | 2024/03/13 20:20:10 ERROR bin/update_files.rb:33:in `'
```
### Native package manager behavior
Updating these 3 packages together via the Visual Studio UI works without any issue or warnings, the same is true for hand editing the project file and then doing `dotnet restore` or `dotnet build`.
I'm not sure how to do this with the default dotnet cli because `dotnet add package ...` only works with one at a time, while tools like `dotnet-outdated` work with multiple at a time but aren't official or included in the SDk.
### Images of the diff or a link to the PR, issue, or logs
_No response_
### Smallest manifest that reproduces the issue
```xml
net8.0
runtime; build; native; contentfiles; analyzers; buildtransitive
all
```
Contributor guide
Research direction
Start with lib/dependabot/updater/group_update_creation.rb and lib/dependabot/dependency_change_builder.rb, using the grouped NuGet configuration and the logged NU1107 conflict as the reproduction. Trace how grouped changes are compiled for test/Tests.csproj and verify successful behavior by ensuring the grouped update can restore and build with the requested package versions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ruby
- Domain
- build-system, devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100