Announcing GoReleaser v2.5 - multi languages, 9th anniversary edition
Merry Christmas - the last release of 2024 is here!
GoReleaser Pro was released about a month ago, and with it, the ability to include GoReleaser config files.
In practice, within an organization, is common to have either shared pieces of configuration, if not sharing the entire files within several projects. We all been there, and keeping all those files up to date is not something fun to do.
With includes, you can include either parts or full config files from anywhere on the internet, thus enabling having only a couple of files to keep up to date.
In this post we’ll explore how I’m doing that in my own projects, maybe you find something you can use on yours 🙂
goreleaserfiles
repositoryI created a repository called goreleaserfiles (inspired by dotfiles
and vimfiles
).
My approach was a more modular one: I keep one file per “feature” I want.
For instance, I have a package.yml
and a package_with_completions.yml
. The first one has the “simple packaging” I usually use, the other one has a more complete approach (pun intended), for tools that have completion scripts.
Both these two scripts (and some others) use custom template variables, such as {{ .description }}
and {{ .homepage }}
. I try to use the same names across all templates so I don’t need to repeat too much stuff.
The end result looks pretty clean. Here’s an example from tasktimer:
project_name: tt
variables:
homepage: https://github.com/caarlos0/tasktimer
description: Task Timer (tt) is a dead simple TUI task timer
includes:
- from_url:
url: caarlos0/goreleaserfiles/main/build.yml
- from_url:
url: caarlos0/goreleaserfiles/main/package_with_completions.yml
- from_url:
url: caarlos0/goreleaserfiles/main/release.yml
Here we:
project_name
(would be tasktimer
otherwise)homepage
and description
custom variablesbuild.yml
, package_with_completions.yml
and release.yml
.GoReleaser will recursively import those files in order when you run goreleaser release
and the end result will be saved in your dist
folder for further investigation.
You can also import from other directories within the same repository, which can be particularly useful with monorepos.
That’s a quick overview on GoReleaser includes feature.
If you’ll like to use it, check the Pro page and get your license.
Also, since you read this to the end, click here to get it with a discount (limited seats).
To make sure my configs are always up to date, I wrote a script that writes a GitHub Actions workflow to run goreleaser check -q
on every file .yml
file.
That way I get a build error if I’m using deprecated settings or if my files are very wrong.