The new major version of GoReleaser is here!

GoReleaser banner

GoReleaser banner

I first launched GoReleaser v1.0.0 in November 2021 - 2.5 years ago!

The main reason for this is that so I can clean up old deprecated options, and cleaning these old things makes it easier to add new things.

A couple of months ago I published a post explaining how GoReleaser’s versioning will work from now on. You can read it here.

So, after two and a half years, it’s beyond time for v2 to happen, don’t you think?

It's happening!

It's happening!

Highlights

GoReleaser v2 is basically the same as the GoReleaser v1.26.2 - the latest v1. The differences between them should be only the removal of deprecated options.

goreleaser --version

goreleaser --version

All that being said, we do have a lot of new features since the first v1. Here’s an incomplete list with some of my favorites:

  1. Allow to template entire files and use them in release/archives/etc (Pro)
  2. Allow publishing of Nix, Brew, etc across SCMs (Pro)
  3. Added the changelog command and changelog sub-grouping (Pro)
  4. Split & merge releases (release --prepare and continue) (Pro)
  5. Added SBOM creation support
  6. Support Keyless signing with Cosign
  7. Arch User Repository Support (aka AUR)
  8. Added support for GOAMD64 and WASI
  9. Support creating Chocolatey packages
  10. Ko support
  11. Added the healthcheck command
  12. Added more announcers: HTTP, Bluesky, Mastodon, etc
  13. Allow to compress binaries with upx
  14. Added Nix User Repository support (aka NUR)
  15. Added Winget support
  16. Allow Homebrew, Krew, Scoop, Winget, etc to open pull requests
  17. Added support for DMG creation
  18. Added support for MSI creation
  19. Added macOS binaries notarization and signing
  20. A whole lot of improvements regarding templates: new variables, new fields, new functions. 😎

Upgrading

If you keep up with the [deprecation notices][notices], it’s likely you don’t need to do anything.

If you don’t, that’s fine too! Let’s figure it out together! You can start by running the following commands:

goreleaser check # using the latest v1
rm -rf ./dist/
grep -iR '\--rm-dist' .
grep -iR '\--skip-' .
grep -iR '\--debug' .

Extra tip: You can also look into your last release logs if they are still there, and fix the deprecation warnings based on it.

Fix any occurrences following [this][notices], then, upgrade goreleaser to v2 using the method you used to install v1, and run:

goreleaser check # using latest v2

It should only warn you about the version header in the configuration file, which you can fix by adding version: 2 to it.

Then, you should be ready to use GoReleaser v2! You can build a snapshot with:

goreleaser release --snapshot --clean

GitHub Action

If you use our GitHub Action, the latest version (v6.0.0) should use ~> v2 by default if your version option is either empty or latest.

I recommend you update it:

# .github/workflows/release.yml

# ...
jobs:
  goreleaser:
    # ...
    - uses: goreleaser/goreleaser-action@v6
      with:
        distribution: goreleaser # or 'goreleaser-pro'
        version: "~> v2" # or 'latest', 'nightly', semver
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} # if using goreleaser-pro

Other news

  • GoReleaser now has ~13.2k stars and 394 contributors! Thanks, everyone!
  • We eventually discuss new features in our Discord server.  You are invited to join the conversation!
  • goreleaser-action@v6 was also released, now defaults to version: '~> v2' instead of latest.

That’s all for today!

We start working on v2.1 now, and it should be released soon-ish. 👌

Happy releasing! 🚀