doc: Update doc/contributing.rst

JIRA: RHELCMP-1773
Signed-off-by: Haibo Lin <hlin@redhat.com>
This commit is contained in:
Haibo Lin 2020-08-10 17:15:44 +08:00
parent 4dcb6dee0d
commit c273350fe5
2 changed files with 39 additions and 58 deletions

View File

@ -7,64 +7,22 @@ Set up development environment
============================== ==============================
In order to work on *Pungi*, you should install recent version of *Fedora*. In order to work on *Pungi*, you should install recent version of *Fedora*.
These packages will have to installed:
* createrepo_c Python2
* cvs -------
* gcc
* genisoimage
* gettext
* git
* gobject-introspection
* isomd5sum
* jigdo
* kobo
* krb5-devel
* libcurl-devel
* libmodulemd
* libselinux-python
* lorax
* python-dogpile-cache
* python-jsonschema
* python-kickstart
* python-libcomps
* python-lockfile
* python-lxml
* python2-multilib
* python-productmd
* PyYAML
* repoview
* rpm-devel
* syslinux
* yum
* yum-utils
For running unit tests, these packages are recommended as well: Fedora 29 is recommended because some packages are not available in newer Fedora release, e.g. python2-libcomps.
* python-mock Install required packages ::
* python-pytest
* python-pytest-cov
* python-unittest2
* rpmdevtools
* python-parameterized
While being difficult, it is possible to work on *Pungi* using *virtualenv*. $ sudo dnf install -y krb5-devel gcc make libcurl-devel python2-devel python2-createrepo_c kobo-rpmlib yum python2-libcomps python2-libselinx
Install *python-virtualenvwrapper* (after installation you have to add the command
to *source /usr/local/bin/virtualenvwrapper.sh* to your shell startup file,
depending on where it was installed by package manager) and use following steps.
It will link system libraries into the virtual environment and install all packages
preferably from PyPI or from tarball. You will still need to install all of the non-Python
packages above as they are used by calling an executable. ::
$ mkvirtualenv pungienv Python3
$ for pkg in gi libcomps pykickstart rpmUtils selinux urlgrabber yum; do ln -vs "$(deactivate && python -c 'import os, '$pkg'; print(os.path.dirname('$pkg'.__file__))')" "$(virtualenvwrapper_get_site_packages_dir)"; done -------
$ for pkg in _deltarpm krbV _selinux deltarpm sqlitecachec _sqlitecache; do ln -vs "$(deactivate && python -c 'import os, '$pkg'; print('$pkg'.__file__)')" "$(virtualenvwrapper_get_site_packages_dir)"; done
$ pip install -U pip
$ PYCURL_SSL_LIBRARY=nss pip install pycurl --no-binary :all:
$ pip install beanbag jsonschema 'kobo>=0.6.0' lockfile lxml mock pytest pytest-cov productmd pyopenssl python-multilib requests requests-kerberos setuptools sphinx ordered_set koji PyYAML dogpile.cache parameterized
Now you should be able to run all existing tests. Install required packages ::
$ sudo dnf install -y krb5-devel gcc make libcurl-devel python3-devel python3-createrepo_c python3-libcomps
Developing Developing
========== ==========
@ -121,7 +79,7 @@ Currently the development workflow for Pungi is on master branch:
- you must sign-off on it. Use ``-s`` option when running ``git commit``. - you must sign-off on it. Use ``-s`` option when running ``git commit``.
- The code must be well formatted via ``black`` and pass ``flake8`` checking. Run ``tox`` to do the check. - The code must be well formatted via ``black`` and pass ``flake8`` checking. Run ``tox -e black,flake8`` to do the check.
- Create pull request in the pagure.io web UI - Create pull request in the pagure.io web UI
@ -149,20 +107,42 @@ Testing
You must write unit tests for any new code (except for trivial changes). Any You must write unit tests for any new code (except for trivial changes). Any
code without sufficient test coverage may not be merged. code without sufficient test coverage may not be merged.
To run all existing tests, suggested method is to use *pytest*. With To run all existing tests, suggested method is to use *tox*. ::
additional options, it can generate code coverage. To make sure even tests from
executable files are run, don't forget to use the ``--exe`` option. ::
$ sudo dnf install python3-tox -y
$ tox -e py3
$ tox -e py27
Alternatively you could create a vitualenv, install deps and run tests
manually if you don't want to use tox. ::
$ sudo dnf install python3-virtualenvwrapper -y
$ mkvirtualenv --system-site-packages py3
$ workon py3
$ pip install -r requirements.txt -r test-requirements.txt
$ make test $ make test
$ make test-cover
# Running single test file # or with coverage
$ python tests/test_arch.py [TestCase...] $ make test-coverage
If you need to run specified tests, *pytest* is recommended. ::
# Activate virtualenv first
# Run tests
$ pytest tests/test_config.py
$ pytest tests/test_config.py -k test_pkgset_mismatch_repos
In the ``tests/`` directory there is a shell script ``test_compose.sh`` that In the ``tests/`` directory there is a shell script ``test_compose.sh`` that
you can use to try and create a miniature compose on dummy data. The actual you can use to try and create a miniature compose on dummy data. The actual
data will be created by running ``make test-data`` in project root. :: data will be created by running ``make test-data`` in project root. ::
$ sudo dnf -y install rpm-build createrepo_c isomd5sum genisoimage syslinux
# Activate virtualenv (the one created by tox could be used)
$ source .tox/py3/bin/activate
$ python setup.py develop $ python setup.py develop
$ make test-data $ make test-data
$ make test-compose $ make test-compose

View File

@ -1,3 +1,4 @@
# Some packages must be installed via dnf/yum first, see doc/contributing.rst
dict.sorted dict.sorted
dogpile.cache dogpile.cache
fedmsg fedmsg