Contributing
By participating in this project, you agree to abide our code of conduct.
Set up your machine
goreleaser is written in Go.
Prerequisites:
Other things you might need to run some of the tests (they should get automatically skipped if a needed tool isn’t present):
Building
Clone goreleaser anywhere:
git clone [email protected]:goreleaser/goreleaser.gitcd into the directory and install the dependencies:
go mod tidyYou should then be able to build the binary:
go build -o goreleaser .
./goreleaser --versionTesting your changes
You can create a branch for your changes and try to build from the source as you go:
task buildWhen you are satisfied with the changes, we suggest you run:
task ciBefore you commit the changes, we also suggest you run:
task fmtA note about Docker multi-arch builds
If you want to properly run the Docker tests, or run goreleaser release --snapshot locally, you might need to setup Docker for it.
You can do so by running:
task docker:setupA note about Windows
Make sure to enable “Developer Mode” in Settings.
Writing pipes
Pipes should follow these conventions for consistent error output:
- Do not prefix error messages with the pipe name. Error wrapping with
the pipe name is done at the meta-pipe level (
publish,announce,defaults), so individual pipes should only describe the problem itself (e.g.,"no archives found"instead of"archive: no archives found"). - Use the pipe’s
String()method for context. Meta-pipes wrap errors usingfmt.Errorf("%s: %w", pipe.String(), err), which provides consistent, non-redundant context.
Creating a commit
Commit messages should be well formatted, and to make that “standardized”, we are using Conventional Commits.
You can follow the documentation on their website.
Submitting a pull request
Push your branch to your goreleaser fork and open a pull request against the main branch.
Financial contributions
You can contribute in our OpenCollective or to any of the contributors directly. See this page for more details.