Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support NuGet lockfiles (Updated) #9678

Merged
merged 13 commits into from
Sep 25, 2024
Merged

Support NuGet lockfiles (Updated) #9678

merged 13 commits into from
Sep 25, 2024

Conversation

na1307
Copy link
Contributor

@na1307 na1307 commented May 6, 2024

Fix #1303

Since #6031 was last updated, Dependabot NuGet logic has been rewritten as C#, so I've put this PR up.

I'm familiar with C#, but not with Ruby. I don't know how to add a test for this. Any advice is welcome.

@na1307 na1307 requested review from a team as code owners May 6, 2024 08:46
@github-actions github-actions bot added the L: dotnet:nuget NuGet packages via nuget or dotnet label May 6, 2024
@ghost
Copy link

ghost commented May 27, 2024

The linting failure for fetch_files is because your changes pushed the complexity over the limit.
You should be able to replace this block:

        fetched_files = []
        fetched_files += project_files
        fetched_files += directory_build_files
        fetched_files += imported_property_files

        fetched_files += packages_config_files
        fetched_files += nuget_config_files
        fetched_files += packages_lock_files
        fetched_files << global_json if global_json
        fetched_files << dotnet_tools_json if dotnet_tools_json
        fetched_files << packages_props if packages_props

with this:

  fetched_files = [
    *project_files,
    *directory_build_files,
    *imported_property_files,
    *packages_config_files,
    *nuget_config_files,
    *packages_lock_files,
    global_json,
    dotnet_tools_json,
    packages_props
  ].compact

and that should reduce the complexity.
We use the splat operator * instead of appending to a list.
And we call compact to remove nils instead of checking individually.

@na1307
Copy link
Contributor Author

na1307 commented Jun 6, 2024

I don't know why the test failed. It was successful when I tested it locally.

@na1307 na1307 closed this Jun 6, 2024
@na1307 na1307 reopened this Jun 6, 2024
@na1307 na1307 requested a review from JoeRobich June 10, 2024 13:25
@josesimoes
Copy link

The restore --force-evaluate should indeed fix this.
Can we please have this fix in production and get rid of the issue finally? It was reported in 2019... 😯

@rkm rkm mentioned this pull request Jul 23, 2024
11 tasks
@baynezy
Copy link

baynezy commented Sep 3, 2024

@na1307 - do you need help with this? I am very keen to get this merged.

@mheguy
Copy link

mheguy commented Sep 13, 2024

Hey @jonjanego, would you be able to have someone from the team take a look at this to evaluate next steps?

@na1307 na1307 requested a review from brettfo September 21, 2024 04:30
@abdulapopoola abdulapopoola merged commit 08f2675 into dependabot:main Sep 25, 2024
51 checks passed
@abdulapopoola
Copy link
Member

thanks @na1307 for the contribution!

@sliekens
Copy link

Actually huge that this work is now completed

@ffried
Copy link
Contributor

ffried commented Sep 26, 2024

This seems to fail if the csproj has spaces in its name:

2024-09-26T06:18:14.0831914Z Running for project file [VINMAPP File API Client.csproj]
2024-09-26T06:18:14.0833473Z Updating project [/home/dependabot/dependabot-updater/repo/VINMAPP File API Client.csproj]
2024-09-26T06:18:14.0834964Z   Running for SDK-style project
2024-09-26T06:18:14.0836255Z     Found incorrect [PackageReference] version attribute in [VINMAPP File API Client.csproj].
2024-09-26T06:18:14.0837461Z     Saved [VINMAPP File API Client.csproj].
2024-09-26T06:18:14.0838171Z     Updating lock file
2024-09-26T06:18:14.0839802Z Temporarily removing `global.json` from `/home/dependabot/dependabot-updater/repo` and retaining MSBuild SDK declarations.
2024-09-26T06:18:14.0841256Z       Lock file update failed.
2024-09-26T06:18:14.0842000Z STDOUT:
2024-09-26T06:18:14.0842720Z MSBUILD : error MSB1008: Only one project can be specified.
2024-09-26T06:18:14.0847533Z     Full command line: '/usr/local/dotnet/current/sdk/8.0.303/MSBuild.dll -maxcpucount -verbosity:m -nologo -target:Restore -property:RestoreForceEvaluate=true /home/dependabot/dependabot-updater/repo/VINMAPP File API Client.csproj'

The project path should be quoted in the execution to make sure it's passed completely.

@na1307
Copy link
Contributor Author

na1307 commented Sep 26, 2024

var (exitCode, stdout, stderr) = await ProcessEx.RunAsync("dotnet", $"restore --force-evaluate {projectPath}", workingDirectory: projectDirectory);

Oh, I think I forgot the quotation marks.

@ffried
Copy link
Contributor

ffried commented Sep 26, 2024

@na1307 I've forked the project and found more issues where paths are not quoted. I'm working on a fix.

@ffried
Copy link
Contributor

ffried commented Sep 26, 2024

PR here: #10676

@skolima
Copy link

skolima commented Sep 27, 2024

Looks like (from the logs) that Dependabot now generates lock file updates - great! But sadly at the same time it started failing to create the PR for us, GitHub responds with 400 {"errors":[{"status":400,"title":"Bad Request","detail":"The request contains invalid or unauthorized changes"}]}.

log file excerpt
updater | 2024/09/27 10:21:59 INFO <job_892011036> Updating Aspire.Azure.Storage.Blobs from 8.2.0 to 8.2.1
updater | running NuGet updater:
/opt/nuget/NuGetUpdater/NuGetUpdater.Cli update --repo-root /home/dependabot/dependabot-updater/repo --solution-or-project /home/dependabot/dependabot-updater/repo/src/MyProject/MyProject.csproj --dependency Aspire.Azure.Storage.Blobs --new-version 8.2.1 --previous-version 8.2.0 --result-output-path /tmp/update-result.json --verbose
  proxy | 2024/09/27 10:22:02 [250] GET https://api.nuget.org:443/v3-flatcontainer/aspire.azure.storage.blobs/8.2.1/aspire.azure.storage.blobs.8.2.1.nupkg
  proxy | 2024/09/27 10:22:02 [250] 200 https://api.nuget.org:443/v3-flatcontainer/aspire.azure.storage.blobs/8.2.1/aspire.azure.storage.blobs.8.2.1.nupkg
  proxy | 2024/09/27 10:22:07 Posting metrics to remote API endpoint
  proxy | 2024/09/27 10:22:07 Successfully posted metrics data via api client
updater |   Updating [.config/dotnet-tools.json] file.
    Dependency [Aspire.Azure.Storage.Blobs] not found.
  No global.json file found.
Running for project file [src/MyProject/MyProject.csproj]
Updating project [/home/dependabot/dependabot-updater/repo/src/MyProject/MyProject.csproj]
  Running for SDK-style project
    Found incorrect [PackageVersion] version attribute in [src/Directory.Packages.props].
    Saved [src/Directory.Packages.props].
    Updating lock file
Update complete.
  Writing update result to [/tmp/update-result.json].
2024/09/27 10:22:12 INFO <job_892011036> update result: {
  "ErrorType": null,
  "ErrorDetails": null
}
updater | The contents of file [src/Directory.Packages.props] were updated.
updater | The contents of file [src/MyProject/packages.lock.json] were updated.
updater | 2024/09/27 10:22:12 INFO <job_892011036> Submitting Aspire.Azure.Storage.Blobs pull request for creation
  proxy | 2024/09/27 10:22:12 [252] GET https://api.github.com:443/repos/redacted/commits?per_page=100
  proxy | 2024/09/27 10:22:12 [252] 200 https://api.github.com:443/repos/redacted/commits?per_page=100
  proxy | 2024/09/27 10:22:12 [254] GET https://api.nuget.org:443/v3-flatcontainer/aspire.azure.storage.blobs/8.2.1/aspire.azure.storage.blobs.nuspec
2024/09/27 10:22:12 [254] 200 https://api.nuget.org:443/v3-flatcontainer/aspire.azure.storage.blobs/8.2.1/aspire.azure.storage.blobs.nuspec
  proxy | 2024/09/27 10:22:12 [256] GET https://api.github.com:443/repos/dotnet/aspire/releases?per_page=100
  proxy | 2024/09/27 10:22:12 [256] 200 https://api.github.com:443/repos/dotnet/aspire/releases?per_page=100
  proxy | 2024/09/27 10:22:12 [258] GET https://api.github.com:443/repos/dotnet/aspire/contents/
2024/09/27 10:22:12 [258] 200 https://api.github.com:443/repos/dotnet/aspire/contents/
  proxy | 2024/09/27 10:22:12 [260] GET https://api.github.com:443/repos/dotnet/aspire/contents/docs
  proxy | 2024/09/27 10:22:12 [260] 200 https://api.github.com:443/repos/dotnet/aspire/contents/docs
  proxy | 2024/09/27 10:22:12 [262] GET https://github.com:443/dotnet/aspire.git/info/refs?service=git-upload-pack
2024/09/27 10:22:12 [262] 200 https://github.com:443/dotnet/aspire.git/info/refs?service=git-upload-pack
  proxy | 2024/09/27 10:22:12 [264] GET https://api.github.com:443/repos/dotnet/aspire/contents/?ref=v8.2.1
2024/09/27 10:22:12 [264] 200 https://api.github.com:443/repos/dotnet/aspire/contents/?ref=v8.2.1
  proxy | 2024/09/27 10:22:12 [266] GET https://api.github.com:443/repos/dotnet/aspire/contents/docs?ref=v8.2.1
  proxy | 2024/09/27 10:22:12 [266] 200 https://api.github.com:443/repos/dotnet/aspire/contents/docs?ref=v8.2.1
  proxy | 2024/09/27 10:22:12 [268] GET https://github.com:443/dotnet/aspire.git/info/refs?service=git-upload-pack
  proxy | 2024/09/27 10:22:12 [268] 200 https://github.com:443/dotnet/aspire.git/info/refs?service=git-upload-pack
  proxy | 2024/09/27 10:22:13 [270] GET https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.0
2024/09/27 10:22:13 [270] 200 https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.0
  proxy | 2024/09/27 10:22:13 [272] GET https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.1
  proxy | 2024/09/27 10:22:13 [272] 200 https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.1
  proxy | 2024/09/27 10:22:13 [274] GET https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.0
  proxy | 2024/09/27 10:22:13 [274] 200 https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.0
  proxy | 2024/09/27 10:22:13 [276] GET https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.1
  proxy | 2024/09/27 10:22:13 [276] 200 https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.1
  proxy | 2024/09/27 10:22:13 [278] GET https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.0
  proxy | 2024/09/27 10:22:13 [278] 200 https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.0
  proxy | 2024/09/27 10:22:13 [280] GET https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.1
2024/09/27 10:22:13 [280] 200 https://api.github.com:443/repos/dotnet/aspire/commits?sha=v8.2.1
  proxy | 2024/09/27 10:22:13 [282] POST /update_jobs/892011036/create_pull_request
  proxy | 2024/09/27 10:22:13 [282] 400 /update_jobs/892011036/create_pull_request
  proxy | 2024/09/27 10:22:13 [284] POST /update_jobs/892011036/record_update_job_unknown_error
  proxy | 2024/09/27 10:22:13 [284] 204 /update_jobs/892011036/record_update_job_unknown_error
  proxy | 2024/09/27 10:22:13 [286] POST /update_jobs/892011036/record_update_job_error
  proxy | 2024/09/27 10:22:13 [286] 204 /update_jobs/892011036/record_update_job_error
  proxy | 2024/09/27 10:22:13 [288] POST /update_jobs/892011036/increment_metric
2024/09/27 10:22:13 [288] 204 /update_jobs/892011036/increment_metric
  proxy | 2024/09/27 10:22:13 [290] POST /update_jobs/892011036/record_update_job_unknown_error
2024/09/27 10:22:13 [290] 204 /update_jobs/892011036/record_update_job_unknown_error
updater | 2024/09/27 10:22:13 ERROR <job_892011036> Error processing Aspire.Azure.Storage.Blobs (Dependabot::ApiError)
2024/09/27 10:22:13 ERROR <job_892011036> {"errors":[{"status":400,"title":"Bad Request","detail":"The request contains invalid or unauthorized changes"}]}
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/api_client.rb:42:in `block in create_pull_request'
updater | 2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace/tracer.rb:37:in `block in in_span'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace.rb:70:in `block in with_span'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/context.rb:87:in `with_value'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace.rb:70:in `with_span'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace/tracer.rb:37:in `in_span'
updater | 2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/api_client.rb:34:in `create_pull_request'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:734:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:734:in `block in create_validator_procedure_fast2'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/service.rb:57:in `create_pull_request'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:734:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:734:in `block in create_validator_procedure_fast2'
updater | 2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/update_all_versions.rb:325:in `create_pull_request'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:687:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:687:in `block in create_validator_procedure_fast1'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/update_all_versions.rb:186:in `check_and_create_pull_request'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:687:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:687:in `block in create_validator_procedure_fast1'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/update_all_versions.rb:94:in `check_and_create_pr_with_error_handling'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:687:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation_2_7.rb:687:in `block in create_validator_procedure_fast1'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/update_all_versions.rb:59:in `block in perform'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/update_all_versions.rb:59:in `each'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/update_all_versions.rb:59:in `perform'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation.rb:270:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation.rb:270:in `validate_call'
updater | 2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/_methods.rb:277:in `block in _on_method_added'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:137:in `block in run_ungrouped_dependency_updates'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:122:in `each'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:122:in `run_ungrouped_dependency_updates'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation.rb:270:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation.rb:270:in `validate_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/_methods.rb:277:in `block in _on_method_added'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater/operations/group_update_all_versions.rb:65:in `perform'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation.rb:270:in `bind_call'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/call_validation.rb:270:in `validate_call'
updater | 2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/sorbet-runtime-0.5.11444/lib/types/private/methods/_methods.rb:277:in `block in _on_method_added'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/updater.rb:45:in `run'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/update_files_command.rb:44:in `block in perform_job'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace/tracer.rb:37:in `block in in_span'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace.rb:70:in `block in with_span'
updater | 2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/context.rb:87:in `with_value'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace.rb:70:in `with_span'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/vendor/ruby/3.3.0/gems/opentelemetry-api-1.2.3/lib/opentelemetry/trace/tracer.rb:37:in `in_span'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/update_files_command.rb:18:in `perform_job'
2024/09/27 10:22:13 ERROR <job_892011036> /home/dependabot/dependabot-updater/lib/dependabot/base_command.rb:37:in `run'
2024/09/27 10:22:13 ERROR <job_892011036> bin/update_files.rb:46:in `<main>'
  proxy | 2024/09/27 10:22:13 [292] PATCH /update_jobs/892011036/mark_as_processed
  proxy | 2024/09/27 10:22:13 [292] 204 /update_jobs/892011036/mark_as_processed
updater | 2024/09/27 10:22:13 INFO <job_892011036> Finished job processing
updater | 2024/09/27 10:22:13 INFO Results:
Dependabot encountered '8' error(s) during execution, please check the logs for more details.
+-------------------------------------------------------------+
|                Dependencies failed to update                |
+---------------------------------------+---------------------+
| Aspire.Npgsql                         | unknown_error       |
| xunit                                 | unknown_error       |
| Azure.Storage.Blobs                   | unknown_error       |
| Microsoft.Extensions.ServiceDiscovery | update_not_possible |
| Azure.Identity                        | unknown_error       |
| Aspire.Azure.Messaging.EventHubs      | unknown_error       |
| Scrutor                               | unknown_error       |
| Aspire.Azure.Storage.Blobs            | unknown_error       |
+---------------------------------------+---------------------+
Failure running container b884a6be21bc651d8906a802f930c26301b1660c800a76d1c530d059922d3175
Cleaned up container b884a6be21bc651d8906a802f930c26301b1660c800a76d1c530d059922d3175
  proxy | 2024/09/27 10:22:14 111/1139 calls cached (9%)
  proxy | 2024/09/27 10:22:14 Posting metrics to remote API endpoint
  proxy | 2024/09/27 10:22:14 Successfully posted metrics data via api client

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
L: dotnet:nuget NuGet packages via nuget or dotnet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support for NuGet package lock files