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!

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.

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.

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.

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.

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.
  • 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.

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

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.

Originally published at http://alextochetto.com on November 12, 2020.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store