Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
16 yazı bulundu
GitHub Actions Nedir? Workflow, Event, Job, Step ve Runner ile İlk CI
DevOps SERİ 01

GitHub Actions Nedir? Workflow, Event, Job, Step ve Runner ile İlk CI

GitHub Actions, repository'deki event'lere göre .github/workflows altındaki YAML workflow'larını runner'larda koşturan CI/CD platformudur. Bookstore API için restore, build ve unit test yapan ilk workflow'u yazıp act ve actionlint ile yerelde deniyor; uses ile run farkını, run log'unu, re-run'ı ve Web API 31'deki workflow'un nedenlerini konuşuyoruz.

8 Kas 2026 13 dk 3
GitHub Actions Trigger'ları: push, pull_request, workflow_dispatch, schedule ve Filtreler
DevOps SERİ 02

GitHub Actions Trigger'ları: push, pull_request, workflow_dispatch, schedule ve Filtreler

Workflow'u ne zaman çalıştıracağını on altındaki event'ler ve filtreler belirler: push ve pull_request için branches, tags, paths ve ! negation; activity type'lar, workflow_dispatch input'ları, timezone destekli schedule, workflow_run, repository_dispatch ve merge_group. github.event.inputs ile boolean okuma tuzağını, actionlint'in yakaladığı trigger hatalarını ve act'in filtreleri neden değerlendirmediğini gerçek çıktılarla gösteriyoruz.

8 Kas 2026 12 dk 4
GitHub Actions'ta Expression, Context ve Variable'lar: if, outputs ve GITHUB_ENV
DevOps SERİ 03

GitHub Actions'ta Expression, Context ve Variable'lar: if, outputs ve GITHUB_ENV

${{ }} içindeki expression'lar context'lerden (github, env, vars, steps, needs, inputs…) değer okur, loose karşılaştırma yapar ve if: koşullarını belirler. if içinde ${{ }} dışında metin bırakmanın neden her zaman doğru sayıldığını, contains/fromJSON/hashFiles/case fonksiyonlarını, GITHUB_OUTPUT ve GITHUB_ENV ile veri taşımayı, GITHUB_STEP_SUMMARY ile test tablosunu ve always ile !cancelled farkını act çıktılarıyla gösteriyoruz.

8 Kas 2026 11 dk 4
GitHub Actions'ta Job'lar: needs, matrix, concurrency, timeout ve Service Container'lar
DevOps SERİ 04

GitHub Actions'ta Job'lar: needs, matrix, concurrency, timeout ve Service Container'lar

Job'lar varsayılan olarak paralel koşar; needs ile bir DAG kurulur, kırılan job'a bağlı her şey skipped olur. Bookstore CI'ını format, unit-test (OS matrix), integration-test (PostgreSQL 16/17/18 service container), web-build ve publish job'larına bölüp act ile koşturuyor; include/exclude, fail-fast, max-parallel, concurrency, timeout-minutes, continue-on-error ve Nisan 2026'da gelen service command/entrypoint'i inceliyoruz.

8 Kas 2026 11 dk 4
GitHub Actions ile .NET CI: setup-dotnet, global.json, NuGet Cache, Test Raporu ve Coverage
DevOps SERİ 05

GitHub Actions ile .NET CI: setup-dotnet, global.json, NuGet Cache, Test Raporu ve Coverage

.NET 10 CI'ında SDK'yı global.json ve setup-dotnet@v6 ile sabitle, restore'u lock dosyaları ve --locked-mode ile yap, NuGet cache'ini lock hash'ine bağla, dotnet format ve -warnaserror ile kapı koy. xUnit v3'ün Microsoft.Testing.Platform modunda TRX ve Cobertura raporu üretip job summary'ye yazıyor, upload-artifact ile saklıyoruz; act'in v7 artifact sınırını ve Linux'taki dosya adı tuzağını da gerçek çıktılarla gösteriyoruz.

8 Kas 2026 11 dk 3
GitHub Actions ile Angular CI: setup-node, npm ci, Lint, Vitest, Build Budget'ları ve Playwright
DevOps SERİ 06

GitHub Actions ile Angular CI: setup-node, npm ci, Lint, Vitest, Build Budget'ları ve Playwright

Angular 22 CI'ında Node sürümünü setup-node@v7 ile package.json'daki devEngines'ten oku, npm ci ile lock dosyasına bağlı kur, ng lint, Vitest ve budget'lı ng build çalıştır, Playwright e2e'yi API ve PostgreSQL service container'ıyla koştur. Monorepo'da setup-node'un otomatik npm cache'inin neden açılmadığını, lock drift hatasını, Node sürüm uyumsuzluğunu ve tarayıcı cache'inin etkisini act çıktılarıyla gösteriyoruz.

8 Kas 2026 12 dk 4
.NET + Angular Monorepo'da GitHub Actions: Path Filtreleri, Artifact Aktarımı ve Tek Release Paketi
DevOps SERİ 07

.NET + Angular Monorepo'da GitHub Actions: Path Filtreleri, Artifact Aktarımı ve Tek Release Paketi

Path filtreli ayrı workflow'lar required check'i pending bırakır; monorepo'da tek workflow, git diff ile karar veren bir changes job'ı ve her zaman koşan bir özet job (ci-ok) bu sorunu çözer. Angular dist'ini artifact ile .NET publish'in wwwroot'una taşıyıp tag push'unda tek bir release zip'i üretiyor, artifact ile cache farkını ve gh release create ile GitHub Release'i act çıktılarıyla anlatıyoruz.

8 Kas 2026 10 dk 3
GitHub Actions'ta Secret, Variable ve GITHUB_TOKEN Permission'ları
DevOps SERİ 08

GitHub Actions'ta Secret, Variable ve GITHUB_TOKEN Permission'ları

Secret'lar organization, repository ve environment seviyesinde tanımlanır, en dar seviye kazanır ve log'da metin eşleştirmesiyle maskelenir; base64 gibi türetilmiş değerler ve JSON içinden okunan alanlar maskelenmez. act ile sahte secret'larla ::add-mask::, if içinde secret kullanımı, variable'lar ve boş GITHUB_TOKEN'ı gösteriyor; permissions ile least privilege'ı, Eylül 2026'da gelen vulnerability-alerts scope'unu ve PAT yerine GitHub App token'ını anlatıyoruz.

8 Kas 2026 10 dk 5
GitHub Actions Environment'ları: Protection Rule, Approval ve Deployment Geçmişi
DevOps SERİ 09

GitHub Actions Environment'ları: Protection Rule, Approval ve Deployment Geçmişi

Environment, bir job'ı runner'a göndermeden önce protection rule'ları (required reviewer, wait timer, branch/tag policy) uygulayan, secret'ları yalnızca o job'a açan ve deployment geçmişi tutan adlandırılmış hedeftir. Bookstore'un staging/production deploy workflow'u, private repository plan kısıtları, deployment: false, environment başına concurrency ve queue: max; act ve actionlint'in nerede durduğu gerçek çıktılarla.

8 Kas 2026 13 dk 2
GitHub Actions ile Deploy 1: OIDC ile Azure App Service ve Şifresiz Cloud Erişimi
DevOps SERİ 10

GitHub Actions ile Deploy 1: OIDC ile Azure App Service ve Şifresiz Cloud Erişimi

OIDC ile job her çalışmada GitHub'dan imzalı, kısa ömürlü bir token alır ve Azure bunu federated credential ile doğrulayıp client secret olmadan erişim verir. id-token: write, sub claim formatları, Temmuz 2026'daki ID'li subject değişikliği, custom property claim'leri, staging slot'a deploy, smoke test ve swap; AWS ve Google Cloud karşılıkları.

8 Kas 2026 12 dk 5
GitHub Actions ile Deploy 2: Kendi Linux Sunucuna SSH, Docker Image ve GHCR
DevOps SERİ 11

GitHub Actions ile Deploy 2: Kendi Linux Sunucuna SSH, Docker Image ve GHCR

Image'ı GitHub Actions'ta bir kez build edip GHCR'a push'la, sunucuya SSH ile yalnızca digest'i gönder; sunucu Docker Compose ile çeker ve yeniden başlatır. metadata-action, build-push-action ve gha cache backend'i (28 sn'den 4 sn'ye), actions/attest, known_hosts pin'leme ve host key değişince ne olduğu, .env.previous ile rollback; act ile gerçek koşu.

8 Kas 2026 12 dk 4
GitHub Actions'ta Tekrarı Azaltmak: Composite Action, Reusable Workflow ve YAML Anchor
DevOps SERİ 12

GitHub Actions'ta Tekrarı Azaltmak: Composite Action, Reusable Workflow ve YAML Anchor

Step'leri paylaşmak için composite action, environment ve approval gerektiren job'ları paylaşmak için reusable workflow, aynı dosyada blok tekrarı için YAML anchor kullan. Bookstore'un dotnet-ci action'ı ve reusable-deploy workflow'u act ile; secrets: inherit riskleri, environment secret'ları, 10 seviye/50 workflow sınırı, $/ syntax'ı, sürümleme ve merge key'in desteklenmemesi.

8 Kas 2026 11 dk 4
Blog Haritası