İçeriğe geç

Github Actions ile .NET Nuget Package Oluşturup Github Nuget Registry (Github Packages) Üzerinde Yayınlamak [WIP]

  • Özet
  • Github Actions Nedir?
  • Github Package Registry Nedir?
  • .NET *.csproj Nuget Package Bilgileri
  • İlk Github Action’ımız
  • Github Actions ile Farklı Bir Şeyler Deneyelim
  • Sonuç

Özet

Github repository’inizde nuget package’a dönüştürüp yayınlamak istediğiniz bir library olduğunu düşünün. Bu işlemin github’ın sunduğu actions ve nuget registry feature’larını kullanarak nasıl yapılacağından bahsedeceğiz.

Yazı içerisinde bahsedilen konunun github üzerindeki repository’si https://github.com/berkayakcay/NugetWithGithubActions

Github Actions Nedir?

Github Actions kendi ihtiyaçlarınıza göre tanımladığınız software development workflow’unuz doğruştusunda bir çok farklı işlemi yapmanızı sağlayan bir araç. Bu araç ile tamamıyla kendinize özel tasarlanmış workflowlar oluşturabilirsiniz.
Örneğin bir issue üzerine yorum yazıldığında veya bir pull request oluşturulduğunda bu eventlara özel tanımlamalar yaparak workflow’unuzu oluşturabilirsiniz.

Neler yapılabileceğiniz ile ilgili özet bilgiyi içerek aşağıdaki kısa videoyu izlemenizi tavsiye ederim. Daha detaylı incelemek için dokümantasyon sayfasına gidebilirsiniz. https://docs.github.com/en/actions

Github Package Registry Nedir?

Open Source veya private bir repository’e sahip olun ve oluşturduğunuz uygulama paketlerinin dağıtımı için kodunuzun yanıbaşında bir package registry’e sahip olmak bence paha biçilemez. CI/CD pipeline’larınızıda birden çok public/private registry ve bununla birlikte credentials ile uğraşmamanıza gerek kalmadan hayatınıza devam edebiliyorsunuz.
https://github.com/features/packages

.NET *.csproj Nuget Package Bilgileri

Muhtemelen daha önce Nuget Package oluşturmuşsunuzdur ve bunun birden fazla yöntemi olduğunu biliyorsunuzdur. Github Action kısmına geçmeden örnek bir proje oluşturup “dotnet cli” yardımı ile nasıl nuget package oluşturabileceğini kısaca anlatacağız.

Öncelikle nuget package bilgilerinin besleneceği propery’leri *.csproj içerisine ekleyelim.

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

    <PropertyGroup>
        <TargetFramework>netstandard2.1</TargetFramework>
        <Authors>Berkay Akçay</Authors>
        <Product>Example Foo Library</Product>
        <PackageProjectUrl>https://github.com/berkayakcay/NugetWithGithubActions</PackageProjectUrl>
        <PackageIconUrl />
        <RepositoryUrl>https://github.com/berkayakcay/NugetWithGithubActions</RepositoryUrl>
        <RepositoryType>git</RepositoryType>
        <IncludeSymbols>true</IncludeSymbols>
        <SymbolPackageFormat>snupkg</SymbolPackageFormat>
        <Version>1.0.1</Version>
        <PackageTags>Example;Nuget With Github Actions;Nuget;Github Actions</PackageTags>
        <Description>
            This is example project that pack and publish a nuget packages when new release published
        </Description>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="AWSSDK.SimpleSystemsManagement" Version="3.7.7.8" />
        <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    </ItemGroup>
    
</Project>

Aşağıdaki dotnet pack komutu ile local’inizde nuget package’ların doğru şekilde oluştunu görelim. Bu komutu github actions içerisinde de kullanacağız.

dotnet pack -c Release -o packages

İlk Github Action’ımız

Github action oluşturmak için proje repository’sine giderek yukarıdaki sekmelerden Actions‘a ardından açılan sayfada New Workflow‘a tıklamanız gerekmektedir.

Bir sonraki sayfada sizi workflow template seçimi beklemekte. Bu aşamada mevcut template’leri kullanarak hazır workflow’ları projenize hızlıca entegre edebilirsiniz.

Biz bu aşamada boş bir template ile devam edeceğiz. Görsel üzerinde işaretli yerde bulunan set up a workflow yourself link’ine tıklayalım.

Yeni bir github action oluşturduğumuzda sizi karşılayacak ekran aşağıdaki gibidir.
Github action oluşturduğunuzda repositoryname/.github/workflow/filename.yml şeklinde özel bir path içerisinde yer alacaktır.
Örnek; https://github.com/berkayakcay/NugetWithGithubActions/tree/main/.github/workflows

Sağ tarafta marketplace içerisinde arama yapabileceğiniz bir alan ve sol tarafta github actions dosyasının içeriği bulunmaktadır.

Github actions marketplace link’i https://github.com/marketplace?type=actions

Yukarıda proje özelinde hızlıca bir github action yaratmış olduk bir sonraki aşamada bu github action’ın içerisinde nuget package oluşturup github nuget regitry üzerine push’layan komutları ekleyeceğiz.

Daha ayrıntılı incelemek için Github Actions Quick Start link’inden devam edebilirsiniz. https://docs.github.com/en/actions/quickstart

Nuget paketleri oluşturup bu oluşan paketleri github nuget registry (Github Packages) üzerine push’layen github actions yml dosyası aşağıdaki gibidir.

Aşamaları kısaca özetlemek gerekir ise name ile isim verdiğiniz github actions’ın çalışmsı için on kısmında github’ın bizlere sunduğu event’ları yakalayarak tetikleneceği aşamayı belirtiyoruz.
jobs aşamasında sıralı veya paralel olarak çalışması gereken workflow’un iş parçalarını tanımlıyoruz. steps içerisinde job içerisindeki sırası ile yapılacak görevleri tanımlıyoruz.

Github Actions için bir isim belirtiyoruz. Ne zaman tetiklenmesi gerektiğini belirliyoruz.
main branch’i için push/pull request geldiğinde tetiklenmesi için tanımlama yaptık. build job’ının çalışacağını ortamı ubuntu olarak tanımladık. steps içerisinde action olarak setup-dotnet action’ını kullanıp çalıştırılan görev içerisinde dotnet clı’ı kullanabilir hale getirdik.
with ile setup-dotnet action’ı için parametrelerimizi geçtik. Github actions içerisinden github packages’a erişim sağlayabilmek için actions’lar içerisine otomatik olarak geçilen GITHUB_TOKEN‘ı environment variable olarak NUGET_AUTH_TOKEN‘a geçtik. Daha sonraki aşamalarda sırasıyla restore > build > nuget pack > nuget push komutlarını çalıştırdık.

name: Nuget package publish when new release published for .NET

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main


jobs:
  build:
  
    runs-on: ubuntu-latest
    
    steps:
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 5.0.x
        source-url: https://nuget.pkg.github.com/${{github.repository_owner}}/index.json
      env:
          NUGET_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}       
    - name: dotnet restore
      run: dotnet restore
    - name: dotnet build
      run: dotnet build -c Release --no-restore
    - name: dotnet pack
      run: dotnet pack -c Release -o packages
    - name: dotnet nuget push
      run: dotnet nuget push ./packages/*.nupkg --skip-duplicate

Github Action’ımızı oluşturduk ve kaydettik. Belirlediğimiz ayarlara göre herhangi bir değişiklik yapıp main branch’ine commit ettiğimiz zaman hazırladığımız github actions’ın çalışmasını bekliyoruz.

Github Actions’ın başarılı veya başarısız olduğunu Actions sekmesinden görebilirsiniz. Aktif olarak çalışan veya tamamlanmış github actions içerisinde çalışan işlerin ve onlara ait aşamaların detaylarını görebiliriz.

Eğer her şey yolunda gittiyse repository sayfanızın sağ tarafında oluşmuş Packages bilgilerini görüyor olmalısınız.

Github Actions ile Farklı Bir Şeyler Deneyelim

WIP

Kategori:General

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir