Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
7 posts found
What Does a Version Number Say? SemVer 2.0.0, Pre-release, Build Metadata and CalVer
DevOps PART 01

What Does a Version Number Say? SemVer 2.0.0, Pre-release, Build Metadata and CalVer

Choose a version scheme by whom it makes a promise to: for packages SemVer 2.0.0 promises compatibility, for deployed applications CalVer plus a build number answers "what shipped, and when". We compare pre-release and build metadata ordering in NuGet.Versioning and npm semver with real output, and cover 0.x ranges, kinds of breaking changes, the .NET and Angular support policies and a decision table for Bookstore.

14 Nov 2026 13 min 2
Version Info in .NET and Angular: AssemblyVersion, FileVersion, InformationalVersion, Source Link and a /version Endpoint
DevOps PART 02

Version Info in .NET and Angular: AssemblyVersion, FileVersion, InformationalVersion, Source Link and a /version Endpoint

In .NET, provide the version once through Version, pin AssemblyVersion to the major in libraries, put the CI build number into FileVersion and leave InformationalVersion to the SDK, which has appended the commit SHA since .NET 8. We make the version visible in the Bookstore API with a /version endpoint, a log line and OpenTelemetry service.version, inject it into the Angular build with define, and test the service worker's new-version notice with Playwright.

14 Nov 2026 13 min 2
Deriving Versions from Git: Comparing MinVer, Nerdbank.GitVersioning and GitVersion
DevOps PART 03

Deriving Versions from Git: Comparing MinVer, Nerdbank.GitVersioning and GitVersion

There are three ways to derive versions from Git: MinVer looks only at tags, Nerdbank.GitVersioning combines version.json with git height, and GitVersion calculates by branch type. We compare all three on Bookstore.Contracts with the same scenario and real output, and show the tag prefix, AssemblyVersion defaults, GitVersion 6's config changes and the shallow clone trap that requires fetch-depth: 0 in CI.

14 Nov 2026 12 min 2
Changelogs and Release Notes: From Conventional Commits to an Automated CHANGELOG, and a Deprecation Policy
DevOps PART 04

Changelogs and Release Notes: From Conventional Commits to an Automated CHANGELOG, and a Deprecation Policy

Generate the CHANGELOG from Conventional Commits and write release notes by hand: the tool derives the version and the list of changes mechanically, but knows nothing about deprecations, migration steps or support dates. We take Bookstore.Contracts to 1.1.0 and 2.0.0 with commit-and-tag-version, warn one release ahead with [Obsolete] and DiagnosticId, write the 2.0 migration notes, and compare the PR-based alternative with release-please manifest mode.

14 Nov 2026 12 min 2
Publishing a NuGet Package: dotnet pack, Package Metadata, Package Validation and nuget.org Trusted Publishing
DevOps PART 05

Publishing a NuGet Package: dotnet pack, Package Metadata, Package Validation and nuget.org Trusted Publishing

Build a NuGet package with metadata, README, license and a symbol package, catch accidental breaking changes during pack with EnablePackageValidation against the previous version, and publish to nuget.org with trusted publishing, which issues a one-hour key through OIDC instead of a long-lived API key. On Bookstore.Contracts we show an optional parameter's binary break as CP0002, a dropped framework as PKV006 and a second push of the same version as 409 Conflict on a local server.

14 Nov 2026 12 min 2
Publishing an Angular Library to npm: ng-packagr, peerDependencies, dist-tags and Trusted Publishing
DevOps PART 06

Publishing an Angular Library to npm: ng-packagr, peerDependencies, dist-tags and Trusted Publishing

Package an Angular library in the Angular Package Format with ng-packagr, publish the dist output rather than the source folder, and declare the Angular range you support with peerDependencies. For @bookstore/ui we set up a secondary entry point and the exports field, show ERESOLVE when the peer range is not met and npm 11 refusing a prerelease without a tag, and cover dist-tags, deprecate and a trusted publishing workflow.

14 Nov 2026 13 min 2
Artifact Repositories and the Release Process: Feeds, Container Image Tags, Hotfix Flow and Support Policy
DevOps PART 07

Artifact Repositories and the Release Process: Feeds, Container Image Tags, Hotfix Flow and Support Policy

In container registries a tag is a moving pointer by default, so tag images with the version and the commit SHA, mark their source with OCI labels and deploy by digest. On the Bookstore API we show the same tag pointing to two different images, the SDK's OCI labels and digest output, a 1.x hotfix cherry-picked onto a release branch and the trap of the publishing workflow missing from that branch, and cover artifact repository options, release cadence and a support policy template.

14 Nov 2026 13 min 2
Blog Map