Semantic Versioning, Semantic Release, and a Go-native implementation

How Semantic Versioning and Semantic Release fit together — the standard, the automation contract that turns commit history into version tags, and why I re-implemented the Node.js tool in Go to remove the JavaScript toolchain from CI pipelines that don’t otherwise need one.

July 20, 2026 · 12 min · Omar Crosby

Conventional Commits, and the thinking they encourage

A working tour of Conventional Commits — the format, the reason it makes each changeset better before any tool touches it, how to identify good scopes, what the Angular convention adds on top, and where the whole thing fits into the release-automation ecosystem (semantic-release, release-please, cocogitto, git-cliff, commitlint).

July 20, 2026 · 18 min · Omar Crosby

Distributing CLI tools with a personal Homebrew tap

How to publish Python, Go, and Rust command-line tools through your own Homebrew tap — including a personal GitHub account, GoReleaser and cargo-dist for platform builds, and go-semantic-release for automatic version bumps that flow all the way through to brew upgrade.

July 20, 2026 · 14 min · Omar Crosby