blob: 2d8fceeb2a90a8acfc5abcc61817908c2a450d58 [file] [log] [blame]
Alex Gaynorc72e63f2013-09-09 21:44:26 -07001Contributing
2============
3
4Process
5-------
6
7As an open source project, ``cryptography`` welcomes contributions of all
8forms. These can include:
9
10* Bug reports and feature requests
11* Pull requests for both code and documentation
12* Patch reviews
13
Alex Gaynor2c67c822013-09-09 23:44:13 -070014You can file bugs and submit pull requests on `GitHub`_. To discuss larger
Alex Gaynorc72e63f2013-09-09 21:44:26 -070015changes you can start a conversation on `our mailing list`_.
16
17Because cryptography is so complex, and the implications of getting it wrong so
18devastating, ``cryptography`` has a strict code review policy:
19
20* Patches must *never* be pushed directly to ``master``, all changes (even the
21 most trivial typo fixes!) must be submitted as a pull request.
22* A committer may *never* merge their own pull request, a second party must
23 merge their changes. If multiple people work on a pull request, the merger
24 may not be any of them.
25* A patch which breaks tests, or introduces regressions by changing or removing
26 existing tests should not be merged. Tests must always be passing on
27 ``master``.
28* If somehow the tests get into a failing state on ``master`` (such as by a
29 backwards incompatible release of a dependency) no pull requests may be
30 merged until this is rectified.
31
32The purpose of these policies is to minimize the chances we merge a change
33which jeopardizes our users' security.
34
35We do not yet have a formal security contact. To report security issues in
36``cryptography`` you should email ``alex.gaynor@gmail.com``, messages may be
37encrypted with PGP to key fingerprint
38``E27D 4AA0 1651 72CB C5D2 AF2B 125F 5C67 DFE9 4084`` (this public key is
39available from most commonly-used keyservers).
40
41Code
42----
43
44When in doubt, refer to `PEP 8`_ for Python code.
45
46Every code file must start with the boilerplate notice of the Apache License.
47Additionally, every Python code file must contain
48
49.. code-block:: python
50
51 from __future__ import absolute_import, division, print_function
52
53Documentation
54-------------
55
56All features should be documented with prose.
57
58Docstrings should be written like this:
59
60.. code-block:: python
61
62 def some_function(some_arg):
63 """
64 Does some things.
65
66 :param some_arg: Some argument.
67 """
68
69So, specifically:
70
71- Always use three double quotes.
72- Put the three double quotes on their own line.
73- No blank line at the end.
74- Use Sphinx parameter/attribute documentation `syntax`_.
75
Richard Wall40cde822013-10-01 20:20:15 +010076Development Environment
77-----------------------
Richard Wall0d9bb142013-10-01 16:17:24 +010078
79Working on ``cryptography`` requires the installation of a small number of
Alex Gaynor166cbd32013-10-01 13:30:29 -070080development dependencies. These are listed in ``dev-requirements.txt`` and they
81can be installed in a `virtualenv`_ using `pip`_. Once you've installed the
82dependencies, install ``cryptography`` in ``editable`` mode. For example:
Richard Wall0d9bb142013-10-01 16:17:24 +010083
Alex Gaynorae5c9072013-10-06 11:04:08 -070084.. code-block:: console
Richard Wall0d9bb142013-10-01 16:17:24 +010085
Alex Gaynor7587ded2013-10-06 12:14:05 -070086 $ # Create a virtualenv and activate it
Richard Wall7d4ca1e2013-10-01 21:10:45 +010087 $ pip install --requirement dev-requirements.txt
88 $ pip install --editable .
Richard Wall0d9bb142013-10-01 16:17:24 +010089
90You are now ready to run the tests and build the documentation.
Richard Wall0d9bb142013-10-01 16:17:24 +010091
Richard Wall40cde822013-10-01 20:20:15 +010092Running Tests
93-------------
Richard Wall0d9bb142013-10-01 16:17:24 +010094
Alex Gaynor166cbd32013-10-01 13:30:29 -070095``cryptography`` unit tests are found in the ``tests/`` directory and are
96designed to be run using `pytest`_. `pytest`_ will discover the tests
97automatically, so all you have to do is:
Richard Wall0d9bb142013-10-01 16:17:24 +010098
Alex Gaynorae5c9072013-10-06 11:04:08 -070099.. code-block:: console
Richard Wall0d9bb142013-10-01 16:17:24 +0100100
Richard Wall7d4ca1e2013-10-01 21:10:45 +0100101 $ py.test
Richard Wall0d9bb142013-10-01 16:17:24 +0100102 ...
103 4294 passed in 15.24 seconds
104
105This runs the tests with the default Python interpreter.
106
107You can also verify that the tests pass on other supported Python interpreters.
Richard Wallc3d1eb52013-10-01 16:29:07 +0100108For this we use `tox`_, which will automatically create a `virtualenv`_ for
Richard Wall40cde822013-10-01 20:20:15 +0100109each supported Python version and run the tests. For example:
Richard Wall0d9bb142013-10-01 16:17:24 +0100110
Alex Gaynorae5c9072013-10-06 11:04:08 -0700111.. code-block:: console
Richard Wall0d9bb142013-10-01 16:17:24 +0100112
Richard Wall7d4ca1e2013-10-01 21:10:45 +0100113 $ tox
Richard Wall0d9bb142013-10-01 16:17:24 +0100114 ...
Richard Wall40cde822013-10-01 20:20:15 +0100115 ERROR: py26: InterpreterNotFound: python2.6
116 py27: commands succeeded
117 ERROR: pypy: InterpreterNotFound: pypy
118 ERROR: py32: InterpreterNotFound: python3.2
119 py33: commands succeeded
120 docs: commands succeeded
121 pep8: commands succeeded
Richard Wall0d9bb142013-10-01 16:17:24 +0100122
Alex Gaynor166cbd32013-10-01 13:30:29 -0700123You may not have all the required Python versions installed, in which case you
124will see one or more ``InterpreterNotFound`` errors.
Richard Wall0d9bb142013-10-01 16:17:24 +0100125
126Building Documentation
127----------------------
128
Alex Gaynor166cbd32013-10-01 13:30:29 -0700129``cryptography`` documentation is stored in the ``docs/`` directory. It is
130written in `reStructured Text`_ and rendered using `Sphinx`_.
Richard Wall0d9bb142013-10-01 16:17:24 +0100131
Richard Wall7d4ca1e2013-10-01 21:10:45 +0100132Use `tox`_ to build the documentation. For example:
Richard Wall0d9bb142013-10-01 16:17:24 +0100133
Alex Gaynorae5c9072013-10-06 11:04:08 -0700134.. code-block:: console
Richard Wall0d9bb142013-10-01 16:17:24 +0100135
Richard Wall7d4ca1e2013-10-01 21:10:45 +0100136 $ tox -e docs
Richard Wall0d9bb142013-10-01 16:17:24 +0100137 ...
Richard Wallc3d1eb52013-10-01 16:29:07 +0100138 docs: commands succeeded
Richard Wall0d9bb142013-10-01 16:17:24 +0100139 congratulations :)
140
Richard Wall7d4ca1e2013-10-01 21:10:45 +0100141The HTML documentation index can now be found at ``docs/_build/html/index.html``
Richard Wall40cde822013-10-01 20:20:15 +0100142
Alex Gaynorc72e63f2013-09-09 21:44:26 -0700143
Donald Stufft85707942013-10-04 23:55:27 -0400144.. _`GitHub`: https://github.com/pyca/cryptography
Alex Gaynorc72e63f2013-09-09 21:44:26 -0700145.. _`our mailing list`: https://mail.python.org/mailman/listinfo/cryptography-dev
146.. _`PEP 8`: http://www.peps.io/8/
147.. _`syntax`: http://sphinx-doc.org/domains.html#info-field-lists
Richard Wallc3d1eb52013-10-01 16:29:07 +0100148.. _`pytest`: https://pypi.python.org/pypi/pytest
149.. _`tox`: https://pypi.python.org/pypi/tox
150.. _`virtualenv`: https://pypi.python.org/pypi/virtualenv
151.. _`pip`: https://pypi.python.org/pypi/pip
152.. _`sphinx`: https://pypi.python.org/pypi/sphinx
Alex Gaynor166cbd32013-10-01 13:30:29 -0700153.. _`reStructured Text`: http://docutils.sourceforge.net/rst.html