{"id":2946,"date":"2024-08-01T19:16:07","date_gmt":"2024-08-01T19:16:07","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=2946"},"modified":"2024-08-01T19:16:07","modified_gmt":"2024-08-01T19:16:07","slug":"uengine4-github-actions","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/","title":{"rendered":"uEngine4 &#8211; GitHub Actions"},"content":{"rendered":"<p>Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m son g\u00fcncellemem ile birlikte, uEngine4 motorumuz da art\u0131k Github Actions marifeti ile CI\/CD \u00fczerinden otomatik olarak olu\u015fturulabilmekte. Bir ka\u00e7 yaz\u0131 \u00f6ncesinde, Github Actions&#8217;I kendi uygulamalar\u0131n\u0131zda da kullanabilmeniz i\u00e7in \u00f6rnek betikleri \u015fablon projeme eklemi\u015ftim. A\u015fa\u011f\u0131da ilgili repoya ve yaz\u0131ma ula\u015fabilirsiniz:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2024\/07\/05\/uengine-4-son-guncellemeler-ii\/\">uEngine 4 Son G\u00fcncellemeler &#8211; II<\/a><\/strong><\/span><\/p>\n<p>uEngine4&#8217;e de bu yetene\u011fi kazand\u0131rm\u0131\u015f bulunuyorum. Daha \u00f6nce Azure Devops, gitlab, jenkins ve appvayeour&#8217;dan birini kulland\u0131ysan\u0131z, Github Actions da asl\u0131nda bunlardan \u00e7ok farkl\u0131 de\u011fil. En \u00f6nemli \u00f6zelli\u011fi ise, Github ile sunuluyor olmas\u0131 (asl\u0131nda bir benzeri gitlab repolar\u0131 i\u00e7in de uzun bir s\u00fcredir sunulmaktayd\u0131).<\/p>\n<p>Peki, GitHub Actions ile sa\u011flanan CI\/CD de ne diyor olabilirsiniz. Asl\u0131nda temelde, S\u00fcrekli Entegrasyon (CI), kodunuzda yapm\u0131\u015f oldu\u011funuz de\u011fi\u015fiklikler sonras\u0131nda yaz\u0131l\u0131m bile\u015fenleriniz\/uygulaman\u0131n halen derlenebilir\/kullan\u0131labilir durumda oldu\u011funu g\u00f6steren, e\u011fer bir s\u0131k\u0131nt\u0131 var ise de h\u0131zl\u0131ca bunu ortaya koymak i\u00e7in kullan\u0131lan y\u00f6ntemdir. S\u00fcrekli Teslimat (CD) ise, s\u00fcrekli entegrasyon ad\u0131mlar\u0131 sonras\u0131nda olu\u015fturulmu\u015f olan yaz\u0131l\u0131m\u0131 ya da yaz\u0131l\u0131m par\u00e7as\u0131n\u0131, hedef ortama otomatik olarak konu\u015fland\u0131rmaya denilmektedir. Sizlerin de tahmin edece\u011fi \u00fczere, \u00f6zellikle bu g\u00fcncel web ve mobil yaz\u0131l\u0131mlar i\u00e7in g\u00f6m\u00fcl\u00fc yaz\u0131l\u0131mlara g\u00f6re daha s\u0131k olmaktad\u0131r ama C++ uygulamalar\u0131 i\u00e7in de \u00e7ok g\u00fczel \u00f6rnekler bulunmakta deyip hemen sizler konun detaylar\u0131n\u0131 aktard\u0131\u011f\u0131m yaz\u0131ma bakmaya davet ediyorum, keza bundan sonra azc\u0131k GitHub Actions&#8217;a bak\u0131yor olaca\u011f\u0131z.<\/p>\n<p><a href=\"https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/25\/uygulama-izleme-yazilimi-serisi-3-birim-test\/\"><span style=\"color: #008000;\"><strong>https:\/\/www.yazilimperver.com\/index.php\/2021\/01\/25\/uygulama-izleme-yazilimi-serisi-3-birim-test\/<\/strong><\/span><\/a><\/p>\n<p>Gelelim yaz\u0131m\u0131z\u0131n as\u0131l konu\u011funa, Github Actions&#8217;a. Peki nedir GitHub Actions? GitHub Actions, github \u00fczerinde konu\u015fland\u0131rm\u0131\u015f oldu\u011funuz yaz\u0131l\u0131mlar\u0131n\u0131za ili\u015fkin otomatik i\u015f ak\u0131\u015flar\u0131 olu\u015fturman\u0131za, bu vesile derleme, test ve konu\u015fland\u0131rman\u0131za yard\u0131mc\u0131 olan bir altyap\u0131d\u0131r. Yukar\u0131da da bahsetti\u011fim gibi, asl\u0131nda github repolar\u0131n\u0131zda bulunan projelerinize kolay bir \u015fekilde CI\/CD alt yap\u0131s\u0131 kazand\u0131racak bir hizmettir.<\/p>\n<h2 id=\"PPxxmxZ\"><span style=\"color: #0000ff;\"><strong>Temel Kavramlar<\/strong><\/span><\/h2>\n<p>Girizgahtan sonra \u015fimdi temel kavramlara bakmaya ba\u015flayal\u0131m. Bu arada daha detaylar\u0131 ve referans ald\u0131\u011f\u0131m kaynaklar\u0131 yaz\u0131m\u0131n sonunda her zaman oldu\u011fu gibi payla\u015faca\u011f\u0131m. Temel kavramlara, GitHub Action&#8217;\u0131n temel bile\u015fenlerine y\u00f6nelik a\u015fa\u011f\u0131daki gibi bir grafik buldum. Grafikte her bir kavram, k\u0131saca ilgili a\u015famaya g\u00f6re anlat\u0131lm\u0131\u015f.<\/p>\n<p id=\"UaKbrmb\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2949 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057.png\" alt=\"\" width=\"969\" height=\"545\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057.png 2048w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-300x169.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-1024x576.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-768x432.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-1536x864.png 1536w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-500x281.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-150x84.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-1200x675.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-400x225.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-800x450.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057-200x113.png 200w\" sizes=\"auto, (max-width: 969px) 100vw, 969px\" \/><\/p>\n<h3><strong><span style=\"color: #0000ff;\">\u0130\u015f Ak\u0131\u015flar\u0131 (Workflows)<\/span><\/strong><\/h3>\n<p>\u0130lk kavram\u0131m\u0131z, \u0130\u015f Ak\u0131\u015flar\u0131. \u0130\u015f ak\u0131\u015flar\u0131, belirli olaylar ger\u00e7ekle\u015fti\u011finde otomatik olarak \u00e7al\u0131\u015fan bir ya da daha fazla i\u015ften olu\u015fur. \u00d6rne\u011fin, kod devredildi\u011finde (checkin), kod derlenir ve testler ko\u015fturulur. \u0130\u015f ak\u0131\u015flar\u0131 ve di\u011fer bile\u015fenler YAML dosyas\u0131 ile tan\u0131mlan\u0131r. Bu i\u015f ak\u0131\u015f\u0131, bir olay ile (event) ile tetiklenerek, tan\u0131mlanan i\u015fleri yapmaya ba\u015flar. Bir olay yan\u0131nda el ile ya da tan\u0131mlanm\u0131\u015f zamanlarda da \u00e7al\u0131\u015ft\u0131r\u0131labilir.<br \/>\nGitHub Actions i\u00e7in en \u00fcst seviye tan\u0131mlamalar, \u0130\u015f Ak\u0131\u015flar\u0131 vesilesi ile .github\/workflows dizini i\u00e7erisinde tan\u0131mlan\u0131r. Bir GitHub reposunda birden fazla i\u015f ak\u0131\u015f\u0131 olabilir. Bunlar\u0131n her bir farkl\u0131 i\u015fleri i\u00e7eriyor (yaz\u0131l\u0131m olu\u015fturma, test ko\u015fumu, konu\u015fland\u0131rma, vb.) ve farkl\u0131 olaylar ile tetikleniyor olabilir. Bunun ile birlikte i\u015f ak\u0131\u015flar\u0131n\u0131 tekrar ve bir di\u011ferinin i\u00e7erisinde kullanabilirsiniz, bu tarz detaylar\u0131 i\u00e7in <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions\"><span style=\"color: #008000;\"><strong>https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions<\/strong><\/span><\/a> sayfas\u0131na g\u00f6z atabilirsiniz.<\/p>\n<h3><span style=\"color: #0000ff;\"><strong>Olaylar (Events)<\/strong><\/span><\/h3>\n<p>\u0130\u015f ak\u0131\u015flar\u0131n\u0131n i\u015fleme ba\u015flamas\u0131 i\u00e7in kullan\u0131lan \u015feylere de olay\/i\u015f ak\u0131\u015f\u0131 tetikleyicisi denir. Bunlar ger\u00e7ekle\u015fti\u011finde ilgili i\u015f ak\u0131\u015flar\u0131 ger\u00e7ekle\u015ftirilmeye ba\u015flar. Peki bunlar ne olabilir?<br \/>\n\u2022 Manuel tetik,<br \/>\n\u2022 Zamanlanm\u0131\u015f olaylar,<br \/>\n\u2022 Github reposuna dair olaylar (commit, add, pull request, vb) gibi.<\/p>\n<p>Bunlar\u0131n detaylar\u0131 ve di\u011fer tetikler i\u00e7in <strong><span style=\"color: #008000;\">https:\/\/docs.github.com\/en\/actions\/using-workflows\/events-that-trigger-workflows<\/span><\/strong> sayfas\u0131na g\u00f6z atabilirsiniz. Olduk\u00e7a farkl\u0131 ve \u00e7e\u015fitli tetik mekanizmalar\u0131 sunulmakta.<\/p>\n<h3><strong><span style=\"color: #0000ff;\">\u0130\u015fler (Jobs)<\/span><\/strong><\/h3>\n<p>\u0130\u015f ak\u0131\u015flar\u0131 ve bunlar\u0131 tetikleyen olaylara bakt\u0131ktan sonra, i\u015f ak\u0131\u015flar\u0131 kapsam\u0131nda yap\u0131lacak i\u015flere g\u00f6z atal\u0131m. Bir \u0130\u015f (Job), ayn\u0131 \u00c7al\u0131\u015ft\u0131r\u0131c\u0131da (runner) y\u00fcr\u00fct\u00fclen bir i\u015f ak\u0131\u015f\u0131ndaki bir ya da daha fazla Ad\u0131mdan (step) olu\u015fan k\u00fcmeye verilen isimdir. Her bir ad\u0131m ya bir shell beti\u011finden ya da bir aksiyondan olu\u015fabilir. Bir i\u015f i\u00e7erisindeki ad\u0131mlar verilen s\u0131rada ve di\u011ferine ba\u011f\u0131ml\u0131 bir \u015fekilde ko\u015fturulur.<br \/>\nHer bir ad\u0131m ayn\u0131 \u00e7al\u0131\u015ft\u0131r\u0131c\u0131da (buna da yak\u0131nda de\u011finece\u011fim) ko\u015ftu\u011fu i\u00e7in veriler bir ad\u0131mdan di\u011ferine payla\u015f\u0131lmaktad\u0131r. \u00d6rne\u011fin bir ad\u0131mda yaz\u0131l\u0131m\u0131 derledikten sonra, di\u011fer ad\u0131mda olu\u015fan \u00e7al\u0131\u015ft\u0131r\u0131labilir dosya ile testleri ko\u015fturabilirsiniz.<br \/>\n\u0130\u015fler birbirinden ba\u011f\u0131ms\u0131z olarak ko\u015fabildikleri gibi bir di\u011ferine ba\u011f\u0131ml\u0131 da olabilirler. Ba\u011f\u0131ms\u0131z i\u015fler ayn\u0131 zamanda paralel de ko\u015fturulabilirler. \u00d6rne\u011fin paketleme i\u00e7in farkl\u0131 i\u015fletim sistemleri \u00fczerinde derleme yapan birden fazla i\u015finiz olabilir, bunlar\u0131n sonu\u00e7lar\u0131n\u0131 bekleyen bir i\u015finiz olabilir ve bu da paketlemeyi yapabilir. \u0130\u015flere y\u00f6nelik detayl\u0131 bilgiler i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/docs.github.com\/en\/actions\/using-jobs\">https:\/\/docs.github.com\/en\/actions\/using-jobs<\/a><\/strong><\/span> sayfas\u0131na g\u00f6z atabilirsiniz.<\/p>\n<p>Bu ba\u015fl\u0131\u011f\u0131 kapatmadan \u00f6nce aksiyonlara ufak bir parantez a\u00e7mak istiyorum. Aksiyonlar, Github Actions i\u00e7in uyarlanabilir uygulamalard\u0131r. Bunlar genel olarak bir \u00e7ok i\u015f i\u00e7in gerek duyulan ortak i\u015flere y\u00f6nelik tan\u0131mlanm\u0131\u015ft\u0131r. Azure Devops&#8217;taki Task&#8217;lara benzer bir i\u015flev g\u00f6r\u00fcrler. Bu sayede, tekrar eden i\u015fler i\u00e7in halihaz\u0131rdaki aksiyonlar\u0131 kullanabilirsiniz. Bu noktada, Github Marketplace&#8217;te bulunan bir \u00e7ok aksiyona g\u00f6z at\u0131labilir ya da kendi aksiyonlar\u0131n\u0131z\u0131 tan\u0131ml\u0131yor olabilirsiniz. Daha detayl\u0131 bilgi i\u00e7in <a href=\"https:\/\/docs.github.com\/en\/actions\/creating-actions\"><span style=\"color: #008000;\"><strong>https:\/\/docs.github.com\/en\/actions\/creating-actions<\/strong><\/span><\/a> adresine g\u00f6z at\u0131labilir.<\/p>\n<h3><span style=\"color: #0000ff;\"><strong>\u00c7al\u0131\u015ft\u0131r\u0131c\u0131 (Runner)<\/strong><\/span><\/h3>\n<p>\u00c7al\u0131\u015ft\u0131r\u0131c\u0131, basit\u00e7e i\u015f ak\u0131\u015flar\u0131n\u0131n ko\u015fturuldu\u011fu ortam olarak d\u00fc\u015f\u00fcnebilirsiniz. Bu ortam tahmin edebilece\u011finiz \u00fczere sanal ya da fiziksel bir bilgisayar olabilmektedir. Azure Devops&#8217;ta agent diye isimlendirilen, gitlab&#8217;ta da yine benzer \u015fekilde \u00e7al\u0131\u015ft\u0131r\u0131c\u0131 (runner olarak ifade edilmektedir).<br \/>\n\u00c7al\u0131\u015ft\u0131r\u0131c\u0131lara, olaylar\u0131\/tetikleyicileri dinlerler ve tetiklendikleri anda ilgili i\u015f ak\u0131\u015flar\u0131n\u0131 ba\u015flat\u0131rlar. \u00c7al\u0131\u015ft\u0131r\u0131c\u0131y\u0131 kullanabilmek i\u00e7in bir yaz\u0131l\u0131m kurman\u0131z yeterlidir.<br \/>\nHer \u00e7al\u0131\u015ft\u0131r\u0131c\u0131 ayn\u0131 anda tek bir i\u015fi (job) yapar. Github&#8217;\u0131n kendi sundu\u011fu \u00e7al\u0131\u015ft\u0131r\u0131c\u0131lar yan\u0131nda sizler de kendi \u00e7al\u0131\u015ft\u0131r\u0131c\u0131lar\u0131n\u0131z\u0131 kullanabilirsiniz. Bunun i\u00e7in <a href=\"https:\/\/docs.github.com\/en\/actions\/hosting-your-own-runners\"><span style=\"color: #008000;\"><strong>https:\/\/docs.github.com\/en\/actions\/hosting-your-own-runners<\/strong><\/span><\/a> sayfas\u0131na g\u00f6z atabilirsiniz.<\/p>\n<p>Evet \u00e7al\u0131\u015ft\u0131r\u0131c\u0131 ile birlikte asl\u0131nda GitHub Actions&#8217;a ili\u015fkin temel kavramlara bakm\u0131\u015f olduk. A\u015fa\u011f\u0131da bu kavramlar\u0131 g\u00f6steren ba\u015fka bir fig\u00fcr g\u00f6rebilirsiniz:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2952 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee.png\" alt=\"\" width=\"474\" height=\"166\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee.png 1536w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-300x105.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-1024x359.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-768x269.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-500x175.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-150x53.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-1200x420.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-400x140.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-800x280.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2e0b756ee-200x70.png 200w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/p>\n<h2><strong><span style=\"color: #0000ff;\">\u00d6rnekler<\/span><\/strong><\/h2>\n<p>\u015eimdi de GitHub Actions&#8217;\u0131n sayfas\u0131ndaki bir dosyay \u00f6nce bakal\u0131m sonra da uEngine i\u00e7in kulland\u0131\u011f\u0131m\u0131za bakal\u0131m.<br \/>\nDaha \u00f6nce de bahsetti\u011fimiz gibi GitHub Actions i\u015f ak\u0131\u015f\u0131n\u0131 tan\u0131mlamak i\u00e7in YAML sentaks\u0131n\u0131 kullanmakta ve bunlar ayr\u0131 dosyalar olarak tutulmaktalar.<br \/>\n\u015eimdi \u00f6rnek bir i\u015f ak\u0131\u015f\u0131 dosyas\u0131na bakaca\u011f\u0131z, detaylar i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions#create-an-example-workflow\">https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions#create-an-example-workflow<\/a><\/strong><\/span> sayfas\u0131na g\u00f6z atabilirsiniz. Referans alaca\u011f\u0131m\u0131z dosya \u015fu \u015fekilde:<\/p>\n<pre class=\"lang:yaml decode:true\">name: learn-github-actions\r\nrun-name: Yaz\u0131l\u0131mperver is learning GitHub Actions\r\non: [push]\r\njobs:\r\n  check-bats-version:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - uses: actions\/checkout@v4\r\n      - uses: actions\/setup-node@v4\r\n        with:\r\n          node-version: '20'\r\n      - run: npm install -g bats\r\n      - run: bats -v<\/pre>\n<p>Bu dosyay\u0131, .github\/workflows\/ alt\u0131na learn-github-actions.yaml olarak ekleyebilirsiniz. \u015eimdi bu ad\u0131mlara, daha detayl\u0131 bakal\u0131m:<\/p>\n<pre class=\"lang:yaml decode:true\"># Opsiyonel- GitHub deposunun \"Eylemler\" sekmesinde g\u00f6r\u00fcnece\u011fi \u015fekilde i\u015f ak\u0131\u015f\u0131n\u0131n ad\u0131. Bu alan vermezseniz, bunun yerine i\u015f ak\u0131\u015f\u0131 dosyas\u0131n\u0131n ad\u0131 kullan\u0131l\u0131r. Verilmesinde fayda var.\r\n<strong>name: learn-github-actions\r\n<\/strong>\r\n# \u0130ste\u011fe ba\u011fl\u0131 - \u0130\u015f ak\u0131\u015f\u0131ndan olu\u015fturulan ve repoda \"Eylemler\" sekmesindeki i\u015f ak\u0131\u015f\u0131 \u00e7al\u0131\u015ft\u0131rmalar\u0131 listesinde g\u00f6r\u00fcnecek i\u015f ak\u0131\u015f\u0131 \u00e7al\u0131\u015ft\u0131rmalar\u0131n\u0131n ad\u0131. Bu \u00f6rnek, i\u015f ak\u0131\u015f\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 tetikleyen akt\u00f6r\u00fcn kullan\u0131c\u0131 ad\u0131n\u0131 g\u00f6r\u00fcnt\u00fclemek i\u00e7in `github` ba\u011flam\u0131yla bir ifade kullan\u0131r. Daha fazla bilgi i\u00e7in bkz. https:\/\/docs.github.com\/en\/actions\/using-workflows\/workflow-syntax-for-github-actions#run-name\r\n<strong>run-name: Yaz\u0131l\u0131mperver GitHub Eylemlerini \u00f6\u011freniyor\r\n<\/strong>\r\n# Bu i\u015f ak\u0131\u015f\u0131 i\u00e7in tetikleyiciyi belirtir. Burada, `push` olay\u0131 ile tetikleniyor, b\u00f6ylece birisi repoya bir de\u011fi\u015fiklik g\u00f6nderdi\u011finde veya bir \u00e7ekme iste\u011fini birle\u015ftirdi\u011finde bir i\u015f ak\u0131\u015f\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131 tetiklenir. Bu, her dala yap\u0131lan bir push'la tetiklenir; yaln\u0131zca belirli dallara, yollara veya etiketlere yap\u0131lan pushlarda \u00e7al\u0131\u015fan \u00f6rnekler i\u00e7in https:\/\/docs.github.com\/en\/actions\/reference\/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore\r\n<strong>on: [push]\r\n<\/strong>\r\n# `learn-github-actions` i\u015f ak\u0131\u015f\u0131nda \u00e7al\u0131\u015fan t\u00fcm i\u015fleri bir araya getirir.\r\n<strong>jobs:\r\n<\/strong>\r\n    # `check-bats-version` adl\u0131 bir i\u015f tan\u0131mlar. Alt anahtarlar i\u015fin \u00f6zelliklerini tan\u0131mlar.\r\n    <strong>check-bats-version:<\/strong>\r\n\r\n        # \u0130\u015fi, Ubuntu Linux \u00e7al\u0131\u015ft\u0131r\u0131c\u0131s\u0131n\u0131n en son s\u00fcr\u00fcm\u00fcnde \u00e7al\u0131\u015facak \u015fekilde ayarlama yap\u0131l\u0131r. Bu, i\u015fin GitHub taraf\u0131ndan bar\u0131nd\u0131r\u0131lan yeni bir sanal makinede y\u00fcr\u00fct\u00fclece\u011fi anlam\u0131na gelir. Di\u011fer \u00e7al\u0131\u015ft\u0131r\u0131c\u0131lar\u0131 kullanan \u00f6rnekler i\u00e7in bkz. https:\/\/docs.github.com\/en\/actions\/writing-workflows\/workflow-syntax-for-github-actions#jobsjob_idruns-on\r\n        <strong>runs-on: ubuntu-latest<\/strong>\r\n\r\n       # `check-bats-version` i\u015finde \u00e7al\u0131\u015fan t\u00fcm ad\u0131mlar\u0131 bir araya getirir. Bu b\u00f6l\u00fcm\u00fcn alt\u0131na yerle\u015ftirilen her \u00f6\u011fe ayr\u0131 bir eylem veya shell beti\u011fidir. \u00a0 \u00a0 \u00a0 \u00a0 \r\n       <strong>steps:<\/strong>\r\n\r\n          # `uses` anahtar s\u00f6zc\u00fc\u011f\u00fc, bu ad\u0131m\u0131n `actions\/checkout` eyleminin `v4` s\u00fcr\u00fcm\u00fcn\u00fc \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131 belirtir. Bu, reponuzu \u00e7al\u0131\u015ft\u0131r\u0131c\u0131ya kontrol eden ve kodunuza kar\u015f\u0131 betikler veya di\u011fer aksiyonlar\u0131 (derleme ve test ara\u00e7lar\u0131 gibi) \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131yan bir aksiyondur. \u0130\u015f ak\u0131\u015f\u0131n\u0131z reponuzdaki kodu kullanmak istedi\u011finiz her durumda \"checkout\" aksiyonunu kullanmal\u0131s\u0131n\u0131z.\r\n          <strong>- uses: actions\/checkout@v4<\/strong>\r\n\r\n          # Bu ad\u0131m, Node.js'nin belirtilen s\u00fcr\u00fcm\u00fcn\u00fc y\u00fcklemek i\u00e7in `actions\/setup-node@v4` aksiyonunu kullan\u0131r. (Bu \u00f6rnek s\u00fcr\u00fcm 20'yi kullan\u0131r.) Bu, hem `node` hem de `npm` komutlar\u0131n\u0131 `PATH`'inize koyar.\r\n          <strong>- uses: actions\/setup-node@v4<\/strong>\r\n            with:\r\n              <strong>node-version: '20'<\/strong>\r\n\r\n          # `run` anahtar s\u00f6zc\u00fc\u011f\u00fc, i\u015fe \u00e7al\u0131\u015ft\u0131r\u0131c\u0131da bir komut y\u00fcr\u00fctmesini s\u00f6yler. Bu durumda, `bats` yaz\u0131l\u0131m test paketini y\u00fcklemek i\u00e7in `npm` kullan\u0131yorsunuz.\r\n          <strong>- run: npm install -g bats<\/strong>\r\n\r\n          # Son olarak, `bats` komutunu yaz\u0131l\u0131m s\u00fcr\u00fcm\u00fcn\u00fc \u00e7\u0131kt\u0131 olarak veren bir parametreyle \u00e7al\u0131\u015ft\u0131racaks\u0131n\u0131z.\r\n          <strong>- run: bats -v<\/strong><\/pre>\n<p>Bu i\u015f ak\u0131\u015f\u0131 a\u015fa\u011f\u0131daki gibi g\u00f6rselle\u015ftirilebilir:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/docs.github.com\/assets\/cb-34473\/images\/help\/actions\/overview-actions-event.png\" alt=\"Diagram showing the trigger, runner, and job of a workflow. The job is broken into 4 steps.\" width=\"612\" height=\"307\" \/><\/p>\n<p id=\"VSQYytV\">S\u0131ra geldi, uEngine4 i\u00e7in kulland\u0131\u011f\u0131m\u0131z i\u015f ak\u0131\u015f\u0131 beti\u011fine, hadi h\u0131zl\u0131ca ona da bakal\u0131m. Bu arada ko\u015fan uEngine4 i\u015f ak\u0131\u015flar\u0131na ve di\u011fer detaylara <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/github.com\/yazilimperver\/uEngine4\/actions\">https:\/\/github.com\/yazilimperver\/uEngine4\/actions<\/a><\/strong><\/span> adresinden ula\u015fabilirsiniz.<\/p>\n<pre class=\"lang:yaml decode:true\">name: uEngine CMake Multiplatform Github Actions Template\r\n\r\non: \r\n  push:\r\n    branches:\r\n      - main\r\n   \r\n    # A\u015fa\u011f\u0131da verilen dizin ve dosyalardaki commit'ler i\u015f ak\u0131\u015f\u0131n\u0131 tetiklemeyecek. .gitignore'a benzer bir mant\u0131k\r\n    paths-ignore:\r\n      - '**\/**.md'\r\n\r\n# \u0130\u015f ak\u0131\u015f\u0131 i\u00e7erisinde ortam de\u011fi\u015fkenleri de tan\u0131mlayabilirsiniz\r\nenv:\r\n  CMAKE_VERSION: \"3.29.6\"\r\n  NINJA_VERSION: \"1.12.1\"\r\n\r\njobs:\r\n  build:\r\n    # \u00d6zellikle farkl\u0131 i\u015fletim sistemi veya konfig\u00fcrasyonlar i\u00e7in \"strategy\"\/matrix\" yap\u0131s\u0131 kullan\u0131labiliyor\r\n    # matrix GitHub Actions'ta anahtar bir kelime. A\u015fa\u011f\u0131da bunu Windows ve Ubuntu buildleri i\u00e7in kullan\u0131yoruz\r\n    # Detaylar i\u00e7in https:\/\/docs.github.com\/en\/actions\/writing-workflows\/choosing-what-your-workflow-does\/using-a-matrix-for-your-jobs e g\u00f6z atabilirsiniz\r\n    # Buna ayr\u0131 bir yaz\u0131 da ay\u0131rabiliriz :)\r\n    name: ${{ matrix.config.name }}\r\n    runs-on: ${{ matrix.config.os }}\r\n\r\n    strategy:\r\n      # Herhangi bir hata durumunda hemen ak\u0131\u015f durmas\u0131n diye eklenen bir flag\r\n      fail-fast: false\r\n      matrix:\r\n        # A\u015fa\u011f\u0131da konfig\u00fcrasyonlar\u0131 tan\u0131ml\u0131yoruz. Bir tane windows, bir tane ubuntu i\u00e7in\r\n        # i\u015fletim sistemleri docker arac\u0131l\u0131\u011f\u0131 ile kullan\u0131l\u0131yor, ayr\u0131ca c\/c++ derleyicileri de belirtiliyor\r\n        config:\r\n         - {\r\n            name: \"Windows Latest MSVC\", artifact: \"Windows-MSVC\",\r\n            os: windows-latest,\r\n            cc: \"cl\", cxx: \"cl\",\r\n            environment_script: \"C:\/Program Files\/Microsoft Visual Studio\/2022\/Enterprise\/VC\/Auxiliary\/Build\/vcvars64.bat\"\r\n          }\r\n         - {\r\n            name: \"Ubuntu Latest GCC\", artifact: \"Linux\",\r\n            os: ubuntu-latest,\r\n            cc: \"gcc\", cxx: \"g++\"\r\n          }\r\n    steps:\r\n    # Checkout'lamak i\u00e7in kullan\u0131lan GitHub Action\r\n    - uses: actions\/checkout@v4\r\n\r\n    # A\u015fa\u011f\u0131da uEngine i\u00e7in ihtiya\u00e7 duyulan ad\u0131mlar s\u0131ralanm\u0131\u015f durumda. Genelde isimler ne yapt\u0131klar\u0131n\u0131 ifade ediyor oldu\u011fu i\u00e7in \u00e7ok detaylara girmeyece\u011fim\r\n    # Ad\u0131mlardan biri\r\n    - name: Greeting-Windows\r\n      # A\u015fa\u011f\u0131daki gibi kontroller ile i\u015fletim sistemine \u00f6zel, uyarlamalar yapabilirsiniz\r\n      if: runner.os == 'Windows'\r\n      run: |\r\n        echo \"Yazilimperver Github Actions started from Windows!\"\r\n\r\n    - name: Greeting-Linux\r\n      if: runner.os == 'Linux'\r\n      run: |\r\n        echo \"Yazilimperver Github Actions started from Linux!\"    \r\n\r\n    - name: Linux Dependencies\r\n      if: runner.os == 'Linux'\r\n      run: |\r\n        sudo apt install clang-tidy -y    \r\n\r\n    - name: Download Ninja and CMake\r\n      # CMake ve ninja'y\u0131 indirmek i\u00e7in kullan\u0131lacak betik\r\n      shell: cmake -P {0}\r\n      run: |\r\n        set(cmake_version $ENV{CMAKE_VERSION})\r\n        set(ninja_version $ENV{NINJA_VERSION})\r\n\r\n        message(STATUS \"Using host CMake version: ${CMAKE_VERSION}\")\r\n\r\n        if (\"${{ runner.os }}\" STREQUAL \"Windows\")\r\n          set(ninja_suffix \"win.zip\")\r\n          set(cmake_suffix \"windows-x86_64.zip\")\r\n          set(cmake_dir \"cmake-${cmake_version}-windows-x86_64\/bin\")\r\n        elseif (\"${{ runner.os }}\" STREQUAL \"Linux\")\r\n          set(ninja_suffix \"linux.zip\")\r\n          set(cmake_suffix \"linux-x86_64.tar.gz\")\r\n          set(cmake_dir \"cmake-${cmake_version}-linux-x86_64\/bin\")\r\n        elseif (\"${{ runner.os }}\" STREQUAL \"macOS\")\r\n          set(ninja_suffix \"mac.zip\")\r\n          set(cmake_suffix \"macos-universal.tar.gz\")\r\n          set(cmake_dir \"cmake-${cmake_version}-macos-universal\/CMake.app\/Contents\/bin\")\r\n        endif()\r\n\r\n        set(ninja_url \"https:\/\/github.com\/ninja-build\/ninja\/releases\/download\/v${ninja_version}\/ninja-${ninja_suffix}\")\r\n        file(DOWNLOAD \"${ninja_url}\" .\/ninja.zip SHOW_PROGRESS)\r\n        execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf .\/ninja.zip)\r\n\r\n        set(cmake_url \"https:\/\/github.com\/Kitware\/CMake\/releases\/download\/v${cmake_version}\/cmake-${cmake_version}-${cmake_suffix}\")\r\n        file(DOWNLOAD \"${cmake_url}\" .\/cmake.zip SHOW_PROGRESS)\r\n        execute_process(COMMAND ${CMAKE_COMMAND} -E tar xvf .\/cmake.zip)\r\n\r\n        # Add to PATH environment variable\r\n        file(TO_CMAKE_PATH \"$ENV{GITHUB_WORKSPACE}\/${cmake_dir}\" cmake_dir)\r\n        set(path_separator \":\")\r\n        if (\"${{ runner.os }}\" STREQUAL \"Windows\")\r\n          set(path_separator \";\")\r\n        endif()\r\n        file(APPEND \"$ENV{GITHUB_PATH}\" \"$ENV{GITHUB_WORKSPACE}${path_separator}${cmake_dir}\")\r\n\r\n        if (NOT \"${{ runner.os }}\" STREQUAL \"Windows\")\r\n          execute_process(\r\n            COMMAND chmod +x ninja\r\n            COMMAND chmod +x ${cmake_dir}\/cmake\r\n          )\r\n        endif()\r\n\r\n    - name: Download ccache\r\n      id: ccache\r\n      run: |\r\n        if [ \"$RUNNER_OS\" == \"Linux\" ]; then\r\n          sudo apt install ccache\r\n        fi\r\n      shell: bash\r\n    \r\n    # uEngine4 i\u00e7in linux ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kurdu\u011fumuz ad\u0131m\r\n    - name: Install Other 3rd Party Dependencies - Linux\r\n      id: external_libraries_linux\r\n      if: runner.os == 'Linux'\r\n      run: |\r\n        chmod 700 install_for_linux.sh\r\n        install_for_linux.sh\r\n      shell: bash\r\n    \r\n    - name: Configure build for amd64\r\n      if: runner.os == 'Windows'\r\n      # Komut sat\u0131r\u0131ndan MSVC \u00e7a\u011f\u0131rmak i\u00e7in kullan\u0131lan bir GitHub Action\r\n      uses: ilammy\/msvc-dev-cmd@v1\r\n      with:\r\n        arch: amd64\r\n\r\n      # uEngine4 i\u00e7in windows ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kurdu\u011fumuz ad\u0131m\r\n    - name: Install Other 3rd Party Dependencies - Windows\r\n      id: external_libraries_win\r\n      if: runner.os == 'Windows'\r\n      run: |\r\n        install_for_windows.bat\r\n      shell: cmd\r\n    \r\n    # uEngine4'\u00fc linux i\u00e7in derledi\u011fimiz ad\u0131m\r\n    - name: Build uEngine4 Linux\r\n      id: build_uengine4_linux\r\n      if: runner.os == 'Linux'\r\n      run: |\r\n        git submodule update --init --recursive\r\n        cd code\r\n        chmod 700 .\/scripts\/buildLinux.sh\r\n        .\/scripts\/buildLinux.sh\r\n      shell: bash      \r\n    \r\n    - name: VcPkg Installation\r\n      if: runner.os == 'Windows'\r\n      run: |\r\n        git clone https:\/\/github.com\/microsoft\/vcpkg.git\r\n        cd vcpkg\r\n        bootstrap-vcpkg.bat\r\n        vcpkg integrate install\r\n        vcpkg install opengl glew --triplet=x64-windows-static\r\n    \r\n    # uEngine4'\u00fc windows i\u00e7in derledi\u011fimiz ad\u0131m\r\n    - name: Build uEngine4 Windows\r\n      id: build_uengine4_windows\r\n      if: runner.os == 'Windows'\r\n      run: |\r\n        git submodule update --init --recursive\r\n        cd code\r\n        cmake -S . -B build_ninja -G \"Ninja\"\r\n        cd build_ninja\r\n        ninja\r\n        cd ..\r\n      shell: cmd<\/pre>\n<p>Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m, uzunca bir yaz\u0131m\u0131n daha sonuna geldik. Bu yaz\u0131 ile birlikte art\u0131k Github repolar\u0131n\u0131z\u0131 CI\/CD ile tan\u0131\u015ft\u0131rabilirsiniz.<\/p>\n<p>Bir sonraki yaz\u0131mda g\u00f6r\u00fc\u015fmek dile\u011fiyle, kendinize \u00e7ok iyi bak\u0131n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m son g\u00fcncellemem ile birlikte, uEngine4 motorumuz da art\u0131k Github Actions marifeti ile CI\/CD \u00fczerinden otomatik olarak olu\u015fturulabilmekte. Bir ka\u00e7 yaz\u0131 \u00f6ncesinde, Github Actions&#8217;I kendi uygulamalar\u0131n\u0131zda da kullanabilmeniz i\u00e7in \u00f6rnek betikleri \u015fablon projeme eklemi\u015ftim. A\u015fa\u011f\u0131da ilgili repoya ve yaz\u0131ma ula\u015fabilirsiniz: uEngine 4 Son G\u00fcncellemeler &#8211; II uEngine4&#8217;e de bu yetene\u011fi kazand\u0131rm\u0131\u015f bulunuyorum&#8230;. <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[188],"tags":[1151,1148,13,1037,516,51,1139,1147,1128,1152,1150,1149],"class_list":["post-2946","post","type-post","status-publish","format-standard","hentry","category-yazilim-muhendisligi","tag-actions","tag-automation","tag-c","tag-ci-cd","tag-events","tag-github","tag-github-actions","tag-jenkins","tag-jobs","tag-runner","tag-steps","tag-workflows"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>uEngine4 - GitHub Actions - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"uEngine4 - GitHub Actions - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m son g\u00fcncellemem ile birlikte, uEngine4 motorumuz da art\u0131k Github Actions marifeti ile CI\/CD \u00fczerinden otomatik olarak olu\u015fturulabilmekte. Bir ka\u00e7 yaz\u0131 \u00f6ncesinde, Github Actions&#8217;I kendi uygulamalar\u0131n\u0131zda da kullanabilmeniz i\u00e7in \u00f6rnek betikleri \u015fablon projeme eklemi\u015ftim. A\u015fa\u011f\u0131da ilgili repoya ve yaz\u0131ma ula\u015fabilirsiniz: uEngine 4 Son G\u00fcncellemeler &#8211; II uEngine4&#8217;e de bu yetene\u011fi kazand\u0131rm\u0131\u015f bulunuyorum.... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-01T19:16:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057.png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"uEngine4 &#8211; GitHub Actions\",\"datePublished\":\"2024-08-01T19:16:07+00:00\",\"dateModified\":\"2024-08-01T19:16:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\"},\"wordCount\":1386,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"actions\",\"automation\",\"c++\",\"CI\/CD\",\"events\",\"Github\",\"github actions\",\"jenkins\",\"jobs\",\"runner\",\"steps\",\"workflows\"],\"articleSection\":[\"Yaz\u0131l\u0131m M\u00fchendisli\u011fi\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\",\"name\":\"uEngine4 - GitHub Actions - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2024-08-01T19:16:07+00:00\",\"dateModified\":\"2024-08-01T19:16:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"uEngine4 &#8211; GitHub Actions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"uEngine4 - GitHub Actions - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/","og_locale":"tr_TR","og_type":"article","og_title":"uEngine4 - GitHub Actions - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet sevgili yaz\u0131l\u0131mperver dostlar\u0131m son g\u00fcncellemem ile birlikte, uEngine4 motorumuz da art\u0131k Github Actions marifeti ile CI\/CD \u00fczerinden otomatik olarak olu\u015fturulabilmekte. Bir ka\u00e7 yaz\u0131 \u00f6ncesinde, Github Actions&#8217;I kendi uygulamalar\u0131n\u0131zda da kullanabilmeniz i\u00e7in \u00f6rnek betikleri \u015fablon projeme eklemi\u015ftim. A\u015fa\u011f\u0131da ilgili repoya ve yaz\u0131ma ula\u015fabilirsiniz: uEngine 4 Son G\u00fcncellemeler &#8211; II uEngine4&#8217;e de bu yetene\u011fi kazand\u0131rm\u0131\u015f bulunuyorum.... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2024-08-01T19:16:07+00:00","og_image":[{"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2024\/07\/img_66aa2c6562057.png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"uEngine4 &#8211; GitHub Actions","datePublished":"2024-08-01T19:16:07+00:00","dateModified":"2024-08-01T19:16:07+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/"},"wordCount":1386,"commentCount":2,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["actions","automation","c++","CI\/CD","events","Github","github actions","jenkins","jobs","runner","steps","workflows"],"articleSection":["Yaz\u0131l\u0131m M\u00fchendisli\u011fi"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/","name":"uEngine4 - GitHub Actions - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2024-08-01T19:16:07+00:00","dateModified":"2024-08-01T19:16:07+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2024\/08\/01\/uengine4-github-actions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"uEngine4 &#8211; GitHub Actions"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=2946"}],"version-history":[{"count":6,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2946\/revisions"}],"predecessor-version":[{"id":2963,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/2946\/revisions\/2963"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=2946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=2946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=2946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}