Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Sürüm Numarası Ne Anlatır? SemVer 2.0.0, Pre-release, Build Metadata ve CalVer
Sürüm numarası, kime söz verdiğine göre seçilir: paketler için SemVer 2.0.0 uyumluluk sözü verir, deploy edilen uygulamalar için CalVer ve build numarası "ne zaman, ne çıktı" sorusunu cevaplar. Pre-release ve build metadata sıralamasını NuGet.Versioning ve npm semver ile gerçek çıktılarla karşılaştırıyor, 0.x aralıklarını, breaking change türlerini, .NET ve Angular destek politikalarını ve Bookstore için karar tablosunu ele alıyoruz.
.NET ve Angular'da Sürüm Bilgisi: AssemblyVersion, FileVersion, InformationalVersion, Source Link ve /version Endpoint'i
.NET'te sürümü Version ile tek yerden ver, kütüphanede AssemblyVersion'ı major'a sabitle, FileVersion'a CI build numarasını koy ve InformationalVersion'ı .NET 8'den beri commit SHA'sını ekleyen SDK'ya bırak. Bookstore API'sinde /version endpoint'i, log satırı ve OpenTelemetry service.version ile sürümü görünür kılıyor; Angular'da define ile build'e sürüm gömüyor ve service worker ile yeni sürüm bildirimini Playwright'la deniyoruz.
Git'ten Sürüm Üretmek: MinVer, Nerdbank.GitVersioning ve GitVersion Karşılaştırması
Sürümü Git'ten üretmenin üç yolu var: MinVer yalnız tag'e bakar, Nerdbank.GitVersioning version.json ile git height'ı birleştirir, GitVersion branch tipine göre hesaplar. Üçünü Bookstore.Contracts'ta aynı senaryoyla gerçek çıktılarla karşılaştırıyor; tag öneki, AssemblyVersion varsayılanları, GitVersion 6'daki config değişiklikleri ve CI'da fetch-depth: 0 gerektiren shallow clone tuzağını gösteriyoruz.
Changelog ve Release Notes: Conventional Commits'ten Otomatik CHANGELOG'a, Deprecation Politikası
CHANGELOG'u Conventional Commits'ten otomatik üret, release notes'u ise elle yaz: araç sürümü ve değişiklik listesini mekanik olarak çıkarır, ama deprecation'ı, geçiş adımlarını ve destek takvimini bilmez. Bookstore.Contracts'ı commit-and-tag-version ile 1.1.0 ve 2.0.0'a taşıyor, [Obsolete] ve DiagnosticId ile bir sürüm önceden uyarıyor, 2.0 geçiş notunu yazıyor ve release-please manifest mode ile PR tabanlı alternatifi karşılaştırıyoruz.
NuGet Paketi Yayınlamak: dotnet pack, Paket Metadata'sı, Package Validation ve nuget.org Trusted Publishing
NuGet paketini metadata, README, lisans ve symbol paketiyle oluştur, EnablePackageValidation ile önceki sürümü baseline alıp kazara breaking change'i pack sırasında yakala, nuget.org'a ise uzun ömürlü API key yerine OIDC ile bir saatlik key veren trusted publishing ile yayınla. Bookstore.Contracts'ta isteğe bağlı parametrenin binary kırılmasını CP0002 ile, framework kaldırmayı PKV006 ile, aynı sürümün ikinci push'unu yerel sunucuda 409 Conflict ile gösteriyoruz.
Angular Kütüphanesini npm'e Yayınlamak: ng-packagr, peerDependencies, dist-tag'ler ve Trusted Publishing
Angular kütüphanesini ng-packagr ile Angular Package Format'ta paketle, kaynak klasörünü değil dist çıktısını yayınla ve desteklediğin Angular aralığını peerDependencies ile beyan et. @bookstore/ui'de secondary entry point'i ve exports alanını kuruyor, peer aralığı karşılanmayınca ERESOLVE'u, npm 11'in tag'siz prerelease yayınını reddetmesini gösteriyor, dist-tag, deprecate ve trusted publishing workflow'unu ele alıyoruz.
Artifact Repository ve Release Süreci: Feed'ler, Container Image Tag'leri, Hotfix Akışı ve Destek Politikası
Container registry'lerinde tag varsayılan olarak hareketli bir işaret; bu yüzden image'ı sürüm ve commit SHA'sıyla etiketle, OCI label'larıyla kaynağını işaretle ve digest ile deploy et. Bookstore API'sinde aynı tag'in iki farklı image'ı göstermesini, SDK'nın OCI label'larını ve digest çıktısını, cherry-pick'li 1.x hotfix'ini ve release branch'inde yayın workflow'unun olmaması tuzağını gösteriyor; artifact repository seçeneklerini, release cadence'ı ve destek politikası şablonunu ele alıyoruz.