开发人员设置#

在本指南中,我们描述了如何在其中设置开发人员环境可以轻松浏览源代码、进行修改、编写和执行单元测验。

为此,我们将使用虚拟环境其中所有软件遗产包将是以“开发”模式安装,这将允许您导航源代码,破解它,并在本地运行单元测试。

要测试修改的效果,可以安装您自己的本地软件遗产实例使用Docker。

安装所需的依赖项#

软件遗产需要一些依赖项,这些依赖项通常由您的包管理器。关于基于Debian/U的发行版:

sudo apt安装lsb发布wget apt传输https
sudo wget公司https://www.postgresql.org/media/keys/ACCC4CF8.asc-O/etc/apt/trusted.gpg.d/postgresql.asc
echo“debhttps://apt.postgresql.org/pub/repos/apt/$(lsb_release-cs)-pgdg-main“|sudo-tee-a/etc/apt/sources.list.d/pgdg.list
sudo wget公司https://downloads.apache.org/cassandra/KEYS网站-O/etc/apt/trusted.gpg.d/cassandra.asc
echo“debhttps://debian.cassandra.apache.org网站41x main“|sudo T恤-a/etc/apt/sources.list.d/cassandra.list
sudo apt更新
sudo apt安装\
构建基本pkg-config lzip rsync\
python3 python3-ip python3-venv虚拟包装器\
libpython3-dev libsystemd-dev libsvn-dev libffi-dev librdkafka-dev\
fuse3 libfuse3-dev libcmph-dev libleveldb-dev\
git myrepos公司\
graphviz plantuml inkscape\
postgresql libpq-dev卡桑德拉

注释

需要Python 3.7或更新版本

这将安装基本的系统实用程序、Python库依赖项、开发工具,文档工具和我们的主要数据库管理系统。

Cassandra和PostgreSQL将在需要时通过测试启动,因此您可以不需要全局启动它们(这样可以节省一些RAM):

sudo systemctl disable--现在是cassandra postgresql

如果你打算在软件遗产Web应用程序,您还将需要有节点 >= 18在您的开发环境中。如果您的基于Debian的分发版本较低,您可以使用以下命令安装节点18:

sudo wget公司https://deb.nodesource.com/gpgkey/nodesource.gpg.key-O/etc/apt/trusted.gpg.d/nodesource.asc
echo“debhttps://deb.nodesource.com/node_18.x$(lsb_release-cs)main“|sudo tee-a/etc/apt/sources.list.d/nodsource.list
sudo apt更新
sudo apt安装节点

也与Web应用程序开发有关,软件遗产使用纱线程序包管理器检索前端依赖项和开发工具。建议安装其使用以下命令的最新经典版本:

sudo wget公司https://dl.yarnpkg.com/debian/pubkey.gpg-O/etc/apt/trusted.gpg.d/yarn.asc
echo“debhttps://dl.yarnpkg.com/debian网站/stable main“|sudo tee/etc/apt/sources.list.d/yarn.list
sudo apt更新
sudo-apt-install纱线

如果你打算继续软件遗产存档搜索功能,Elasticsearch还必须出现在您的开发环境中。按照以下步骤进行安装:

sudo wget公司https://artifacts.elastic.co/GPG-KEY-elasticsearch网站-O/etc/apt/trusted.gpg.d/elasticesearch.asc
echo“debhttps://artifacts.elastic.co/包装/7.x/aptstable main“| sudo tee-a/etc/apt/sources.list.d/elasticesearch.list
sudo apt更新
sudo apt安装弹性搜索

如果您打算构建完整的软件遗产文档postgresql-autodoc实用程序必须也要安装,请遵循以下步骤说明书这样做。

检查源代码#

克隆软件遗产环境存储库:

~$git克隆https://gitlab.softwareheritage.org/swh/devel/swh-environment.git
[...]
~$cd swh-环境
~/swh-环境$

创建虚拟机:

~/swh-environment$source/usr/share/virtualenvwrapper/virtualenvwrappers.sh
~/swh-environment$mkvirtualenv-p/usr/bin/python3-a$PWD swh
[...]
(瑞士法郎) ~/swh-环境$

签出所有swh包源存储库:

(瑞士法郎) ~/swh-environment$pip安装预提交
(瑞士法郎) ~/swh-environment$/bin/更新

使用与我们的毒杀容器使用的mypy版本相同的版本:

(瑞士法郎) ~/swh-environment$pip安装mypy==1.8.0

将来,您可以通过以下方式重新激活创建的virtualenv:

$修井 瑞士法郎(瑞士法郎) ~/swh-环境$

注释

以上假设您正在使用虚拟envwrapper管理您的Python虚拟化,但这绝不是强制性的。你可以用普通的virtualenv或任何其他virtualen管理工具(pipenv公司对于示例)。虚拟envwrapper是我们的首选,但YMMV。

安装所有swh包(在开发模式下,具有测试依赖项):

(瑞士法郎) ~/swh-environment$bin/install

注释

如果您遇到以下问题pip(点阵)依赖项解析,请尝试箱子/安装 --use-derecated=遗留解析程序(旗帜将被传递pip(点阵) 安装). 也可以在中全局设置相同的标志~/.config/pip/pip.conf:

[安装]
use-derecated=遗留解析程序

执行单元测试#

单元测试正在使用pytest测试框架,可以直接执行或通过毒性。这两种测试执行环境之间的主要区别是:

  • 通过执行时毒性,所有依赖项(包括swh依赖项)都是从安装皮皮:您根据最新版本测试您的修改每个swh包的发布版本,但当前版本除外。

  • 执行时pytest测试直接从您的当前从git存储库安装的virtualenv:您测试您的针对每个swh包的HEAD进行修改。

例如,为运行单元测试swh-装载机-git包裹:

(瑞士法郎) ~/swh-environment$cd swh-loader-git
(瑞士法郎) ~/swh-environment/swh-loader-git$pytest
=================================
平台linux——Python 3.5.3、pytest-3.8.2、py-1.6.0、pluggy-0.7.1
假设配置文件“default”->database=DirectoryBasedExampleDatabase(“/home/ddouard/src/swh-environment/swh-loader-git/.hypothesis/examples”)
rootdir:/home/ddouard/src/swh-environment/swh-loader-git,inifile:pytest.ini
插件:requests-mock-1.5.2,postgresql-1.3.4,env-0.6.2,django-3.4.7,cov-2.6.0,pylama-7.6.5,virtusis-3.76.0,芹菜-4.2.1
收集了25个项目

swh/loader/git/tests/test_converters.py。。。。。。。。[ 32%]
swh/loader/git/tests/test_from_disk.py。。。。。[ 52%]
swh/loader/git/tests/test_loader.py。。。。。。[ 76%]
swh/loader/git/tests/test_tasks.py。。。[ 88%]
swh/loader/git/tests/test_utils.py。。。[100%]
====~=======:====2===>====1====0.==警告摘要=============================
[...]
=================通过25次,6.66秒内发出12次警告==================

使用tox运行相同的测试,加上代码linting和静态分析:

(瑞士法郎) ~/swh-environment/swh-loader-git$tox
GLOB sdist-make:~/swh-environment/swh-loader-git/setup.py
flake8创建:~/swh-environment/swh-loader-git/.tox/flake8
flake8安装深度:flake9
安装的flake8:入口点==0.3,flake8==3.7.7,mccabe==0.6.1,pycodestyle==2.5.0,pyflakes==2.1.1,swh.loader.git==0.0.48.post3
flake8运行测试-pre:PYTHONHASHSEED='2028963506'
flake8运行测试:命令[0]| ~/swh-environment/swh-loader-git/.tox/flake8/bin/python-m flake9
py3创建:~/swh-environment/swh-loader-git/.tox/py3
py3安装程序:。[测试],pytest-cov
py3安装:~/swh-environment/swh-loader-git/.tox/.tmp/package/1/swh.loader.git-0.0.48.post3.zip
py3已安装:aiohttp==3.5.4,amqp==2.4.2,arrow==0.13.1,async-timeout==3.0.1,atomicwrites==1.3.0,attrs==19.1.0,billard==3.5.0.5,芹菜==4.2.1,certificate==2018.11.29,chardet==3.0.4,Click==7.0,coverage==4.5.2,decorator===4.3.2,dulwich==0.19.11,elasticsearch==6.3.1,Flask==1.0.2,idna==2.8,idna-ssl==1.1.0,its danger==1.1.0,Jinja2==2.10,kombu==4.4.0,MarkupSafe==1.1.1,more-itertools==6.0.0,msgpack-python==0.5.6,multidict==4.5.2,pathlib2==2.3.3,pluggy==0.9.0,psutil==5.6.0,psycopg2==2.7.7,py==1.8.0,pytest==3.10.1,pytest-cov==2.6.1,python-ateutil==2.8.0,pytz==2018.9,PyYAML=3.13,requests==2.21.0,retrying=1.3.3,six=1.12.0,swh.core=0.0.55,swh.loader.core==0.0.39,swh.loader.git==0.0.48.post3,swh.model==0.0.30,swh.objstorage==0.0.3,swh.scheduler==0.0.49,swh.storage==0.0.129,systemd-python==234,typeing-extensions==3.7.2,urllib3==1.24.1,vcversioner==2.16.0.0,vine==1.2.0,Werkzeug==0.14.1,yarl=1.3.0
py3运行测试-pre:PYTHONHASHSEED='2028963506'
py3运行测试:命令[0]| pytest--cov=swh--cov-branch
=================================
平台linux--Python 3.5.3、pytest-3.10.1、py-1.8.0、pluggy-0.9.0
rootdir:~/swh-environment/swh-loader-git,inifile:pytest.ini
插件:cov-2.61,celery-4.2.1
收集了25个项目

swh/loader/git/tests/test_converters.py。。。。。。。。[ 32%]
swh/loader/git/tests/test_from_disk.py。。。。。[ 52%]
swh/loader/git/tests/test_loader.py。。。。。。[ 76%]
swh/loader/git/tests/test_tasks.py。。。[ 88%]
swh/loader/git/tests/test_utils.py。。。[100%]

-----------覆盖范围:linux平台、python 3.5.3-final-0-----------
姓名Stmts Miss Branch BrPart封面
---------------------------------------------------------------------------
swh/__init__.py 1 0 0 0 100%
swh/loader/__init__.py 1 0 0 100%
swh/loader/git/__init__.py 0 0 0 0 100%
swh/loader/git/converters.py 102 10 44 7 86%
swh/loader/git/from_disk.py 157 44 50 6 67%
swh/loader/git/loader.py 271 59 114 17 75%
swh/loader/git/tasks.py 14 0 0 0 100%
swh/loader/git/tests/__init__.py 1 0 0 100%
swh/loader/git/tests/conftest.py 4 0 0 100%
swh/loader/git/tests/test_converters.py 94 0 6 0 100%
swh/loader/git/tests/test_from_disk.py 100 4 0 0 96%
swh/loader/git/tests/test_loader.py 12 0 0 0 100%
swh/loader/git/tests/test_tasks.py 26 0 0 100%
swh/loader/git/tests/test_utils.py 14 0 2 0 100%
swh/loader/git/utils.py 25 8 8 1 61%
---------------------------------------------------------------------------
总计822 125 224 31 80%


====~=======:====2===>====1====0.==警告摘要=============================
.tox/py3/lib/python3/site-packages/psycopg2/__init__.py:144
~/swh-environment/swh-loader-git/.tox/py3/lib/python3/site-packages/psycopg2/__init__.py:144:用户警告:psycopg 2轮包将从2.8版重命名;为了继续从二进制文件安装,请使用“pip安装psycopg2-binary”。有关详细信息,请参见:<http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>。
""")

--文件:https://docs.pytest.org/en/latest/warnings.html
========================
_________________________________摘要__________________________________
flake 8:命令成功
py3:命令成功
祝贺您:)

请注意,某些swh包需要正确配置postgresql服务器执行测试。在这种情况下,您需要使用pifpaf格式,这将生成postgresql的临时实例,以封装对pytest的调用。例如,在swh-core包中运行pytest:

(瑞士法郎) ~/swh-environment$cd swh-core
(swh)~/swh环境/swh核心$pifpaf运行postgresql--pytest
=================================
平台linux--Python 3.5.3、pytest-3.8.2、py-1.6.0、pluggy-0.7.1
假设配置文件“default”->database=DirectoryBasedExampleDatabase(“/home/ddouard/src/swh-environment/swh-core/.hyposis/examples”)
rootdir:/home/ddouard/src/swh-environment/swh-core,inifile:pytest.ini
插件:requests-mock-1.5.2,postgresql-1.3.4,env-0.6.2,django-3.4.7,cov-2.6.0,pylama-7.6.5,virtusis-3.76.0,芹菜-4.2.1
收集了79个项目

swh/core/tests/test_api.py。。[  2%]
swh/core/tests/test_config.py。。。。。。。。。。。。。。[ 20%]
swh/core/tests/test_db.py。。。。[ 25%]
swh/core/tests/test_logger.py。[ 26%]
swh/core/tests/test_serializers.py。。。。。[ 32%]
swh/core/tests/test_statsd.py。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。[ 81%]
........                                                             [ 91%]
swh/core/tests/test_utils.py。。。。。。。[100%]

==========================79分在6.59秒内通过=========================

设置数据库(可选)#

如果要手动运行某些包,可能需要设置其数据库。

每个需要一个数据库的子项目的不同数据库(如存储调度程序)应该通过瑞士法郎 数据库 创造瑞士法郎 数据库 初始化命令。有关更多信息,请参阅他们的帮助。

使用本地实例测试更改#

如何使用本地实例测试更改,请参阅有关Docker设置的文档.

发送您的更改#

完成所需更改后,您可以将其发送到我们的锻造。请参阅上的指南如何提交补丁.