/usr/share/doc/mopidy-doc/html/devtools.html is in mopidy-doc 0.17.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Development tools — Mopidy 0.17.0 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '0.17.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="Mopidy 0.17.0 documentation" href="index.html" />
<link rel="next" title="Code style" href="codestyle.html" />
<link rel="prev" title="Contributing" href="contributing.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="codestyle.html" title="Code style"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="contributing.html" title="Contributing"
accesskey="P">previous</a> |</li>
<li><a href="index.html">Mopidy 0.17.0 documentation</a> »</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="development-tools">
<h1>Development tools<a class="headerlink" href="#development-tools" title="Permalink to this headline">¶</a></h1>
<p>Here you’ll find description of the development tools we use.</p>
<div class="section" id="continuous-integration">
<h2>Continuous integration<a class="headerlink" href="#continuous-integration" title="Permalink to this headline">¶</a></h2>
<p>Mopidy uses the free service <a class="reference external" href="https://travis-ci.org/mopidy/mopidy">Travis CI</a>
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.</p>
<p>In addition, we run a Jenkins CI server at <a class="reference external" href="http://ci.mopidy.com/">http://ci.mopidy.com/</a> that runs all
test on multiple platforms (Ubuntu, OS X, x86, arm) for every commit we push to
the <tt class="docutils literal"><span class="pre">develop</span></tt> branch in the main Mopidy repo on GitHub. Thus, new code isn’t
tested by Jenkins before it is merged into the <tt class="docutils literal"><span class="pre">develop</span></tt> branch, which is a
bit late, but good enough to get broad testing before new code is released.</p>
<p>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.</p>
</div>
<div class="section" id="protocol-debugger">
<h2>Protocol debugger<a class="headerlink" href="#protocol-debugger" title="Permalink to this headline">¶</a></h2>
<p>Since the main interface provided to Mopidy is through the MPD protocol, it is
crucial that we try and stay in sync with protocol developments. In an attempt
to make it easier to debug differences Mopidy and MPD protocol handling we have
created <tt class="docutils literal"><span class="pre">tools/debug-proxy.py</span></tt>.</p>
<p>This tool is proxy that sits in front of two MPD protocol aware servers and
sends all requests to both, returning the primary response to the client and
then printing any diff in the two responses.</p>
<p>Note that this tool depends on <tt class="docutils literal"><span class="pre">gevent</span></tt> unlike the rest of Mopidy at the time
of writing. See <em class="xref std std-option">tools/debug-proxy.py --help</em> for available options.
Sample session:</p>
<div class="highlight-python"><pre>[127.0.0.1]:59714
listallinfo
--- Reference response
+++ Actual response
@@ -1,16 +1,1 @@
-file: uri1
-Time: 4
-Artist: artist1
-Title: track1
-Album: album1
-file: uri2
-Time: 4
-Artist: artist2
-Title: track2
-Album: album2
-file: uri3
-Time: 4
-Artist: artist3
-Title: track3
-Album: album3
-OK
+ACK [2@0] {listallinfo} incorrect arguments</pre>
</div>
<p>To ensure that Mopidy and MPD have comparable state it is suggested you setup
both to use <tt class="docutils literal"><span class="pre">tests/data/advanced_tag_cache</span></tt> for their tag cache and
<tt class="docutils literal"><span class="pre">tests/data/scanner/advanced/</span></tt> for the music folder and <tt class="docutils literal"><span class="pre">tests/data</span></tt> for
playlists.</p>
</div>
<div class="section" id="documentation-writing">
<h2>Documentation writing<a class="headerlink" href="#documentation-writing" title="Permalink to this headline">¶</a></h2>
<p>To write documentation, we use <a class="reference external" href="http://sphinx-doc.org/">Sphinx</a>. See their
site for lots of documentation on how to use Sphinx. To generate HTML from the
documentation files, you need some additional dependencies.</p>
<p>You can install them through Debian/Ubuntu package management:</p>
<div class="highlight-python"><pre>sudo apt-get install python-sphinx python-pygraphviz graphviz</pre>
</div>
<p>Then, to generate docs:</p>
<div class="highlight-python"><pre>cd docs/
make # For help on available targets
make html # To generate HTML docs</pre>
</div>
<p>The documentation at <a class="reference external" href="http://docs.mopidy.com/">http://docs.mopidy.com/</a> is automatically updated when a
documentation update is pushed to <tt class="docutils literal"><span class="pre">mopidy/mopidy</span></tt> at GitHub.</p>
</div>
<div class="section" id="creating-releases">
<h2>Creating releases<a class="headerlink" href="#creating-releases" title="Permalink to this headline">¶</a></h2>
<ol class="arabic">
<li><p class="first">Update changelog and commit it.</p>
</li>
<li><p class="first">Bump the version number in <tt class="docutils literal"><span class="pre">mopidy/__init__.py</span></tt>. Remember to update the
test case in <tt class="docutils literal"><span class="pre">tests/version_test.py</span></tt>.</p>
</li>
<li><p class="first">Merge the release branch (<tt class="docutils literal"><span class="pre">develop</span></tt> in the example) into master:</p>
<div class="highlight-python"><pre>git checkout master
git merge --no-ff -m "Release v0.16.0" develop</pre>
</div>
</li>
<li><p class="first">Build package and test it manually in a new virtualenv. The following
assumes the use of virtualenvwrapper:</p>
<div class="highlight-python"><pre>python setup.py sdist
mktmpenv
pip install path/to/dist/Mopidy-0.16.0.tar.gz
toggleglobalsitepackages</pre>
</div>
<p>Then test Mopidy manually to confirm that the package is working correctly.</p>
</li>
<li><p class="first">Tag the release:</p>
<div class="highlight-python"><pre>git tag -a -m "Release v0.16.0" v0.16.0</pre>
</div>
</li>
<li><p class="first">Push to GitHub:</p>
<div class="highlight-python"><pre>git push
git push --tags</pre>
</div>
</li>
<li><p class="first">Build source package and upload to PyPI:</p>
<div class="highlight-python"><pre>python setup.py sdist upload</pre>
</div>
</li>
<li><p class="first">Build wheel package and upload to PyPI:</p>
<div class="highlight-python"><pre>pip install -U wheel
python setup.py bdist_wheel upload</pre>
</div>
</li>
<li><p class="first">Merge <tt class="docutils literal"><span class="pre">master</span></tt> back into <tt class="docutils literal"><span class="pre">develop</span></tt> and push the branch to GitHub.</p>
</li>
<li><p class="first">Make sure the new tag is built by Read the Docs, and that the <tt class="docutils literal"><span class="pre">latest</span></tt>
version shows the newly released version.</p>
</li>
<li><p class="first">Spread the word through the topic on #mopidy on IRC, @mopidy on Twitter, and
on the mailing list.</p>
</li>
<li><p class="first">Update the Debian package.</p>
</li>
</ol>
</div>
<div class="section" id="updating-debian-packages">
<h2>Updating Debian packages<a class="headerlink" href="#updating-debian-packages" title="Permalink to this headline">¶</a></h2>
<p>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.</p>
<ol class="arabic">
<li><p class="first">Install the basic packaging tools:</p>
<div class="highlight-python"><pre>sudo apt-get install build-essential git-buildpackage</pre>
</div>
</li>
<li><p class="first">Check out the <tt class="docutils literal"><span class="pre">debian</span></tt> branch of the repo:</p>
<div class="highlight-python"><pre>git checkout -t origin/debian
git pull</pre>
</div>
</li>
<li><p class="first">Merge the latest release tag into the <tt class="docutils literal"><span class="pre">debian</span></tt> branch:</p>
<div class="highlight-python"><pre>git merge v0.16.0</pre>
</div>
</li>
<li><p class="first">Update the <tt class="docutils literal"><span class="pre">debian/changelog</span></tt> with a “New upstream release” entry:</p>
<div class="highlight-python"><pre>dch -v 0.16.0-0mopidy1
git add debian/changelog
git commit -m "debian: New upstream release"</pre>
</div>
</li>
<li><p class="first">Check if any dependencies in <tt class="docutils literal"><span class="pre">debian/control</span></tt> or similar needs updating.</p>
</li>
<li><p class="first">Install any Build-Deps listed in <tt class="docutils literal"><span class="pre">debian/control</span></tt>.</p>
</li>
<li><p class="first">Build the package and fix any issues repeatedly until the build succeeds and
the Lintian check at the end of the build is satisfactory:</p>
<div class="highlight-python"><pre>git buildpackage -uc -us</pre>
</div>
</li>
<li><p class="first">Install and test newly built package:</p>
<div class="highlight-python"><pre>sudo debi</pre>
</div>
</li>
<li><p class="first">If everything is OK, build the package a final time to tag the package
version:</p>
<div class="highlight-python"><pre>git buildpackage -uc -us --git-tag</pre>
</div>
</li>
<li><p class="first">Push the changes you’ve done to the <tt class="docutils literal"><span class="pre">debian</span></tt> branch and the new tag:</p>
<div class="highlight-python"><pre>git push
git push --tags</pre>
</div>
</li>
<li><p class="first">If you’re building for multiple architectures, checkout the <tt class="docutils literal"><span class="pre">debian</span></tt>
branch on the other builders and run:</p>
<div class="highlight-python"><pre>git buildpackage -uc -us</pre>
</div>
</li>
<li><p class="first">Copy files to the APT server. Make sure to select the correct part of the
repo, e.g. main, contrib, or non-free:</p>
<div class="highlight-python"><pre>scp ../mopidy*_0.16* bonobo.mopidy.com:/srv/apt.mopidy.com/app/incoming/stable/main</pre>
</div>
</li>
<li><p class="first">Update the APT repo:</p>
<div class="highlight-python"><pre>ssh bonobo.mopidy.com
/srv/apt.mopidy.com/app/update.sh</pre>
</div>
</li>
<li><p class="first">Test installation from apt.mopidy.com:</p>
<div class="highlight-python"><pre>sudo apt-get update
sudo apt-get dist-upgrade</pre>
</div>
</li>
</ol>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Development tools</a><ul>
<li><a class="reference internal" href="#continuous-integration">Continuous integration</a></li>
<li><a class="reference internal" href="#protocol-debugger">Protocol debugger</a></li>
<li><a class="reference internal" href="#documentation-writing">Documentation writing</a></li>
<li><a class="reference internal" href="#creating-releases">Creating releases</a></li>
<li><a class="reference internal" href="#updating-debian-packages">Updating Debian packages</a></li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="contributing.html"
title="previous chapter">Contributing</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="codestyle.html"
title="next chapter">Code style</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/devtools.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="codestyle.html" title="Code style"
>next</a> |</li>
<li class="right" >
<a href="contributing.html" title="Contributing"
>previous</a> |</li>
<li><a href="index.html">Mopidy 0.17.0 documentation</a> »</li>
</ul>
</div>
<div class="footer">
© Copyright 2009-2013, Stein Magnus Jodal and contributors.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.
</div>
</body>
</html>
|