🚀 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.
