2017-10-06 03:11:51 +02:00
|
|
|
# Contributing to Dendrite
|
|
|
|
|
|
|
|
Everyone is welcome to contribute to Dendrite! We aim to make it as easy as
|
|
|
|
possible to get started.
|
|
|
|
|
2017-10-06 12:23:49 +02:00
|
|
|
Please ensure that you sign off your contributions! See [Sign Off](#sign-off)
|
|
|
|
section below.
|
|
|
|
|
|
|
|
## Getting up and running
|
|
|
|
|
|
|
|
See [INSTALL.md](INSTALL.md) for instructions on setting up a running dev
|
|
|
|
instance of dendrite, and [CODE_STYLE.md](CODE_STYLE.md) for the code style
|
|
|
|
guide.
|
|
|
|
|
2019-05-22 11:44:25 +02:00
|
|
|
As of May 2019, we're not using `gb` anymore, which is the tool we had been
|
|
|
|
using for managing our dependencies. We're now using Go modules. To build
|
|
|
|
Dendrite, run the `build.sh` script at the root of this repository (which runs
|
|
|
|
`go install` under the hood), and to run unit tests, run `go test ./...` (which
|
|
|
|
should pick up any unit test and run it). There are also [scripts](scripts) for
|
|
|
|
[linting](scripts/find-lint.sh) and doing a [build/test/lint
|
|
|
|
run](scripts/build-test-lint.sh).
|
2017-10-06 12:23:49 +02:00
|
|
|
|
2020-02-06 12:54:26 +01:00
|
|
|
As of February 2020, we are deprecating support for Go 1.11 and Go 1.12 and are
|
|
|
|
now targeting Go 1.13 or later. Please ensure that you are using at least Go
|
|
|
|
1.13 when developing for Dendrite - our CI will lint and run tests against this
|
|
|
|
version.
|
|
|
|
|
2019-08-07 12:46:36 +02:00
|
|
|
## Continuous Integration
|
|
|
|
|
|
|
|
When a Pull Request is submitted, continuous integration jobs are run
|
2020-02-06 12:54:26 +01:00
|
|
|
automatically to ensure the code builds and is relatively well-written. The jobs
|
|
|
|
are run on [Buildkite](https://buildkite.com/matrix-dot-org/dendrite/), and the
|
|
|
|
Buildkite pipeline configuration can be found in Matrix.org's [pipelines
|
|
|
|
repository](https://github.com/matrix-org/pipelines).
|
2019-08-07 12:46:36 +02:00
|
|
|
|
|
|
|
If a job fails, click the "details" button and you should be taken to the job's
|
|
|
|
logs.
|
|
|
|
|
2020-02-06 12:54:26 +01:00
|
|
|
![Click the details button on the failing build
|
|
|
|
step](docs/images/details-button-location.jpg)
|
2019-08-07 12:46:36 +02:00
|
|
|
|
2020-02-06 12:54:26 +01:00
|
|
|
Scroll down to the failing step and you should see some log output. Scan the
|
|
|
|
logs until you find what it's complaining about, fix it, submit a new commit,
|
|
|
|
then rinse and repeat until CI passes.
|
2019-08-07 12:46:36 +02:00
|
|
|
|
|
|
|
### Running CI Tests Locally
|
|
|
|
|
|
|
|
To save waiting for CI to finish after every commit, it is ideal to run the
|
2020-02-06 12:54:26 +01:00
|
|
|
checks locally before pushing, fixing errors first. This also saves other people
|
|
|
|
time as only so many PRs can be tested at a given time.
|
2019-08-07 12:46:36 +02:00
|
|
|
|
2020-02-06 12:54:26 +01:00
|
|
|
To execute what Buildkite tests, first run `./scripts/build-test-lint.sh`; this
|
|
|
|
script will build the code, lint it, and run `go test ./...` with race condition
|
|
|
|
checking enabled. If something needs to be changed, fix it and then run the
|
|
|
|
script again until it no longer complains. Be warned that the linting can take a
|
|
|
|
significant amount of CPU and RAM.
|
2019-08-07 12:46:36 +02:00
|
|
|
|
2019-10-02 05:01:52 +02:00
|
|
|
Once the code builds, run [Sytest](https://github.com/matrix-org/sytest)
|
|
|
|
according to the guide in
|
2019-08-07 12:46:36 +02:00
|
|
|
[docs/sytest.md](https://github.com/matrix-org/dendrite/blob/master/docs/sytest.md#using-a-sytest-docker-image)
|
2019-10-02 05:01:52 +02:00
|
|
|
so you can see whether something is being broken and whether there are newly
|
|
|
|
passing tests.
|
|
|
|
|
|
|
|
If these two steps report no problems, the code should be able to pass the CI
|
|
|
|
tests.
|
2019-08-07 12:46:36 +02:00
|
|
|
|
2017-10-06 12:23:49 +02:00
|
|
|
|
2017-10-06 03:11:51 +02:00
|
|
|
## Picking Things To Do
|
|
|
|
|
2020-02-06 12:54:26 +01:00
|
|
|
If you're new then feel free to pick up an issue labelled [good first
|
|
|
|
issue](https://github.com/matrix-org/dendrite/labels/good%20first%20issue).
|
2017-10-06 03:11:51 +02:00
|
|
|
These should be well-contained, small pieces of work that can be picked up to
|
|
|
|
help you get familiar with the code base.
|
|
|
|
|
|
|
|
Once you're comfortable with hacking on Dendrite there are issues lablled as
|
2020-02-06 12:54:26 +01:00
|
|
|
[help wanted](https://github.com/matrix-org/dendrite/labels/help%20wanted),
|
|
|
|
these are often slightly larger or more complicated pieces of work but are
|
|
|
|
hopefully nonetheless fairly well-contained.
|
2017-10-06 03:11:51 +02:00
|
|
|
|
2020-02-06 12:54:26 +01:00
|
|
|
We ask people who are familiar with Dendrite to leave the [good first
|
|
|
|
issue](https://github.com/matrix-org/dendrite/labels/good%20first%20issue)
|
2017-10-06 03:11:51 +02:00
|
|
|
issues so that there is always a way for new people to come and get involved.
|
|
|
|
|
|
|
|
## Getting Help
|
|
|
|
|
|
|
|
For questions related to developing on Dendrite we have a dedicated room on
|
2019-01-28 11:15:33 +01:00
|
|
|
Matrix [#dendrite-dev:matrix.org](https://matrix.to/#/#dendrite-dev:matrix.org)
|
2017-10-06 03:11:51 +02:00
|
|
|
where we're happy to help.
|
|
|
|
|
2020-02-06 12:54:26 +01:00
|
|
|
For more general questions please use
|
|
|
|
[#dendrite:matrix.org](https://matrix.to/#/#dendrite:matrix.org).
|
2017-10-06 03:11:51 +02:00
|
|
|
|
|
|
|
## Sign off
|
|
|
|
|
|
|
|
We ask that everyone who contributes to the project signs off their
|
2020-02-06 12:54:26 +01:00
|
|
|
contributions, in accordance with the
|
|
|
|
[DCO](https://github.com/matrix-org/matrix-doc/blob/master/CONTRIBUTING.rst#sign-off).
|