| ============================ |
| Contribution getting started |
| ============================ |
| |
| Contributions are highly welcomed and appreciated. Every little help counts, |
| so do not hesitate! |
| |
| .. contents:: Contribution links |
| :depth: 2 |
| |
| |
| .. _submitfeedback: |
| |
| Feature requests and feedback |
| ----------------------------- |
| |
| Do you like pytest? Share some love on Twitter or in your blog posts! |
| |
| We'd also like to hear about your propositions and suggestions. Feel free to |
| `submit them as issues <https://github.com/pytest-dev/pytest/issues>`_ and: |
| |
| * Explain in detail how they should work. |
| * Keep the scope as narrow as possible. This will make it easier to implement. |
| |
| |
| .. _reportbugs: |
| |
| Report bugs |
| ----------- |
| |
| Report bugs for pytest in the `issue tracker <https://github.com/pytest-dev/pytest/issues>`_. |
| |
| If you are reporting a bug, please include: |
| |
| * Your operating system name and version. |
| * Any details about your local setup that might be helpful in troubleshooting, |
| specifically Python interpreter version, |
| installed libraries and pytest version. |
| * Detailed steps to reproduce the bug. |
| |
| If you can write a demonstration test that currently fails but should pass (xfail), |
| that is a very useful commit to make as well, even if you can't find how |
| to fix the bug yet. |
| |
| |
| .. _fixbugs: |
| |
| Fix bugs |
| -------- |
| |
| Look through the GitHub issues for bugs. Here is sample filter you can use: |
| https://github.com/pytest-dev/pytest/labels/bug |
| |
| :ref:`Talk <contact>` to developers to find out how you can fix specific bugs. |
| |
| Don't forget to check the issue trackers of your favourite plugins, too! |
| |
| .. _writeplugins: |
| |
| Implement features |
| ------------------ |
| |
| Look through the GitHub issues for enhancements. Here is sample filter you |
| can use: |
| https://github.com/pytest-dev/pytest/labels/enhancement |
| |
| :ref:`Talk <contact>` to developers to find out how you can implement specific |
| features. |
| |
| Write documentation |
| ------------------- |
| |
| pytest could always use more documentation. What exactly is needed? |
| |
| * More complementary documentation. Have you perhaps found something unclear? |
| * Documentation translations. We currently have only English. |
| * Docstrings. There can never be too many of them. |
| * Blog posts, articles and such -- they're all very appreciated. |
| |
| You can also edit documentation files directly in the Github web interface |
| without needing to make a fork and local copy. This can be convenient for |
| small fixes. |
| |
| |
| .. _submitplugin: |
| |
| Submitting Plugins to pytest-dev |
| -------------------------------- |
| |
| Pytest development of the core, some plugins and support code happens |
| in repositories living under the ``pytest-dev`` organisations: |
| |
| - `pytest-dev on GitHub <https://github.com/pytest-dev>`_ |
| |
| - `pytest-dev on Bitbucket <https://bitbucket.org/pytest-dev>`_ |
| |
| All pytest-dev Contributors team members have write access to all contained |
| repositories. pytest core and plugins are generally developed |
| using `pull requests`_ to respective repositories. |
| |
| The objectives of the ``pytest-dev`` organisation are: |
| |
| * Having a central location for popular pytest plugins |
| * Sharing some of the maintenance responsibility (in case a maintainer no longer whishes to maintain a plugin) |
| |
| You can submit your plugin by subscribing to the `pytest-dev mail list |
| <https://mail.python.org/mailman/listinfo/pytest-dev>`_ and writing a |
| mail pointing to your existing pytest plugin repository which must have |
| the following: |
| |
| - PyPI presence with a ``setup.py`` that contains a license, ``pytest-`` |
| prefixed name, version number, authors, short and long description. |
| |
| - a ``tox.ini`` for running tests using `tox <http://tox.testrun.org>`_. |
| |
| - a ``README.txt`` describing how to use the plugin and on which |
| platforms it runs. |
| |
| - a ``LICENSE.txt`` file or equivalent containing the licensing |
| information, with matching info in ``setup.py``. |
| |
| - an issue tracker for bug reports and enhancement requests. |
| |
| If no contributor strongly objects and two agree, the repository can then be |
| transferred to the ``pytest-dev`` organisation. |
| |
| Here's a rundown of how a repository transfer usually proceeds |
| (using a repository named ``joedoe/pytest-xyz`` as example): |
| |
| * One of the ``pytest-dev`` administrators creates: |
| |
| - ``pytest-xyz-admin`` team, with full administration rights to |
| ``pytest-dev/pytest-xyz``. |
| - ``pytest-xyz-developers`` team, with write access to |
| ``pytest-dev/pytest-xyz``. |
| |
| * ``joedoe`` is invited to the ``pytest-xyz-admin`` team; |
| |
| * After accepting the invitation, ``joedoe`` transfers the repository from its |
| original location to ``pytest-dev/pytest-xyz`` (A nice feature is that GitHub handles URL redirection from |
| the old to the new location automatically). |
| |
| * ``joedoe`` is free to add any other collaborators to the |
| ``pytest-xyz-admin`` or ``pytest-xyz-developers`` team as desired. |
| |
| The ``pytest-dev/Contributors`` team has write access to all projects, and |
| every project administrator is in it. We recommend that each plugin has at least three |
| people who have the right to release to PyPI. |
| |
| Repository owners can be assured that no ``pytest-dev`` administrator will ever make |
| releases of your repository or take ownership in any way, except in rare cases |
| where someone becomes unresponsive after months of contact attempts. |
| As stated, the objective is to share maintenance and avoid "plugin-abandon". |
| |
| |
| .. _`pull requests`: |
| .. _pull-requests: |
| |
| Preparing Pull Requests on GitHub |
| --------------------------------- |
| |
| There's an excellent tutorial on how Pull Requests work in the |
| `GitHub Help Center <https://help.github.com/articles/using-pull-requests/>`_ |
| |
| |
| .. note:: |
| What is a "pull request"? It informs project's core developers about the |
| changes you want to review and merge. Pull requests are stored on |
| `GitHub servers <https://github.com/pytest-dev/pytest/pulls>`_. |
| Once you send pull request, we can discuss it's potential modifications and |
| even add more commits to it later on. |
| |
| There's an excellent tutorial on how Pull Requests work in the |
| `GitHub Help Center <https://help.github.com/articles/using-pull-requests/>`_, |
| but here is a simple overview: |
| |
| #. Fork the |
| `pytest GitHub repository <https://github.com/pytest-dev/pytest>`__. It's |
| fine to use ``pytest`` as your fork repository name because it will live |
| under your user. |
| |
| #. Clone your fork locally using `git <https://git-scm.com/>`_ and create a branch:: |
| |
| $ git clone git@github.com:YOUR_GITHUB_USERNAME/pytest.git |
| $ cd pytest |
| # now, to fix a bug create your own branch off "master": |
| |
| $ git checkout -b your-bugfix-branch-name master |
| |
| # or to instead add a feature create your own branch off "features": |
| |
| $ git checkout -b your-feature-branch-name features |
| |
| Given we have "major.minor.micro" version numbers, bugfixes will usually |
| be released in micro releases whereas features will be released in |
| minor releases and incompatible changes in major releases. |
| |
| If you need some help with Git, follow this quick start |
| guide: https://git.wiki.kernel.org/index.php/QuickStart |
| |
| #. Install tox |
| |
| Tox is used to run all the tests and will automatically setup virtualenvs |
| to run the tests in. |
| (will implicitly use http://www.virtualenv.org/en/latest/):: |
| |
| $ pip install tox |
| |
| #. Run all the tests |
| |
| You need to have Python 2.7 and 3.5 available in your system. Now |
| running tests is as simple as issuing this command:: |
| |
| $ python runtox.py -e linting,py27,py35 |
| |
| This command will run tests via the "tox" tool against Python 2.7 and 3.5 |
| and also perform "lint" coding-style checks. ``runtox.py`` is |
| a thin wrapper around ``tox`` which installs from a development package |
| index where newer (not yet released to pypi) versions of dependencies |
| (especially ``py``) might be present. |
| |
| #. You can now edit your local working copy. |
| |
| You can now make the changes you want and run the tests again as necessary. |
| |
| To run tests on py27 and pass options to pytest (e.g. enter pdb on failure) |
| to pytest you can do:: |
| |
| $ python runtox.py -e py27 -- --pdb |
| |
| or to only run tests in a particular test module on py35:: |
| |
| $ python runtox.py -e py35 -- testing/test_config.py |
| |
| #. Commit and push once your tests pass and you are happy with your change(s):: |
| |
| $ git commit -a -m "<commit message>" |
| $ git push -u |
| |
| Make sure you add a CHANGELOG message, and add yourself to AUTHORS. If you |
| are unsure about either of these steps, submit your pull request and we'll |
| help you fix it up. |
| |
| #. Finally, submit a pull request through the GitHub website using this data:: |
| |
| head-fork: YOUR_GITHUB_USERNAME/pytest |
| compare: your-branch-name |
| |
| base-fork: pytest-dev/pytest |
| base: master # if it's a bugfix |
| base: feature # if it's a feature |
| |
| |