136 lines
5.6 KiB
Markdown
136 lines
5.6 KiB
Markdown
# How to contribute
|
|
|
|
## How to prepare
|
|
|
|
* You need a [GitHub account](https://github.com/signup/free)
|
|
* Submit an [issue ticket](https://github.com/tlsfuzzer/tlslite-ng/issues) for
|
|
your issue if there is none yet.
|
|
* Describe the issue and include steps to reproduce if it's a bug, mention
|
|
the earliest version that you know is affected and the version you're using.
|
|
* Describe the enhancement and your general ideas on how to implement it
|
|
if you want to add new feature or extend existing one. This is not
|
|
necessary if the change is small.
|
|
* If you are able and want to fix the issue, fork the repository on GitHub
|
|
|
|
## Technical requirements
|
|
|
|
To be able to work on the code you will need few pieces of software installed.
|
|
The most important is `python` interpreter. Some development dependencies have
|
|
additional restrictions on the versions used, so I recommend Python 2.7 or
|
|
Python 3.4 as the lowest versions (see `.travis.yml` if you want details).
|
|
Git client, make, text editor and ability to
|
|
install local python packages (ability to run pip).
|
|
|
|
The list goes as follows:
|
|
|
|
* python (2.7 or 3.4)
|
|
* git
|
|
* GNU make
|
|
* pip
|
|
* sphinx
|
|
|
|
The python module dependencies are as follows:
|
|
|
|
* unittest (unittest2 on Python 2; should be part of Python 3 install)
|
|
* mock (should be part of Python 3 distribution of unittest)
|
|
* ecdsa
|
|
* pylint
|
|
* diff_cover
|
|
* coverage
|
|
* hypothesis
|
|
* enum34 (for Python2, in case of new hypothesis package)
|
|
|
|
On Fedora they can be installed using:
|
|
|
|
```
|
|
dnf install python-ecdsa python3-ecdsa pylint python3-pylint python-diff-cover \
|
|
python3-diff-cover python-coverage python3-coverage python2-hypothesis \
|
|
python3-hypothesis python3-libs python-unittest2 python-mock python3-sphinx
|
|
```
|
|
|
|
On RHEL 7 you will need to enable [EPEL](https://fedoraproject.org/wiki/EPEL),
|
|
and install [pip](https://pip.pypa.io/en/stable/installing/) for Python3,
|
|
after which you can install the dependencies using:
|
|
|
|
```
|
|
yum install python-ecdsa python34-ecdsa pylint \
|
|
python-coverage python34-coverage python2-hypothesis \
|
|
python34-libs python-unittest2 python-mock python-pip python-sphinx
|
|
pip2 install diff-cover
|
|
pip3 install hypothesis diff-cover pylint
|
|
```
|
|
|
|
Optional module dependencies:
|
|
|
|
* tackpy
|
|
* m2crypto
|
|
* pycrypto
|
|
* gmpy
|
|
|
|
On Fedora they can be installed using:
|
|
|
|
```
|
|
pip install tackpy
|
|
dnf install m2crypto python-crypto python3-crypto python-gmpy2 python3-gmpy2
|
|
```
|
|
|
|
## Make changes
|
|
|
|
* In your forked repository, create a topic branch for your upcoming patch
|
|
(e.g. 'implement-aria' or 'bugfix-osx-crash')
|
|
* usually this is based on the master branch
|
|
* to create branch based on master: `git branch <example-name>` then
|
|
checkout the branch `git checkout <example-name>`. For your own convinience
|
|
avoid working directly on the `master` branch.
|
|
* Make sure you stick to the coding style that is used in surrounding code
|
|
* you can use `pylint --msg-template="{path}:{line}: [{msg_id}({symbol}),
|
|
{obj}] {msg}" tlslite > pylint_report.txt; diff-quality --violations=pylint
|
|
pylint_report.txt` to see if your changes do not violate the general
|
|
guidelines (alternatively you can just run `make test-dev` as described
|
|
below).
|
|
* Make commits of logical units and describe them properly in commits
|
|
* When creating a comment, keep the first line short and separate it from
|
|
the rest by whiteline
|
|
* See also [OpenStack guide](https://wiki.openstack.org/wiki/GitCommitMessages)
|
|
for general good ideas about git commit messages
|
|
* Check for unnecessary whitespace with `git diff --check` before committing
|
|
|
|
* Generally newly submitted code should have test coverage so that it can
|
|
be clearly shown that it works correctly.
|
|
* pull requests with code refactoring of code that does not have test
|
|
coverage should have test coverage of the code added first
|
|
* Assure nothing is broken by running all tests using `make test-dev`
|
|
* Pull requests that fail the last check of the `test-dev` target,
|
|
the test coverage check, may still be accepted, but making pull request
|
|
that passes it is the best way to make the review quick.
|
|
|
|
## Submit changes
|
|
|
|
* Push your changes to a topic branch in your fork of the repository.
|
|
* Open a pull request to the original repository and choose the right original
|
|
branch you want to patch (that usually will be tlsfuzzer/master).
|
|
* If you posted issues previously, make sure you reference them in the opening
|
|
commit of the pull request (e.g. 'fixes #12'). But _please do not close the
|
|
issue yourself_. GitHub will do that automatically once the issue is merged.
|
|
* Wait for checks to pass. Travis-ci check is mandatory, pull requests which
|
|
fail it will not be merged. Landscape and coveralls failures are not blocking
|
|
but may require explanation. Going to codeclimate and quantified code
|
|
(see README.md for links) and checking the branch and pull request is also
|
|
a good idea.
|
|
* if you are not sure if the pull request will pass the checks it is OK to
|
|
submit
|
|
a test pull request, but please mark it as such ('[WIP]' in title is
|
|
enough)
|
|
* Once you receive feedback from reviewers or from the automated systems,
|
|
modify your local patches (that usually means that you need to prepare
|
|
"fixup" patches and/or interactively
|
|
[rebase](https://help.github.com/articles/about-git-rebase/)) and push
|
|
updated branch to github (that usually will require to perform a
|
|
[force push](http://movingfast.io/articles/git-force-pushing/))
|
|
* Wait again for automated checks, once they're finished, @mention the previous
|
|
reviewer or @tomato42 if there were none.
|
|
|
|
## Additional Resources
|
|
|
|
* [General GitHub documentation](http://help.github.com/)
|
|
* [GitHub pull request documentation](http://help.github.com/send-pull-requests/)
|