GitHub Actions Geliştirme
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ığı JSON
texti parse edip içerisinde belirtilen dosayaları açmakta ve key
değ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.yml
veyasaction.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.