<p>"No one can whistle a symphony; it takes a whole orchestra to play it"</p>
<p>— Halford E. Luccock</p>
</blockquote>
<p>This document outlines our project management processes for REST framework.</p>
<p>The aim is to ensure that the project has a high
<ahref="http://en.wikipedia.org/wiki/Bus_factor">"bus factor"</a>, and can continue to remain well supported for the foreseeable future. Suggestions for improvements to our process are welcome.</p>
<hr/>
<h2id="maintenance-team">Maintenance team</h2>
<p>We have a quarterly maintenance cycle where new members may join the maintenance team. We currently cap the size of the team at 5 members, and may encourage folks to step out of the team for a cycle to allow new members to participate.</p>
<h4id="current-team">Current team</h4>
<p>The <ahref="https://github.com/tomchristie/django-rest-framework/issues/2190">maintenance team for Q1 2015</a>:</p>
<p>Each maintenance cycle is initiated by an issue being opened with the <code>Process</code> label.</p>
<ul>
<li>To be considered for a maintainer role simply comment against the issue.</li>
<li>Existing members must explicitly opt-in to the next cycle by check-marking their name.</li>
<li>The final decision on the incoming team will be made by <code>@tomchristie</code>.</li>
</ul>
<p>Members of the maintenance team will be added as collaborators to the repository.</p>
<p>The following template should be used for the description of the issue, and serves as the formal process for selecting the team.</p>
<pre><code>This issue is for determining the maintenance team for the *** period.
Please see the [Project management](http://www.django-rest-framework.org/topics/project-management/) section of our documentation for more details.
---
#### Renewing existing members.
The following people are the current maintenance team. Please checkmark your name if you wish to continue to have write permission on the repository for the *** period.
- [ ] @***
- [ ] @***
- [ ] @***
- [ ] @***
- [ ] @***
---
#### New members.
If you wish to be considered for this or a future date, please comment against this or subsequent issues.
To modify this process for future maintenance cycles make a pull request to the [project management](http://www.django-rest-framework.org/topics/project-management/) documentation.
<h4id="responsibilities-of-team-members">Responsibilities of team members</h4>
<p>Team members have the following responsibilities.</p>
<ul>
<li>Add triage labels and milestones to tickets.</li>
<li>Close invalid or resolved tickets.</li>
<li>Merge finalized pull requests.</li>
<li>Build and deploy the documentation, using <code>mkdocs gh-deploy</code>.</li>
</ul>
<p>Further notes for maintainers:</p>
<ul>
<li>Code changes should come in the form of a pull request - do not push directly to master.</li>
<li>Maintainers should typically not merge their own pull requests.</li>
<li>Each issue/pull request should have exactly one label once triaged.</li>
<li>Search for un-triaged issues with <ahref="https://github.com/tomchristie/django-rest-framework/issues?q=is%3Aopen+no%3Alabel">is:open no:label</a>.</li>
</ul>
<p>It should be noted that participating actively in the REST framework project clearly <strong>does not require being part of the maintenance team</strong>. Almost every import part of issue triage and project improvement can be actively worked on regardless of your collaborator status on the repository.</p>
<hr/>
<h2id="release-process">Release process</h2>
<p>The release manager is selected on every quarterly maintenance cycle.</p>
<ul>
<li>The manager should be selected by <code>@tomchristie</code>.</li>
<li>The manager will then have the maintainer role added to PyPI package.</li>
<li>The previous manager will then have the maintainer role removed from the PyPI package.</li>
</ul>
<p>Our PyPI releases will be handled by either the current release manager, or by <code>@tomchristie</code>. Every release should have an open issue tagged with the <code>Release</code> label and marked against the appropriate milestone.</p>
<p>The following template should be used for the description of the issue, and serves as a release checklist.</p>
<pre><code>Release manager is @***.
Pull request is #***.
Checklist:
- [ ] Create pull request for [release notes](https://github.com/tomchristie/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/tomchristie/django-rest-framework/milestones/***).
- [ ] Ensure the pull request increments the version to `*.*.*` in [`restframework/__init__.py`](https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/__init__.py).
- [ ] Confirm with @tomchristie that release is finalized and ready to go.
- [ ] Ensure that release date is included in pull request.
- [ ] Merge the release pull request.
- [ ] Push the package to PyPI with `./setup.py publish`.
- [ ] Tag the release, with `git tag -a *.*.* -m 'version *.*.*'; git push --tags`.
- [ ] Deploy the documentation with `mkdocs gh-deploy`.
- [ ] Make a release announcement on the [discussion group](https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework).
To modify this process for future releases make a pull request to the [project management](http://www.django-rest-framework.org/topics/project-management/) documentation.
<p>When pushing the release to PyPI ensure that your environment has been installed from our development <code>requirement.txt</code>, so that documentation and PyPI installs are consistently being built against a pinned set of packages.</p>
<hr/>
<h2id="project-ownership">Project ownership</h2>
<p>The PyPI package is owned by <code>@tomchristie</code>. As a backup <code>@j4mie</code> also has ownership of the package.</p>
<p>If <code>@tomchristie</code> ceases to participate in the project then <code>@j4mie</code> has responsibility for handing over ownership duties.</p>
<h4id="outstanding-management-ownership-issues">Outstanding management & ownership issues</h4>
<p>The following issues still need to be addressed:</p>
<ul>
<li><ahref="https://github.com/tomchristie/django-rest-framework/issues/2162">Consider moving the repo into a proper GitHub organization</a>.</li>
<li>Ensure <code>@jamie</code> has back-up access to the <code>django-rest-framework.org</code> domain setup and admin.</li>
<li>Document ownership of the <ahref="http://restframework.herokuapp.com/">live example</a> API.</li>
<li>Document ownership of the <ahref="https://groups.google.com/forum/#!forum/django-rest-framework">mailing list</a> and IRC channel.</li>