<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>44884</bug_id>
          
          <creation_ts>2023-01-11 12:58:28 +0300</creation_ts>
          <short_desc>Добавить RPM макросы для запуска тестов</short_desc>
          <delta_ts>2023-01-20 11:43:01 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm-build-python3</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stanislav Levin">slev</reporter>
          <assigned_to name="Stanislav Levin">slev</assigned_to>
          <cc>darktemplar</cc>
    
    <cc>george</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>kotopesutility</cc>
    
    <cc>ldv</cc>
    
    <cc>rider</cc>
    
    <cc>slev</cc>
    
    <cc>vitty</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>219983</commentid>
    <comment_count>0</comment_count>
    <who name="Stanislav Levin">slev</who>
    <bug_when>2023-01-11 12:58:28 +0300</bug_when>
    <thetext>Предыстория:

Зачастую при сборке Python rpm пакета требуется запустить тесты проекта в текущем Python окружении в контексте собираемого пакета. При этом сборочное окружение накладывает некоторые ограничения, например:
- текущий пользователь непривилегированный и не может устанавливать Python 
  пакеты в global sitepackages
- отсутствие доступа к package index (pypi.org)

Хотя некоторые тесты могут быть запущены в текущем Python окружении без каких-либо изменений (например, при плоской схеме архитектурно-независимого проекта), другие требуют хотя бы установки переменной окружения `PYTHONPATH`. Все становится намного сложнее в случае архитектурно-зависимых проектов, использовании `.pth` хуков, `entry_points` плагинов и тд. Это причина, по которой сейчас в Python сообществе для тестирования широко используется `tox` (основанный на `virtualenv`). Идеология `tox` в том, чтобы установить зависимости проекта или окружения с pypi.org и запустить какую-либо команду. Чтобы отговорить его (`tox`) это делать в сборочном окружении, используется несколько плагинов.

Предложение:
- добавить легковесную альтернативу `tox` на основе `pyproject_installer run` 
  через RPM макро `%pyproject_run` (можно запустить произвольную команду)
- добавить наиболее используемые варианты запуска тестов через RPM макросы:
  - `%pyproject_run_pytest`
  - `%pyproject_run_unittest`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219984</commentid>
    <comment_count>1</comment_count>
    <who name="Stanislav Levin">slev</who>
    <bug_when>2023-01-11 13:01:28 +0300</bug_when>
    <thetext>Про `pyproject_installer run`:
https://github.com/stanislavlevin/pyproject_installer/issues/21</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220052</commentid>
    <comment_count>2</comment_count>
    <who name="Stanislav Levin">slev</who>
    <bug_when>2023-01-12 15:07:16 +0300</bug_when>
    <thetext>Сборочное задание:
https://git.altlinux.org/tasks/313305/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220162</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2023-01-16 13:20:19 +0300</bug_when>
    <thetext>tox при этом останется ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220166</commentid>
    <comment_count>4</comment_count>
    <who name="Stanislav Levin">slev</who>
    <bug_when>2023-01-16 13:34:37 +0300</bug_when>
    <thetext>(Ответ для Anton Farygin на комментарий #3)
&gt; tox при этом останется ?

Да, tox при этом остается, но я буду рекомендовать использовать макросы основанные на %pyproject_run. Автор tox в версии 4 переделал буквально все и мои плагины еще не адаптированы под эту новую версию, поэтому пока мы залипли на tox 3.

Отличия от tox, которые могут повлиять на результаты тестов:
- tox режет все переменные окружения, кроме указанных явно. pyproject не режет.
- в Python виртуальном окружении tox есть pip, wheel и setuptools. В pyproject их нет
- tox использует pip в качестве установщика зависимостей, который проверяет наличие дистрибутивов, их версий и тд. pyproject не занимается зависимостями.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220387</commentid>
    <comment_count>5</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2023-01-20 11:43:01 +0300</bug_when>
    <thetext>rpm-build-python3-0.1.21-alt1 -&gt; sisyphus:

 Thu Jan 12 2023 Stanislav Levin &lt;slev@altlinux&gt; 0.1.21-alt1
 - Added support for run command (closes: #44884).</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>