This document sets out the development processes for those contributing to the InterMine code base. It specifically refers to the main application code-base, but these practices should be employed in an ideal world on all code bases. This document is normative.
There is no distinction between the processes that developers should follow internally or externally - all code contributions, whether from core team members or outside contributers, should be treated the same.
There are branches in the InterMine GitHub repository with special meaning:
Development does not happen on any of the special branches. The recommended practice is to fork the intermine repo and maintain development branches in your own repository.
Code contributions should be discrete units of code. They should do one thing (be that fix a bug or add a feature) and not be code dumps. Ideally they should refer to existing issues in the InterMine issue tracker. Let’s say we want to develop a new feature - discussed in issue #12345: We should be better wombles and recyle everything - then we would do the following:
At any point in the above process you can merge switch to work on another branch and then come back. It is probably a good idea to regularly merge the head of intermine/dev into you/womblier, especially if development is taking a long time. These merges should probably be rebase merges.
Hot fix branches (serious bugs that are critical fixes to the current release) should be branched from master rather than dev, and their pull requests should likewise be for master.
The release manager’s role is to ensure this all happens. They are the only person permitted to push into master and stable and dev. All code contributions for these branches must pass review by the release manager before they can be merged.
The process for reviewing an merging a pull request is as follows:
- Passing unit test for new code (if applicable)
- Passes all tests – according to Travis
- Documentation (if applicable)
- Single purpose
[intermine repo]: https://github.com/intermine/intermine