-
Notifications
You must be signed in to change notification settings - Fork 266
[Spec] Machine readable output for dotnet list package
- Status: Reviewing
- Authors: Xavier Decoster
#7752 - dotnet list package is difficult to parse
Having a machine-readable output for dotnet list package would be very convenient, especially when --outdated and --deprecated come into the picture. Making the output machine-readable unlocks additional tooling and automation scenarios.
This spec is based on today's (and planned) console output for the dotnet list package command. During review, I'd love to capture feedback/input and make sure we understand what data and format would be desired for this machine-readable output.
Everyone who uses dotnet.exe list package command to query for installed, outdated or deprecated package information.
- Ability to use new
--jsonoption for alldotnet list packagecommands to ensure JSON-formatted output is emitted to the console.
- To avoid disk I/O, we won't support saving the machine-readable output to disk as part of this spec. The work-around is for the consumer to read from the console's
stdoutstream. - At this point, no other CLI commands will be within scope for this feature.
A new --json command option will be added to the dotnet list package command. This command option needs to be forwarded from dotnet CLI to NuGet XPlat.
The CLI --help output should be updated to include the new --json command help.
Usage: dotnet list <PROJECT | SOLUTION> package [options]
Arguments:
<PROJECT | SOLUTION> The project or solution file to operate on. If a file is not specified, the command will search the current directory for one.
Options:
-h, --help Show command line help.
--json Output machine-readable JSON to the console.
--outdated Lists packages that have newer versions.
--deprecated Lists packages that have been deprecated.
--framework <FRAMEWORK | FRAMEWORK\RID> Chooses a framework to show its packages. Use the option multiple times for multiple frameworks.
--include-transitive Lists transitive and top-level packages.
--include-prerelease Consider packages with prerelease versions when searching for newer packages. Requires the '--outdated' or '--deprecated' option.
--highest-patch Consider only the packages with a matching major and minor version numbers when searching for newer packages. Requires the '--outdated' option.
--highest-minor Consider only the packages with a matching major version number when searching for newer packages. Requires the '--outdated' option.
--config <CONFIG_FILE> The path to the NuGet config file to use. Requires the '--outdated' or '--deprecated' option.
--source <SOURCE> The NuGet sources to use when searching for newer packages. Requires the '--outdated' or '--deprecated' option.
{
"installed": [
{
"framework": "netcoreapp2.0",
"topLevelPackages": [
{
"id": "My.Legacy.Package",
"resolvedVersion": "2.0.0"
},
{
"id": "My.Buggy.Package",
"resolvedVersion": "1.1.0"
},
{
"id": "My.CompletelyBroken.Package",
"resolvedVersion": "0.9.0"
}
],
"transitivePackages": null
}
]
}
{
"outdated": [
{
"framework": "netcoreapp2.0",
"topLevelPackages": [
{
"id": "NuGet.Common",
"requestedVersion": "4.8.0-preview1.5146",
"resolvedVersion": "4.8.0-preview1.5146",
"latestVersion": "4.9.1-zlocal.52990"
}
],
"transitivePackages": [
{
"id": "NuGet.Frameworks",
"requestedVersion": "4.8.0-preview3.5278",
"latestVersion": "4.9.1-zlocal.52990"
}
]
}
]
}
{
"deprecated": [
{
"framework": "netcoreapp2.0",
"topLevelPackages": [
{
"id": "My.Legacy.Package",
"resolvedVersion": "2.0.0",
"reasons": ["Legacy"],
"alternativePackage": {
"id": "My.Awesome.Package",
"versionRange": "[3.0.0,)"
}
},
{
"id": "My.Buggy.Package",
"resolvedVersion": "1.1.0",
"reasons": ["Critical Bugs"],
"alternativePackage": {
"id": "My.NotBuggy.Package",
"versionRange": "*"
}
},
{
"id": "My.CompletelyBroken.Package",
"resolvedVersion": "0.9.0",
"reasons": ["Legacy", "Critical Bugs"],
"alternativePackage": null
}
],
"transitivePackages": null
}
]
}
Check out the proposals in the accepted & proposed folders on the repository, and active PRs for proposals being discussed today.