Contributing
September 23, 2025 ยท View on GitHub
We love contributions! You are welcome to open a pull request, but it's a good idea to open an issue and discuss your idea with us first.
Once you are ready to open a PR, please keep the following guidelines in mind:
- Code should be
go fmtcompliant. - Types, structs and funcs should be documented.
- Tests pass.
Getting set up
godo uses go modules. Just fork this repo, clone your fork and off you go!
Running tests
When working on code in this repository, tests can be run via:
go test -mod=vendor .
Versioning
Godo follows semver versioning semantics. New functionality should be accompanied by increment to the minor version number. Any code merged to main is subject to release.
Releasing
The repo uses GitHub workflows to publish a draft release when a new tag is pushed. We use semver to determine the version number for the tag.
-
Run
make changesto review the merged PRs since last release and decide what kind of release you are doing (bugfix, feature or breaking).- Review the tags on each PR and make sure they are categorized appropriately.
-
Run
BUMP=(bugfix|feature|breaking) make bump_versionto update thegodoversion.
BUMPalso accepts(patch|minor|major)Command example:
make BUMP=minor bump_version -
Update the godo version in
godo.goand add changelog generator logs inCHANGELOG.mdfile. Create a separate PR with only these changes. -
Once the commit has been pushed, tag the commit to trigger the release workflow: run
make tagto tag the latest commit and push the tag to ORIGIN.Notes:
- To tag an earlier commit, run
COMMIT=${commit} make tag. - To push the tag to a different remote, run
ORIGIN=${REMOTE} make tag.
- To tag an earlier commit, run
-
Once the release process completes, review the draft release for correctness and publish the release.
Ensure the release has been markedLatest.
Go Version Support
This project follows the support policy of Go as its support policy. The two latest major releases of Go are supported by the project. CI workflows should test against both supported versions. go.mod should specify the oldest of the supported versions to give downstream users of godo flexibility.