Here you’ll find description of the development tools we use.
Mopidy uses the free service Travis CI for automatically running the test suite when code is pushed to GitHub. This works both for the main Mopidy repo, but also for any forks. This way, any contributions to Mopidy through GitHub will automatically be tested by Travis CI, and the build status will be visible in the GitHub pull request interface, making it easier to evaluate the quality of pull requests.
In addition, we run a Jenkins CI server at http://ci.mopidy.com/ that runs all
test on multiple platforms (Ubuntu, OS X, x86, arm) for every commit we push to
develop branch in the main Mopidy repo on GitHub. Thus, new code isn’t
tested by Jenkins before it is merged into the
develop branch, which is a
bit late, but good enough to get broad testing before new code is released.
In addition to running tests, the Jenkins CI server also gathers coverage statistics and uses flake8 to check for errors and possible improvements in our code. So, if you’re out of work, the code coverage and flake8 data at the CI server should give you a place to start.
To write documentation, we use Sphinx. See their site for lots of documentation on how to use Sphinx. To generate HTML from the documentation files, you need some additional dependencies.
You can install them through Debian/Ubuntu package management:
sudo apt-get install python-sphinx python-pygraphviz graphviz
Then, to generate docs:
cd docs/ make # For help on available targets make html # To generate HTML docs
The documentation at http://docs.mopidy.com/ is automatically updated when a
documentation update is pushed to
mopidy/mopidy at GitHub.
Update changelog and commit it.
Bump the version number in
mopidy/__init__.py. Remember to update the test case in
Merge the release branch (
developin the example) into master:
git checkout master git merge --no-ff -m "Release v0.16.0" develop
Install/upgrade tools used for packaging:
pip install -U twine wheel
Build package and test it manually in a new virtualenv. The following assumes the use of virtualenvwrapper:
python setup.py sdist bdist_wheel mktmpenv pip install path/to/dist/Mopidy-0.16.0.tar.gz toggleglobalsitepackages # do manual test deactivate mktmpenv pip install path/to/dist/Mopidy-0.16.0-py27-none-any.whl toggleglobalsitepackages # do manual test deactivate
Tag the release:
git tag -a -m "Release v0.16.0" v0.16.0
Push to GitHub:
git push git push --tags
Upload the previously built and tested sdist and bdist_wheel packages to PyPI:
twine upload dist/Mopidy-0.16.0*
developand push the branch to GitHub.
Make sure the new tag is built by Read the Docs, and that the
latestversion shows the newly released version.
Spread the word through the topic on #mopidy on IRC, @mopidy on Twitter, and on the mailing list.
Update the Debian package.
Updating Debian packages¶
This howto is not intended to learn you all the details, just to give someone already familiar with Debian packaging an overview of how Mopidy’s Debian packages is maintained.
Install the basic packaging tools:
sudo apt-get install build-essential git-buildpackage
Create a Wheezy pbuilder env if running on Ubuntu and this the first time. See #561 for details about why this is needed:
DIST=wheezy sudo git-pbuilder update --mirror=http://mirror.rackspace.com/debian/ --debootstrapopts --keyring=/usr/share/keyrings/debian-archive-keyring.gpg
Check out the
debianbranch of the repo:
git checkout -t origin/debian git pull
Merge the latest release tag into the
git merge v0.16.0
debian/changelogwith a “New upstream release” entry:
dch -v 0.16.0-0mopidy1 git add debian/changelog git commit -m "debian: New upstream release"
Check if any dependencies in
debian/controlor similar needs updating.
Install any Build-Deps listed in
Build the package and fix any issues repeatedly until the build succeeds and the Lintian check at the end of the build is satisfactory:
git buildpackage -uc -us
If you are using the pbuilder make sure this command is:
sudo git buildpackage -uc -us --git-ignore-new --git-pbuilder --git-dist=wheezy --git-no-pbuilder-autoconf
Install and test newly built package:
Again for pbuilder use:
sudo debi --debs-dir /var/cache/pbuilder/result/
If everything is OK, build the package a final time to tag the package version:
git buildpackage -uc -us --git-tag
sudo git buildpackage -uc -us --git-ignore-new --git-pbuilder --git-dist=wheezy --git-no-pbuilder-autoconf --git-tag
Push the changes you’ve done to the
debianbranch and the new tag:
git push git push --tags
If you’re building for multiple architectures, checkout the
debianbranch on the other builders and run:
git buildpackage -uc -us
Modify as above to use the pbuilder as needed.
Copy files to the APT server. Make sure to select the correct part of the repo, e.g. main, contrib, or non-free:
scp ../mopidy*_0.16* bonobo.mopidy.com:/srv/apt.mopidy.com/app/incoming/stable/main
Update the APT repo:
ssh bonobo.mopidy.com /srv/apt.mopidy.com/app/update.sh
Test installation from apt.mopidy.com:
sudo apt-get update sudo apt-get dist-upgrade