|
| 1 | +# Project management |
| 2 | + |
| 3 | +> "No one can whistle a symphony; it takes a whole orchestra to play it" |
| 4 | +> |
| 5 | +> — Halford E. Luccock |
| 6 | +
|
| 7 | +This document outlines our project management processes for REST framework. |
| 8 | + |
| 9 | +The aim is to ensure that the project has a high |
| 10 | +["bus factor"][bus-factor], and can continue to remain well supported for the foreseeable future. Suggestions for improvements to our process are welcome. |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +## Maintenance team |
| 15 | + |
| 16 | +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. |
| 17 | + |
| 18 | +#### Current team |
| 19 | + |
| 20 | +The [maintenance team for Q1 2015](https://github.com/tomchristie/django-rest-framework/issues/2190): |
| 21 | + |
| 22 | +* [@tomchristie](https://github.com/tomchristie/) |
| 23 | +* [@xordoquy](https://github.com/xordoquy/) (Release manager.) |
| 24 | +* [@carltongibson](https://github.com/carltongibson/) |
| 25 | +* [@kevin-brown](https://github.com/kevin-brown/) |
| 26 | +* [@jpadilla](https://github.com/jpadilla/) |
| 27 | + |
| 28 | +#### Maintenance cycles |
| 29 | + |
| 30 | +Each maintenance cycle is initiated by an issue being opened with the `Process` label. |
| 31 | + |
| 32 | +* To be considered for a maintainer role simply comment against the issue. |
| 33 | +* Existing members must explicitly opt-in to the next cycle by check-marking their name. |
| 34 | +* The final decision on the incoming team will be made by `@tomchristie`. |
| 35 | + |
| 36 | +Members of the maintenance team will be added as collaborators to the repository. |
| 37 | + |
| 38 | +The following template should be used for the description of the issue, and serves as the formal process for selecting the team. |
| 39 | + |
| 40 | + This issue is for determining the maintenance team for the *** period. |
| 41 | + |
| 42 | + Please see the [Project management](http://www.django-rest-framework.org/topics/project-management/) section of our documentation for more details. |
| 43 | + |
| 44 | + --- |
| 45 | + |
| 46 | + #### Renewing existing members. |
| 47 | + |
| 48 | + 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. |
| 49 | + |
| 50 | + - [ ] @*** |
| 51 | + - [ ] @*** |
| 52 | + - [ ] @*** |
| 53 | + - [ ] @*** |
| 54 | + - [ ] @*** |
| 55 | + |
| 56 | + --- |
| 57 | + |
| 58 | + #### New members. |
| 59 | + |
| 60 | + If you wish to be considered for this or a future date, please comment against this or subsequent issues. |
| 61 | + |
| 62 | +#### Responsibilities of team members |
| 63 | + |
| 64 | +Team members have the following responsibilities. |
| 65 | + |
| 66 | +* Add triage labels and milestones to tickets. |
| 67 | +* Close invalid or resolved tickets. |
| 68 | +* Merge finalized pull requests. |
| 69 | +* Build and deploy the documentation, using `mkdocs gh-deploy`. |
| 70 | + |
| 71 | +Further notes for maintainers: |
| 72 | + |
| 73 | +* Code changes should come in the form of a pull request - do not push directly to master. |
| 74 | +* Maintainers should typically not merge their own pull requests. |
| 75 | +* Each issue/pull request should have exactly one label once triaged. |
| 76 | +* Search for un-triaged issues with [is:open no:label][un-triaged]. |
| 77 | + |
| 78 | +It should be noted that participating actively in the REST framework project clearly **does not require being part of the maintenance team**. Almost every import part of issue triage and project improvement can be actively worked on regardless of your collaborator status on the repository. |
| 79 | + |
| 80 | +--- |
| 81 | + |
| 82 | +## Release process |
| 83 | + |
| 84 | +The release manager is selected on every quarterly maintenance cycle. |
| 85 | + |
| 86 | +* The manager should be selected by `@tomchristie`. |
| 87 | +* The manager will then have the maintainer role added to PyPI package. |
| 88 | +* The previous manager will then have the maintainer role removed from the PyPI package. |
| 89 | + |
| 90 | +Our PyPI releases will be handled by either the current release manager, or by `@tomchristie`. Every release should have an open issue tagged with the `Release` label and marked against the appropriate milestone. |
| 91 | + |
| 92 | +The following template should be used for the description of the issue, and serves as a release checklist. |
| 93 | + |
| 94 | + Release manager is @***. |
| 95 | + Pull request is #***. |
| 96 | + |
| 97 | + Checklist: |
| 98 | + |
| 99 | + - [ ] 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/***). |
| 100 | + - [ ] 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). |
| 101 | + - [ ] Confirm with @tomchristie that release is finalized and ready to go. |
| 102 | + - [ ] Ensure that release date is included in pull request. |
| 103 | + - [ ] Merge the release pull request. |
| 104 | + - [ ] Push the package to PyPI with `./setup.py publish`. |
| 105 | + - [ ] Tag the release, with `git tag -a *.*.* -m 'version *.*.*'; git push --tags`. |
| 106 | + - [ ] Deploy the documentation with `mkdocs gh-deploy`. |
| 107 | + - [ ] Make a release announcement on the [discussion group](https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework). |
| 108 | + - [ ] Make a release announcement on twitter. |
| 109 | + - [ ] Close the milestone on GitHub. |
| 110 | + |
| 111 | +When pushing the release to PyPI ensure that your environment has been installed from our development `requirement.txt`, so that documentation and PyPI installs are consistently being built against a pinned set of packages. |
| 112 | + |
| 113 | +--- |
| 114 | + |
| 115 | +## Project ownership |
| 116 | + |
| 117 | +The PyPI package is owned by `@tomchristie`. As a backup `@j4mie` also has ownership of the package. |
| 118 | + |
| 119 | +If `@tomchristie` ceases to participate in the project then `@j4mie` has responsibility for handing over ownership duties. |
| 120 | + |
| 121 | +#### Outstanding management & ownership issues |
| 122 | + |
| 123 | +The following issues still need to be addressed: |
| 124 | + |
| 125 | +* [Consider moving the repo into a proper GitHub organization][github-org]. |
| 126 | +* Ensure `@jamie` has back-up access to the `django-rest-framework.org` domain setup and admin. |
| 127 | +* Document ownership of the [live example][sandbox] API. |
| 128 | +* Document ownership of the [mailing list][mailing-list] and IRC channel. |
| 129 | + |
| 130 | +[bus-factor]: http://en.wikipedia.org/wiki/Bus_factor |
| 131 | +[un-triaged]: https://github.com/tomchristie/django-rest-framework/issues?q=is%3Aopen+no%3Alabel |
| 132 | +[github-org]: https://github.com/tomchristie/django-rest-framework/issues/2162 |
| 133 | +[sandbox]: http://restframework.herokuapp.com/ |
| 134 | +[mailing-list]: https://groups.google.com/forum/#!forum/django-rest-framework |
0 commit comments