Skip to content

Releasing

The release process of Task is done with the help of GoReleaser. You can test the release process locally by calling the goreleaser:test task of the Taskfile.

GitHub Actions should release artifacts automatically when a new Git tag is pushed to main branch (raw executables and DEB and RPM packages).

The body of the GitHub release is the section of the CHANGELOG.md matching the version being released, extracted by go run ./cmd/release --notes. A version without changelog entries is released with an empty body.

Raw executables can also be reproduced and verified locally by checking out a specific tag and calling goreleaser build, using the Go version defined in the above GitHub Actions.

Website

task release:<version> promotes the documentation before tagging: the docs in website/src/next/docs, their sidebar and the next-* JSON schemas are copied over their published counterparts, so the released tag carries the docs of the version it ships. The release workflow then runs task website:deploy:prod.

Because taskfile.dev is built from the latest copy, it can be redeployed at any time between releases - to publish a blog post or a documentation fix - without exposing the docs of unreleased features:

shell
git checkout main && git pull
task website:deploy:prod

Package managers

GoReleaser will automatically publish the release to most package managers:

  • Cloudsmith (DEB and RPM repositories)
  • Homebrew
  • npm
  • Snapcraft
  • winget

Once the release is published, GoReleaser announces it on the Discord server. Nightly releases are not announced.

These package managers are updated automatically by the community: