Waterbutler uses semantic versioning <major>.<minor>.<patch>
- Patches are reserved for hotfixes only
- Minor versions are for adding new functionality or fields
- Minor versions will not contain breaking changes to the existing API
- Any changes must be backwards compatible
- Major versions may contain breaking changes to the existing API
- Ideally REST endpoints will be versioned, ie
/.../v<major>/...
- Ideally REST endpoints will be versioned, ie
Waterbutler conforms to the git flow work flow In brief this means
- Feature branches should be branched off of develop or a release branch
- Before submitting a pull request re-merge the source branch
- Do not merge develop if you are working of a release branch and visa versa
- Hotfixes are to be branched off master
- Hotfix PR should be names hotfix/brief-description
- Use
-
's for spaces not_
's - A hotfix for an issue involving figshare metadata when empty lists are returned would be
hotfix/figshare-metadata-empty
- Use
- When hotfixes are merged a new branch will be created bumping the minor version ie
hotfix/0.1.3
and the other PR will be merged into it
- Hotfix PR should be names hotfix/brief-description
Waterbutler expects pretty pull request, clean commit histories and meaningful commit messages
- Make sure to rebase,
git rebase -i <commitsha>
, to remove pointless commits- Pointless commits include but are not limited to
- Fix flake errors
- Fix typo
- Fix test
- etc
- Pointless commits include but are not limited to
- Follow the guide lines for commit message in the above
- Don't worry about new lines between bullet points
All Waterbutler code must pass flake8 linting
- Max line is set to 100 characters
- Tests are not linted, but don't be terrible
Imports are should be ordered in pep8 style but ordered by line length
import abc
import asyncio
import itertools
from urllib import parse
import furl
import aiohttp
from waterbutler.core import streams
from waterbutler.core import exceptions
# Not
import abc
import asyncio
import itertools
from urllib import parse
import aiohttp
import furl
from waterbutler.core import exceptions
from waterbutler.core import streams
Other general guide lines
- Keep it simple and readable
- Do not use synchronous 3rd party libraries
- If you don't need
**kwargs
don't use it - Docstrings and comments make everything better
- Avoid single letter variable names outside of comprehensions
- Write tests