GitHub Actions Geliştirme

Barış Can Yılmaz
Bursa I/O
Published in
3 min readMar 4, 2022

Bu yazıda oldukça kullanışlı olan GitHub Actionları nasıl kendimiz geliştirebileceğimizi anlatacağım.

Motivasyon

Geliştireceğimiz action GitHub’da secret olarak tuttuğunuz verileri projenizdeki dosyalarınıza ekleyebilmenizi sağlayacak. Kısaca api key, parola vb. hassas, herkesin görmemesi gereken bilgileri projenizi derlenmeden önce kod dosyanıza yerleştirmenize yardımcı olacak. Bunun için dosyalarımızda belirttiğimiz key değerini secretta tuttuğumuz değer ile değiştireceğiz.

Action Türleri

Yukarıda da görebileceğiniz gibi üç çeşit Actionımız var.

Docker Container Action

Docker containerları environment ile GitHub Action codunu birlikte paketlediği için daha istikrarlı ve güvenilir bir sonuç ortaya çıkarmaktadır çünkü actionı kullanan kişi kullanılan araçları veya bağımlılıkları düşünmek zorunda kalmaz. Containerların getirme ve oluşturma gecikmesinden dolayı Docker container actionları JavaScript actionlarından daha yavaştır ve sadece Linux runnerları üzerinde çalışmaktadırlar.

JavaScript Action

JavaScript actionları doğrudan runner üzerinde çalışmaktadır ve action kodu, kodun çalıştığı ortamdan ayrıdır. JavaScript actionının kullanmak, action kodunu basitleştirmekte ve docker containerlarından daha hızlı çalıştırmaktadır. JavaScript actionınızın GitHub’da host edilen runnerlar(Windows,Ubuntu,macOS) ile uyumlu olabilmesi için saf JavaScript kodu olmalıdır.

Composite Action

Composite action ile çok adımlı workflowlarınızı tek bir actionda birleştirebilir ve bu actionı tek adım olarak çalıştırabilirsiniz.

Geliştirme

Projemi Go (tamamen opsiyonel) dili ile geliştirdiğim için bundan sonraki süreci Docker Container Actionları ile devam edeceğim.

Dockerfile

İlk olarak aşağıdaki gibi bir Dockerfile oluşturuyorum.

Action Metadata File

Actionımızı tanımlamak için projemizin root klasöründe action.yml dosyası oluşturuyoruz.

Burada name ,description ,author ile actionın ad, açıklama ve yazar bilgilerini belirtiyoruz. inputs kısmında ise actionımız çağırıldığında alacağı parametreyi ve zorunlu olup olmadığını belirtiyoruz. Açıklama kısmında ise parametrenin nasıl olması gerektiğini belirtiyoruz. Bu örnekte kullanıcıdan dosya ismi ve o dosyada değiştirilecek olan key-value değerlerini JSON formatında alacağımızı belirtiyoruz.

runs kısmında, Docker kullanarak çalıştırdığımız için using değerini Docker ve image değerini Dockerfile olarak belirtiyoruz. Action çağırılırken aldığımız parametreleri kodumuza gönderilmesi için args kısmında bu değerleri belirtiyoruz.

branding kısmında yayınladığımız actionın simgesini ve rengini belirliyoruz.

Action Kodu

Action çağırıldığında çalışacak olan kaynak kodumuz, parametre olarak aldığı JSONtexti parse edip içerisinde belirtilen dosayaları açmakta ve keydeğerlerini value ile değiştirmekte.

GitHub Marketplace’te Yayınlama

Geliştirdiğiniz actionı yayınlamak için uymamız gereken bazı kurallar var.

  • Actionın bulunduğu repository public olmalı.
  • Her repository sadece bir action içermeli.
  • Action’ın metadata dosyasyı (action.ymlveya saction.yaml) repositorynin root klasöründ olmalı.
  • Action’ın metadatasındaki isim eşsiz olmalı

Bu kurallara uygun olarak actionımızı hazırladıysak paylaşabiliriz. Tek yapmamız gereken proje için release oluşturmak ve GitHub’a göndermek.

Paylaştığımız Actionı Kullanma

Geliştirdiğim actionı Telegram botu projemde kullanmıştım. Projenin bulunduğu repositoryde .github/workflows altında bir yml dosyası oluşturarak aşağıdaki gibi ilgili actionı çağırıyoruz.

uses kısmında ilgili actionın bulunduğu adresi ve versiyonunu belirterek actionı çağırıyoruz. with kısmında gerekli parametre olan secrets değerini veriyoruz. Actionımız çalıştığına appsettings.json dosyasında BotToken ,HostAddress ve Uri değerlerini GitHub secretsta bulundan değerler ile değiştirecek.

Kaynak:

LinkedIn|GitHub|Twitter|Medium|BursaIO|Hashnode|Superpeer

--

--