How to contribute

Code

Linting

We use flake8 python module to enforce a consistent style in the CI.

Testing

Unit testing. For Python we use the pytest module and alternate between unittest and pytest syntax. For Matlab we use the embedded test framework.

Continuous Integration

For production repositories such as ibllib and alyx, continuous integration is set on Travis to install the application and run the tests on pull request.

Contributions and releases

Contributions and code review

The branches develop and master are protected.

Contributions are developed either:

  • on a separate branch

  • on a separate fork of the repository

and then merged in develop through a pull request.

Practical tips:

  • to avoid merge conflicts merge develop into your branch (or rebase your branch) before submitting the PR !

  • make sure your branch passes tests:

    • before pushing by running unit tests and flake8 locally

    • after pushing looking at continuous integration results on Github

  • go through the review process with maintainers on the pull request interface on GitHub. Remind them if not done in a timely manner. Github sends them a bazillion emails daily.

Branching model: gitflow

Branching model as close as possible to gitflow, i.e. one master branch with every commit tagged with a version number: one develop branch to integrate the different volatile feature branches. Both develop and master should pass CI tests

Releasing scheme: semantic versioning

If any releasing scheme (such as ibllib), we use semantic versioning using the major.minor.micro or major.minor.patch model. patch/micro for bugfixes; minor for augmented functionality; major for retrocompatibility breaks. Version 0.. are developing versions w/ no guarantee of retrocompatibility.

It is a good practice to document the changes in a RELEASE_NOTES.md document at the root of the repository.
NB: those notes should be geared towards users not other fellow contributors.