📦 Release first ⏩ Ship faster ⚡

🚀 How to make releases painless

In the olden days, releases were a lot of work. The process involved manually building/testing, uploading to a distribution location, sending out notifications to interested parties, etc. Supporting multiple platforms meant even more work.

Today, there are better ways. With modern CI/CD workflows, pushing a tag to a repo triggers GitHub Actions to handle the rest.

As an example, in the BRun project, there are several key pieces:

  • Tests run on every PR commit to ensure nothing breaks.
  • Go makes it super easy to build for other platforms. Anyone who has cross-compiled C/C++ knows the pain.
  • The amazing GoReleaser tool takes care of building the release binaries and uploading them to GitHub.
  • A script automatically extracts the Changelog for the release that gets added to the Release.
  • A GitHub action runs GoReleaser whenever the repo is tagged with 'v*'.
  • GitHub sends notifications to watchers of the project. (Consider watching the BRun project!)

The result is beautiful releases for every platform (Windows, MacOS, Linux, ARM, x86, RISC-V) created whenever anything is improved, no matter how small. There is no friction to creating a release.

Part of making all this happen is choosing the right technology. When it comes to release and deployment, Go makes things really easy (compared to C++, Python, Ruby, Java, etc.). There are trade-offs so make sure release is factored into technology decisions. One way to ensure this happens is do it first.

Painless releases diagram

Cliff Brake January 29, 2026 #release #automation #ci #cd #deployment #workflow #friction #tooling