# 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.