Articoli

Gestire pacchetti NuGet in GitHub Organization

da

Quando si utilizza Blazor in diversi progetti può essere molto utile creare una libreria di componenti condivisa da poter riutilizzare. Per farlo è possibile creare un pacchetto NuGet e renderlo disponibile in un feed privato o pubblico. Github Organization ci permette di avere e gestire il pacchetto Nuget della nostra libreria nello stesso repository, far risiedere tutto nello stesso posto rende questa scelta molto ordinata.

Cosa ci serve.

Per il nostro scopo dobbiamo ovviamente avere una organization. Se non l’avete non è un problema, ne potrete creare una con pochi click e gratuitamente, andando su questo link https://github.com/pricing. Ovviamente il piano gratuito ha delle limitazioni, ma per i nostri scopi va più che bene.

Dopo aver creato l’account, ci servirà un token per poter fare la push dei package che creeremo:

  1. Da Github, cliccate sul vostro avatar (icona in alto a destra)
  2. Selezionate “settings”
  3. Cliccate su “Developer settings” (è l’ultima voce nel menu)
  4. Selezionate “Personal access tokens”
  5. Qui potete gestire i vostri token. A noi interessa crearne uno nuovo per pubblicare i packages. Per farlo cliccate sul pulsante “Generate new token”
    a. Scrivete a cosa vi serve nelle Note (sono obbligatorie)
    b. Scegliete la scadenza del token (un mese, una settimana, un anno, o altro)
    c. Attivate “write:packages” e automaticamente si attiveranno read: packages e tutti i repo
    d. Attivate “delete:packages”
    e. E infine cliccate su “Generate token”

Copiate subito il token e salvatelo da qualche parte, perché in seguito ci servirà e non potrete più visualizzarlo (per ovvie ragioni di sicurezza)

Un esempio pratico

Per questo articolo ho creato nella mia organization “danysoft69”, una libreria di esempio che ho nominato “TestGitPackLib”. Questo è il link del repository su github https://github.com/danysoft69/TestGitPackLib

Come vedete, al momento non ci sono pacchetti.

Configurare la Libreria

Per prima cosa dobbiamo aggiungere nel file csproj della nostra libreria il Repository URL con il link del repository. Più precisamente nelle “PropertyGroup”. Nel nostro caso: https://github.com/danysoft69/TestGitPackLib.

<RepositoryUrl> https://github.com/danysoft69/TestGitPackLib </RepositoryUrl>

Fatto questo possiamo già pubblicare la nostra libreria. Ovviamente non prima di aver deciso come gestire il versioning da utilizzare. Per farvi una idea approfondita di quale strategia di versioning si adatti meglio al vostro contesto vi consiglio questo link: https://docs.microsoft.com/it-it/nuget/concepts/package-versioning.

A titolo di esempio, possiamo assegnare la versione nelle “PropertyGroup” del file csproj della nostra libreria.

<Version>1.0.1</Version>

Oppure indicarla quando si fa il pack

dotnet pack -c Release /p:Version=1.0.1

Ecco un esempio di file csproj:

Push del pacchetto Nuget

Una volta creato il pacchetto abbiamo due modi per fare la push. Il primo non richiede alcuna configurazione, ma bisogna sempre specificare il token e l’indirizzo. Nel secondo va configurato il file “%AppData%\NuGet\NuGet.Config” per poter semplificare l’invio e per poi poter scaricare il pacchetto da VisualStudio.

Invio diretto senza configurazioni:

dotnet nuget push "mypackage-name.1.0.1.nupkg" --api-key myToken -s https://nuget.pkg.github.com/myOrganization/index.json

Invio con il file NuGet.Config correttamente configurato

dotnet nuget push " mypackage-name.1.0.1.nupkg"  --source "myhub"

Esempi Reali

dotnet nuget push "TestGitPackLib\bin\Release\TestGitPackLib.1.0.1.nupkg" --api-key ghp_dfhskjhfdfdsfsdfsdf -s https://nuget.pkg.github.com/danysoft69/index.json
Oppure
dotnet nuget push "TestGitPackLib\bin\Release\TestGitPackLib.1.0.1.nupkg"  --source "danyhub"

Configurazione del file NuGet.Config

Per configurare il file “%AppData%\NuGet\NuGet.Config” possiamo utilizzare la riga di comando oppure editarlo manualmente. Vediamo entrambi i modi:

Tramite comando:

dotnet nuget add source --username myuserName --password myToken  --store-password-in-clear-text --name myhub https://nuget.pkg.github.com/myOrganization/index.json

Se invece andiamo ad editare il file di configurazione, dobbiamo inserire nel tag packageSources una key con il nostro repository e in packageSourceCredentials le nostre credenziali di autenticazione. Queste ultime saranno lo Username e il Token che abbiamo generato prima in GitHub. Qui di seguito riporto un esempio:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="danyhub" value="https://nuget.pkg.github.com/danysoft69/index.json" />
  </packageSources>
    <packageSourceCredentials>
        <danyhub>
            <add key="Username" value="MyUsername" />
            <add key="ClearTextPassword" value="MyToken" />
        </danyhub>
    </packageSourceCredentials>  
</configuration>

Risultato su GitHub

Se avete svolto tutti i passaggi correttamente, nel repository della libreria vedrete la presenza del vostro Package:

Cliccando sul nome del Package possiamo accedere alle informazioni/gestione del pacchetto

Qui possiamo vedere quante volte è stato scaricato, possiamo eliminarlo oppure eliminare solo alcune versioni ecc.

Installare il pacchetto su VisualStudio

Se abbiamo eseguito la configurazione del file NuGet.Config, da VisualStudio possiamo accedere al nostro nuovo repository e scaricare la nostra libreria:

Se la installiamo, ogni volta che aggiorniamo il pacchetto con una nuova versione, vedremo la classica notifica nei pacchetti Nuget:

Conclusioni

Spero che questo articolo, nella sua semplicità, vi sia utile per muovere i primi passi nella creazione e condivisione di un pacchetto NuGet con GitHub. Il passo successivo è ovviamente quello di automatizzare la creazione del pacchetto con delle GitHub Action, ma sicuramente capire come farlo manualmente è utile a fissare i concetti.

Alla prossima.

Scritto da: