
Sebastian Spaink
Influxdata
Sebastian is a software engineer who loves Go and starting hobbies he doesn’t have time for. He works at Influxdata helping develop the Telegraf project.
Shipping Go code without sinking
In my current position I work alongside a talented team of engineers as a maintainer for a large open source project written entirely in Go. This project currently has multiple feature and bug releases per year, each release needs to be performed efficiently and produce trustworthy artifacts. In this talk I want to share with you our experience releasing software written in Go. Releasing software is usually a process mostly hidden to the end user, but it’s a process that is essential to get right. Therefore the goal is to let our processes be a public learning experience, highlighting tools and tips to help you begin or improve your release process. This talk will be broken into three main sections, first covering preparing the code for a release, then building and processing the final release binary, and finally distributing it.
Preparing the code for a release…
Discuss types of releases: Major, minor, patch and security releases
Build tags, isolating platform specific code
Automatically updating documentation with tools written in Go (e.g. changelog)
Creating a tag to trigger building release artifacts
Building the release Go binaries…
The makefile, explore alternatives such as Mage
Continuous integration setup with circle-ci and github actions
Running unit tests, integrations tests and linters (Using the package testcontainers-go)
Packaging the binaries (creating rpms, debs, OSX packages)
Signing the binaries for Mac and Windows (Using the goversioninfo to add a windows icon)
Sharing artifacts frequently before release (during pull requests and nightly)
Distributing the binaries…
Updating and pushing the dockerfiles
Finalizing the github release
Updating the main tools website to announce the release
Keeping the entire team aware of the release with a continuously updated slack message
Keeping the entire team trained with the tools through making it everyone’s responsibility