ASP.NET Core 3.1 - PKCE Component - NuGet Publish

Dando continuidade ao post ASP.NET Core 3.1 - PKCE Component, para não ficar tão extenso, neste vou explicar como fiz para publicar o componente no NuGet de forma automática (DevOps) usando as Actions do GitHub.

Publish NuGet Package Steps

Deixei por último a parte mais interessante, que é como preparar todo o seu ambiente para publicar automaticamente um pacote no NuGet usando as Actions (DevOps) do GitHub - it's free!

Step 1

Utilizei a documentação da Microsoft, no tópico Criar chaves de API para criar uma chave que permite que outro sistema possa publicar no NuGet atrelado ao meu usuário, então você vai precisar ter uma conta no NuGet. Eu preferi utilizar minha conta vinculada à Microsoft.

NuGet API Key

PS: Depois de criar a chave, fique atento à mensagem que avisa que você vai ter somente uma oportunidade de copiar a sua chave gerada, depois ela será omitida, se você perder este detalhe, vai ter que apagar e fazer novamente ou regerar a chave.

Step 2

No GitHub, nas configurações (settings) de chave (secret) do repositório, basta adicionar uma nova chave, dê um nome, no meu caso o nome é NUGET_API_KEY e especifique a chave que você copiou do NuGet.

GitHub Set Repo Setting NuGet Secret Key

Step 3

Vou configurar uma Action no GitHub para o repositório do componente que criei. Na imagem anterior você vai ver um menu chamado Actions, clique nele e em seguida no botão New workflow.

Encontre a opção de workflow conforme a imagem a seguir e clique em Set up this workflow.

GitHub Action ASPNET Core

Uma pasta com arquivos será criada no seu repositório, depois basta dar um pull para ter acesso localmente.

Eu criei o arquivo com o nome dotnet-core.yml e com o conteúdo a seguir.

O que é importante destacar sobre o arquivo acima:

  • on > release > types:[published]: o disparo do workflow de publicação ocorrerá quando uma nova release para o repositório for criado.

  • dotnet pack - /p:Version=${{ github.event.release.tagname }}: através do parâmetro *Version* é que a versão do pacote será gerado e servirá como referência na publicação e visualização no NuGet. A propriedade *tagname* é o campo tag version na criação da release conforme exibido na sequência de imagens a seguir que mostram a criação de uma nova release e sua respectiva versão.

GitHub Repository Releases

GitHub Repository New Release

  • working-directory: ./src/Extensions: durante o disparo do workflow eu estava tendo alguns erros, pois o dotnet pack não estava encontrando o csproj ou a solution para gerar o pacote, então tive que especificar qual o diretório/pasta onde o arquivo da solution estava.

  • run: dotnet nuget push */.nupkg --api-key ${{ secrets.NUGETAPIKEY }} --source https://api.nuget.org/v3/index.json --no-symbols true: por último, aqui eu utilizei a chave do NuGet que foi inserida como uma configuração secrets para o repositório com o nome NUGET_API_KEY.

Step 4

Por último, eu fiz as configurações do csproj do componente para que algumas informações fossem apresentadas no NuGet, inclusive a imagem do pacote. O arquivo csproj ficou como o apresentado a seguir.

Eu acredito que todas as configurações do csproj estão bem claras, mas gostaria de destacar a questão da imagem, pois deu bastante trabalho para entender o funcionamento, pois uma configuração antiga entrou em deprecated recentemente e não pôde mais ser utilizada, então:

  • Criei a pasta Images e coloquei a imagem icon.png lá dentro e added an existing item no projeto.

  • <PackageIcon>icon.png</PackageIcon> especifiquei o nome da imagem

Step 5

Criei a versão de release e salvei, automaticamente o pipeline executou e realizou a publicação no NuGet usando a chave que foi configurada. O resultado de todos os campos configurados eu destaquei na imagem a seguir para que você possa relacionar os pontos.

NuGet Package Published