.. Titling ##++::==~~--''`` Notes for developers :::::::::::::::::::: Git workflow ============ Challenges ~~~~~~~~~~ * The Maloja software is stored in an online git repository * Project partners have different aspirations and intentions for the codebase * Some code implements the site-specific behaviour of a project partner Best practice ~~~~~~~~~~~~~ There are several documented processes for working with git in a collaborative environment. Each of them recommends strategies for branching, adding features, and merging. Of these, the Branch Per Feature (BPF) model represents a well-evolved good fit for our purposes, based on the challenges stated above. `BPF explained here`_. Your responsibility as a developer ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The code you write for your own project is your own affair. Your responsibility to others begins when you contribute it to a shared repository. Git is hard to use in this environment without making mistakes. The attitudes we recommend are: * humble in the face of complexity * respectful of the intentions of others * meticulous in testing your product The very first thing you should do now is `read this description of the workflow`_ so that you can start to familiarise yourself with the process. It may take a while to assimilate. Summary of workflow ~~~~~~~~~~~~~~~~~~~ * The master branch contains the last known good release. * Create a single Git ticket to represent your feature release. * Create a git feature branch in the repository. Name the branch after the ticket, eg: issue_0123_short_description_follows. * Developers regularly create an `integration` branch from master to check that upcoming features can be merged cleanly from their branches. * We capture integration issues in the Git ticket for each feature. Discussion between partners goes here. * Optionally: record any merge conflict resolution using `git rerere` and commit to ``maloja/git/rerere`` cache. * When a feature set is agreed for release, a `qa` branch is created from master and has features merged into it. * QA team tests the `qa` branch in Reference environment. * When `qa` branch is good it is merged into master and deployed to Production. Uninstalling Maloja =================== To eliminate the install process from your development cycle, it's preferable to perform these tasks with Maloja *uninstalled*: * `Running unit tests`_ * `Building documentation`_ * `Running PEP8`_ On Ubuntu Linux 14.04:: $ ~/py3.4/bin/pip uninstall -y maloja On Windows 8.1:: > %USERPROFILE%\py3.5\Scripts\pip uninstall -y maloja Running unit tests ================== On Ubuntu Linux 14.04:: $ ~/py3.4/bin/python -m unittest discover maloja On Windows 8.1:: > %USERPROFILE%\py3.5\Scripts\python -m unittest discover maloja Building documentation ====================== Maloja's documentation is maintained in reStructuredText_. You can compile it to HTML using the Sphinx tools. On Ubuntu Linux 14.04:: $ ~/py3.4/bin/sphinx-build maloja/doc maloja/doc/html On Windows 8.1:: > %USERPROFILE%\py3.5\Scripts\sphinx-build maloja\doc maloja\doc\html Read the documentation in your browser:: firefox maloja/doc/html/index.html Running PEP8 ============ On Ubuntu Linux 14.04:: $ ~/py3.4/bin/pep8 . On Windows 8.1:: > %USERPROFILE%\py3.5\Scripts\pep8 . .. _BPF explained here: https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow .. _read this description of the workflow: https://www.acquia.com/blog/pragmatic-guide-branch-feature-git-branching-strategy .. _reStructuredText: http://docutils.sourceforge.net/rst.html