Skip to main content

Utilisation du registre NuGet

Vous pouvez configurer l’interface de ligne de commande (CLI) dotnet pour publier des packages NuGet sur GitHub Packages et utiliser les packages stockés sur GitHub Packages comme dépendances dans un projet .NET.

Qui peut utiliser cette fonctionnalité ?

GitHub Packages est disponible avec GitHub Free, GitHub Pro, GitHub Free pour les organisations, GitHub Team, GitHub Enterprise Cloud et GitHub Enterprise Server 3.0 ou ultérieur.
GitHub Packages n’est pas disponible pour les référentiels privés appartenant à des comptes qui utilisent des plans par référentiel hérités. Par ailleurs, les comptes utilisant des plans par dépôt hérités ne peuvent pas accéder aux registres qui prennent en charge les autorisations granulaires, car ces comptes sont facturés par dépôt. Pour obtenir la liste des registres prenant en charge les autorisations granulaires, consultez la section « À propos des autorisations pour les packages GitHub ». Pour plus d’informations, consultez « Plans de GitHub ».

Authentification auprès de GitHub Packages

GitHub Packages prend uniquement en charge l’authentification à l’aide d’un personal access token (classic). Pour plus d’informations, consultez « Gestion de vos jetons d'accès personnels ».

Vous avez besoin d’un jeton d’accès pour publier, installer et supprimer des packages privés, internes et publics.

Vous pouvez utiliser un personal access token (classic) pour vous authentifier sur GitHub Packages ou l’API GitHub. Quand vous créez un personal access token (classic), vous pouvez l’attribuer à différentes étendues selon vos besoins. Pour plus d’informations sur les étendues liées aux packages pour un personal access token (classic), consultez « À propos des autorisations pour les packages GitHub ».

Pour vous authentifier sur un registre GitHub Packages dans un workflow GitHub Actions, vous pouvez utiliser :

  • GITHUB_TOKEN pour publier des packages associés au dépôt du workflow.
  • un personal access token (classic) avec au moins l’étendue read:packages pour installer des packages associés à d’autres dépôts privés (auxquels GITHUB_TOKEN ne peut pas accéder).

Authentification dans un workflow GitHub Actions

Ce registre prend en charge les autorisations granulaires. Pour les registres prenant en charge les autorisations granulaires, si votre workflow GitHub Actions utilise un personal access token pour s’authentifier auprès d’un registre, nous vous recommandons vivement de mettre à jour votre workflow pour utiliser GITHUB_TOKEN. Pour obtenir des conseils sur la mise à jour de vos workflows qui s’authentifient auprès d’un registre avec un personal access token, consultez « Publication et installation d’un package avec GitHub Actions ».

Remarque : la capacité des workflows GitHub Actions de supprimer et de restaurer des packages à l’aide de l’API REST est actuellement en version bêta publique et susceptible d’être modifiée.

Vous pouvez utiliser un GITHUB_TOKEN dans un workflow GitHub Actions pour supprimer ou restaurer un package via l’API REST si le jeton dispose de l’autorisation admin sur le package. Les référentiels qui publient des packages à l’aide d’un workflow et les référentiels que vous avez explicitement connectés à des packages se voient automatiquement accorder l’autorisation admin aux packages dans le référentiel.

Pour plus d’informations sur GITHUB_TOKEN, consultez « Authentification par jeton automatique ». Pour plus d’informations sur les bonnes pratiques lors de l’utilisation d’un registre dans des actions, consultez « Durcissement de la sécurité pour GitHub Actions ».

Utilisez la commande suivante pour vous authentifier auprès de GitHub Packages dans un workflow GitHub Actions avec GITHUB_TOKEN au lieu de coder en dur un personal access token dans un fichier nuget.config dans le dépôt :

dotnet nuget add source --username USERNAME --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github "https://nuget.pkg.github.com/NAMESPACE/index.json"

Remplacez NAMESPACE par le nom du compte personnel ou de l’organisation auquel vos packages sont délimités.

Vous pouvez également choisir d’accorder des autorisations d’accès aux packages indépendamment pour GitHub Codespaces et GitHub Actions. Pour plus d’informations, consultez « Configuration du contrôle d’accès et de la visibilité d’un package » et « Configuration du contrôle d’accès et de la visibilité d’un package ».

Authentification avec un personal access token

GitHub Packages prend uniquement en charge l’authentification à l’aide d’un personal access token (classic). Pour plus d’informations, consultez « Gestion de vos jetons d'accès personnels ».

Vous avez besoin d’un jeton d’accès pour publier, installer et supprimer des packages privés, internes et publics.

Vous pouvez utiliser un personal access token (classic) pour vous authentifier sur GitHub Packages ou l’API GitHub. Quand vous créez un personal access token (classic), vous pouvez l’attribuer à différentes étendues selon vos besoins. Pour plus d’informations sur les étendues liées aux packages pour un personal access token (classic), consultez « À propos des autorisations pour les packages GitHub ».

Pour vous authentifier sur un registre GitHub Packages dans un workflow GitHub Actions, vous pouvez utiliser :

  • GITHUB_TOKEN pour publier des packages associés au dépôt du workflow.
  • un personal access token (classic) avec au moins l’étendue read:packages pour installer des packages associés à d’autres dépôts privés (auxquels GITHUB_TOKEN ne peut pas accéder).

Vous devez utiliser un personal access token (classic) avec les étendues appropriées pour publier et installer des packages dans GitHub Packages. Pour plus d’informations, consultez « Introduction aux packages GitHub ».

Pour vous authentifier auprès de GitHub Packages avec l’interface de ligne de commande (CLI) dotnet, créez un fichier nuget.config dans votre répertoire de projet spécifiant GitHub Packages comme source sous packageSources pour le client CLI dotnet.

Vous devez remplacer :

  • USERNAME par le nom de votre compte personnel sur GitHub.
  • TOKEN par votre personal access token (classic).
  • NAMESPACE par le nom du compte personnel ou de l'organisation auquel vos packages sont délimités.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="github" value="https://nuget.pkg.github.com/NAMESPACE/index.json" />
    </packageSources>
    <packageSourceCredentials>
        <github>
            <add key="Username" value="USERNAME" />
            <add key="ClearTextPassword" value="TOKEN" />
        </github>
    </packageSourceCredentials>
</configuration>

Publication d’un package

Vous pouvez publier un package sur GitHub Packages en vous authentifiant avec un fichier nuget.config ou en utilisant l’option de ligne de commande --api-key avec votre personal access token (classic) GitHub.

Le registre NuGet stocke les packages dans votre compte d’organisation ou personnel et vous autorise à associer les packages à un dépôt. Vous pouvez choisir d’hériter des autorisations d’un dépôt ou de définir des autorisations granulaires indépendamment d’un dépôt.

Lorsque vous publiez un package pour la première fois, la visibilité par défaut est privée. Pour modifier la visibilité ou définir les autorisations d’accès, consultez « Configuration du contrôle d’accès et de la visibilité d’un package ». Pour plus d’informations sur la liaison d’un package publié à un dépôt, consultez « Connexion d’un dépôt à un package ».

Si vous spécifiez une RepositoryURL dans votre fichier nuget.config, le package publié est automatiquement connecté au dépôt spécifié. Pour plus d’informations, consultez « Utilisation du registre NuGet ». Pour plus d’informations sur la liaison d’un package déjà publié à un dépôt, consultez « Connexion d’un dépôt à un package ».

Publication d’un package en utilisant un personal access token GitHub en tant que clé API

Si vous n'avez pas encore de personal access token à utiliser pour votre compte sur GitHub.com, consultez « Gestion de vos jetons d'accès personnels ».

  1. Créez un projet. Remplacez PROJECT_NAME par le nom que vous souhaitez donner au projet.

    dotnet new console --name PROJECT_NAME
    
  2. Empaquetez le projet.

    dotnet pack --configuration Release
    
  3. Publiez le package en utilisant votre personal access token comme clé API. Remplacez PROJECT_NAME par le nom du projet, 1.0.0 par le numéro de version du package et YOUR_GITHUB_PAT par votre personal access token.

    dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg"  --api-key YOUR_GITHUB_PAT --source "github"
    

Après avoir publié un package, vous pouvez l’afficher sur GitHub. Pour plus d’informations, consultez « Affichage de packages ».

Publication d’un package à l’aide d’un fichier nuget.config

Lors de la publication, si vous liez votre package à un dépôt, le OWNER du dépôt spécifié dans votre fichier .csproj doit correspondre au NAMESPACE que vous utilisez dans votre fichier d’authentification nuget.config. Spécifiez ou incrémentez le numéro de version dans votre fichier .csproj, puis utilisez la commande dotnet pack pour créer un fichier .nuspec pour cette version. Pour plus d’informations sur la création de votre package, consultez « Créer et publier un package » dans la documentation Microsoft.

Remarque : Si vous publiez un package lié à un dépôt, le package hérite automatiquement des autorisations d’accès du dépôt lié, tandis que les workflows GitHub Actions du dépôt lié accèdent automatiquement au package, sauf si votre organisation a désactivé l’héritage automatique des autorisations d’accès. Pour plus d’informations, consultez « Configuration du contrôle d’accès et de la visibilité d’un package ».

  1. Authentifiez-vous sur GitHub Packages. Pour plus d’informations, consultez « Authentification auprès de GitHub Packages ».

  2. Créez un projet. Remplacez PROJECT_NAME par le nom que vous souhaitez donner au projet.

    dotnet new console --name PROJECT_NAME
    
  3. Ajoutez les informations spécifiques de votre projet au fichier de votre projet, qui se termine par .csproj. Veillez à remplacer :

    • 1.0.0 par le numéro de version du package.
    • OWNER par le nom du compte personnel ou de l’organisation propriétaire du dépôt auquel vous souhaitez lier votre package.
    • REPOSITORY par le nom du dépôt auquel vous souhaitez connecter votre package.
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>PROJECT_NAME</PackageId>
        <Version>1.0.0</Version>
        <Authors>AUTHORS</Authors>
        <Company>COMPANY_NAME</Company>
        <PackageDescription>PACKAGE_DESCRIPTION</PackageDescription>
        <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>
      </PropertyGroup>
    
    </Project>
    
  4. Empaquetez le projet.

    dotnet pack --configuration Release
    
  5. Publiez le package avec la key que vous avez spécifiée dans le fichier nuget.config. Remplacez PROJECT_NAME par le nom du projet et 1.0.0 par le numéro de version du package.

    dotnet nuget push "bin/Release/PROJECT_NAME.1.0.0.nupkg" --source "github"
    

Après avoir publié un package, vous pouvez l’afficher sur GitHub. Pour plus d’informations, consultez « Affichage de packages ».

Publication de plusieurs packages sur le même dépôt

Pour connecter plusieurs packages au même dépôt, utilisez la même URL de dépôt GitHub dans les champs RepositoryURL de tous les fichiers projet .csproj. GitHub correspond au dépôt en fonction de ce champ.

L’exemple suivant publie les projets MY_APP et MY_OTHER_APP dans le même dépôt :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>MY_APP</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds a singing Octocat!</PackageDescription>
    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>
  </PropertyGroup>

</Project>
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
    <PackageId>MY_OTHER_APP</PackageId>
    <Version>1.0.0</Version>
    <Authors>Octocat</Authors>
    <Company>GitHub</Company>
    <PackageDescription>This package adds a dancing Octocat!</PackageDescription>
    <RepositoryUrl>https://github.com/my-org/my-repo</RepositoryUrl>
  </PropertyGroup>

</Project>

Installation d’un package

L’utilisation de packages à partir de GitHub dans votre projet est similaire à l’utilisation de packages à partir de nuget.org. Ajoutez vos dépendances de package à votre fichier .csproj, en spécifiant le nom et la version du package. Pour plus d’informations sur l’utilisation d’un fichier .csproj dans votre projet, consultez « Utilisation des packages NuGet » dans la documentation Microsoft.

  1. Authentifiez-vous sur GitHub Packages. Pour plus d’informations, consultez « Authentification auprès de GitHub Packages ».

  2. Pour utiliser un package, ajoutez ItemGroup et configurez le champ PackageReference dans le fichier projet .csproj. Remplacez la valeur PACKAGE_NAME dans Include="PACKAGE_NAME" par votre dépendance de package et remplacez la valeur X.X.X dans Version="X.X.X" par la version du package que vous voulez utiliser :

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <PackageId>My-app</PackageId>
        <Version>1.0.0</Version>
       <Authors>Octocat</Authors>
        <Company>GitHub</Company>
       <PackageDescription>This package adds an Octocat!</PackageDescription>
        <RepositoryUrl>https://github.com/OWNER/REPOSITORY</RepositoryUrl>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="PACKAGE_NAME" Version="X.X.X" />
      </ItemGroup>
    
    </Project>
    
  3. Installez les packages avec la commande restore.

    dotnet restore
    

Dépannage

Si vous utilisez un GITHUB_TOKEN pour vous authentifier auprès d’un registre GitHub Packages au sein d’un flux de travail GitHub Actions, le jeton ne peut pas accéder aux packages basés sur un référentiel privé dans un référentiel autre que celui dans lequel le flux de travail s’exécute. Pour accéder aux packages associés à d’autres dépôts, générez plutôt un personal access token (classic) avec l’étendue read:packages et transmettez ce jeton en tant que secret.

Pour aller plus loin