Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
MIT License
The MIT License (MIT)

Copyright (c) 2026 NuGet

All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
Expand Down
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
# Client.Tools

This repository contains tools shipped by the NuGet Client team to help developers effectively use the latest NuGet features.
This repository contains tools shipped by the NuGet Client team to help developers effectively use the latest NuGet features.

## Tools

- [dotnet-package-skills](dotnet-package-skills/README.md) copies agent skills bundled in NuGet packages into a repository's skills folder.

## Build

Run from the repository root on Windows, with PowerShell 7 and the root-pinned .NET SDK:

```powershell
eng\common\build.cmd -restore -build -test -pack -configuration Release
```

Install the .NET 8 runtime into the same .NET installation that Arcade selects. The SDK supplies
the .NET 10 runtime. The build graph retains `eng\Infrastructure.proj` and includes the tool
solution. Artifacts use Arcade's `artifacts\bin`, `obj`, `log`, `TestResults`, and
`packages\Release\Shipping` layout.

The public pipeline produces unsigned packages. The official pipeline uses Arcade's recursive
signing with owner-approved MicroBuild/ESRP resources. Both publish NuGet packages as build
artifacts only. See the [tool pipeline guide](eng/pipelines/dotnet-package-skills/README.md).
7 changes: 7 additions & 0 deletions dotnet-package-skills/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
bin/
obj/
artifacts/
node_modules/
*.user
.DS_Store
.agents/
44 changes: 44 additions & 0 deletions dotnet-package-skills/CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# How to contribute

Thank you for your help. This tool is small and simple on purpose. Keep changes small and simple
too.

## Set up your computer

Install the .NET SDK that the repository root's `global.json` selects. Install PowerShell 7.
Install the .NET 8 runtime into the same .NET installation that Arcade uses. The SDK supplies the .NET 10 runtime.
The tool and its C# test suite target both net8.0 and net10.0. CI runs on Windows only.
Use the root SDK, Arcade imports, and public feeds. Do not add a tool-local `global.json` or `NuGet.config`.

```powershell
git clone https://github.com/NuGet/Client.Tools.git
Set-Location .\Client.Tools
eng\common\build.cmd -restore -build -test -pack -configuration Release
```

Try your build against a real repository without installing it:

```powershell
eng\common\dotnet.cmd artifacts\bin\DotnetPackageSkills\Release\net10.0\dotnet-package-skills.dll `
list --target C:\path\to\YourApp.sln
```

The build creates an unsigned tool package under `artifacts\packages\Release\Shipping`.
It does not replace a globally installed tool. Only the official pipeline signs the package.

## Layout

```
src/
├── Program.cs CLI surface: commands, options, exit codes
├── SkillInstallService.cs Orchestration. This is the only file that puts the steps in order.
├── Cli/OutputWriter.cs Writes reports for people to read
├── Cli/SkillPicker.cs The --interactive picker. It shows one page per screen.
├── Cli/ITerminal.cs An interface for console access, so tests can replace the console
├── Cli/InteractiveSkills.cs Picker-only metadata and selection mapping
├── Infrastructure/ Process execution and the dotnet CLI wrapper
├── NuGet/ Target detection, package listing, cache path resolution
└── Skills/ Discovery, copying, version-change removal, the install manifest

tests/ xunit tests. Application tests use in-process fakes.
```
24 changes: 24 additions & 0 deletions dotnet-package-skills/Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<Project>

<PropertyGroup>
<MicrosoftNETTestSdkVersion>17.14.1</MicrosoftNETTestSdkVersion>
<XUnitVersion>2.9.3</XUnitVersion>
<XUnitAnalyzersVersion>1.18.0</XUnitAnalyzersVersion>
<XUnitRunnerVisualStudioVersion>3.1.4</XUnitRunnerVisualStudioVersion>
</PropertyGroup>

<Import Project="..\Directory.Build.props" />

<PropertyGroup>
<SignAssembly>false</SignAssembly>
<IsShipping>false</IsShipping>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

</Project>
8 changes: 8 additions & 0 deletions dotnet-package-skills/DotnetPackageSkills.slnx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Solution>
<Folder Name="/src/">
<Project Path="src/DotnetPackageSkills.csproj" />
</Folder>
<Folder Name="/tests/">
<Project Path="tests/DotnetPackageSkills.Tests.csproj" />
</Folder>
</Solution>
Loading
Loading