Here's the brief:
- We welcome contributions of all kinds, including but not limited to features, bug fixes, quality assurance, documentation, security review, translations or asking questions
- If you do not know how to code yet you can help us by translating CoyIM through Weblate
- Pull requests are based off, integrated into & rebased against main
- Write automated tests, ideally using TDD. CI needs to be green in order to merge.
- Contact us for questions & suggestions:
- IRC: #coyim @ irc.oftc.net (join via webchat)
- Email: contact@coy.im
- Twitter: @coyproject
This document outlines our way of working, gives hints and outlines the steps to make your contribution to CoyIM as smooth as possible. You're not required to read this before getting started. We're explaining the way we work to make sure you're having a good experience and can make best use of the time you're contributing to our project.
Coy is written in Golang and uses GTK+3 as its UI toolkit.
git
golang
withcgo
support.gtk
make
ruby
Installing these requirements differs on each system.
-
Get the code, and navigate to the source directory.
go get -d -u github.com/coyim/coyim cd $(go env GOPATH)/src/github.com/coyim/coyim
-
Download dependencies, and build the code and the gui.
make deps make make build-gui
-
Start CoyIM.
./bin/coyim
This is the lifecycle of a contribution. We follow a simplified fork + pull request workflow:
- To start, fork this repository and create a branch that's based on the latest commit in the
main
branch - Implement your change
- Run all checks locally. This is the default target:
make
- Send a pull request against the main branch. Please make sure the automated tests are passing, as indicated by GitHub on the pull requests.
- Please keep your feature branch updated. Rebase your branch against upstream changes on the main branch, resolve any conflicts and make sure the tests are staying green.
- Your pull request will be reviewed and merged
Generally, all issues that have no user assigned are awaiting work and free to play. If you want to make sure, or you think it will take more than a couple of days to complete your work, please reach out to us using the contact info above.
When implementing your change, please follow this advice:
- Your change should be described in an issue, or at least in the pull request description.
- For bugs, please describe in an issue or pull request:
- Steps to reproduce the behavior
- Expected behavior
- Actual behavior. Please also include as much meta-information as reasonable, e.g. time & date, software version, operating system etc.
- Pull requests need not be finished work only; you can also submit changes in consecutive Pull Requests as long as the CI stays green. Also, please send a PR with the intent to discuss & get feedback. Please mark those Pull Requests appropriately.
- We review your pull request. During this time, we ask you to keep it up to date by frequently rebasing against main.
When reviewing your contribution, we apply the following criteria:
- Test must be green. This usually includes an automatic check of the style guide using e.g. gofmt. All tests should be executed locally before you push, as well as in the CI. If you struggle to reproduce a CI failure locally, please notify us on IRC so we can help you resolve the issue.
- We won't tolerate abusive, exploitative or harassing behavior in any context of our project and refuse collaboration with any individual who exhibit such behavior.
- To see debug messages generated by the application, use the
-debug
flag when running it. - To debug crashes, use the targets
build-debug
anddebug
. Consider using the environment variableGOTRACEBACK=crash
to generate a core dump. Read Debugging Go Code with GDB for more information. - To change and inspect the UI at runtime, use the GtkInspector. Read this blog post for a nice introduction.
- To enable debug features in the Glib and GTK+ runtimes, set the environment variables
G_DEBUG
andGTK_DEBUG
, respectively. Read the documentation on how to run Glib and GTK+ applications for more information.
Not all options are enabled by default. For example, you may need to recompile your gtk+
installation to enable
debugging and use the GTKInspector.