Compare commits

..

4 Commits

Author SHA1 Message Date
Miro Hrončok 4c1aa8b294 Fedora CI: Workaround No group usr/bin/virtualenv available
See https://pagure.io/fedora-ci/general/issue/31
2020-02-06 19:03:41 +01:00
Miro Hrončok dd54a7207e Add Python 3.9 to the CI 2020-02-06 13:18:48 +01:00
Miro Hrončok 559695054a Backport %check section from master 2020-02-06 13:04:36 +01:00
Miro Hrončok 19c55ef01a Fix invocation with Python 3.9 (#1798929)
- Recommend Python 3.9
2020-02-06 13:04:17 +01:00
6 changed files with 127 additions and 374 deletions
+11 -2
View File
@@ -1,2 +1,11 @@
/tox-*.tar.gz /tox-1.4.2.zip
/tox-*/ /tox-1.6.1.tar.gz
/tox-1.7.1.tar.gz
/tox-1.8.1.tar.gz
/tox-2.1.1.tar.gz
/tox-2.3.1.tar.gz
/tox-2.7.0.tar.gz
/tox-2.9.1.tar.gz
/tox-3.0.0.tar.gz
/tox-3.4.0.tar.gz
/tox-3.5.3.tar.gz
+13
View File
@@ -0,0 +1,13 @@
diff --git a/src/tox/constants.py b/src/tox/constants.py
index bd21562..e1b7c3f 100644
--- a/src/tox/constants.py
+++ b/src/tox/constants.py
@@ -28,7 +28,7 @@ def _construct_default_factors(cpython_versions, pypy_versions, other_interprete
class PYTHON:
PY_FACTORS_RE = re.compile("^(?!py$)(py|pypy|jython)([2-9][0-9]?)?$")
PY_FACTORS_MAP = {"py": "python", "pypy": "pypy", "jython": "jython"}
- CPYTHON_VERSION_TUPLES = [(2, 7), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8)]
+ CPYTHON_VERSION_TUPLES = [(2, 7), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9)]
PYPY_VERSION_TUPLES = [(2, 7), (3, 5)]
OTHER_PYTHON_INTERPRETERS = ["jython"]
DEFAULT_FACTORS = _construct_default_factors(
+87 -215
View File
@@ -1,49 +1,27 @@
# Tests are disbaled by default, they require: # Tests requiring Internet connections are disabled by default
# a) tested tox to be installed # pass --with internet to run them (e.g. when doing a local rebuild
# b) internet connection # for sanity checks before committing)
# To test, do the following: %bcond_with internet
# 1) Build --without tests (the default)
# (e.g. fedpkg mockbuild)
# 2) Install the built package
# (e.g. mock install ./results_python-tox/.../tox-...rpm)
# 3) Build again --with tests (and internet connection)
# (e.g. fedpkg mockbuild --enable-network --no-clean-all --with tests)
# The Fedora CI tests do this.
%bcond_with tests
# Unset -s on python shebang - ensure that extensions installed with pip
# to user locations are seen and properly loaded
# Fixes https://bugzilla.redhat.com/2057015
%global py3_shebang_flags %(echo %py3_shebang_flags | sed s/s//)
Name: python-tox %global pypiname tox
Version: 3.27.1 Name: python-%{pypiname}
Release: 1%{?dist} Version: 3.5.3
Release: 4%{?dist}
Summary: Virtualenv-based automation of test activities Summary: Virtualenv-based automation of test activities
License: MIT # file toxbootstrap.py is licensed under MIT License
URL: https://tox.readthedocs.io/ License: GPLv2+ and MIT
Source0: %{pypi_source tox} URL: http://tox.testrun.org/
Source0: https://files.pythonhosted.org/packages/source/t/%{pypiname}/%{pypiname}-%{version}.tar.gz
# Run py39 env with Python 3.9
# https://bugzilla.redhat.com/show_bug.cgi?id=1798929
Patch1: py39.patch
BuildArch: noarch BuildArch: noarch
BuildRequires: python3-devel %description
BuildRequires: pyproject-rpm-macros
%if %{with tests}
BuildRequires: /usr/bin/gcc
BuildRequires: /usr/bin/git
BuildRequires: /usr/bin/pip
BuildRequires: /usr/bin/pytest
BuildRequires: /usr/bin/python
BuildRequires: libffi-devel
# xdist is not used upstream, but we use it to speed up the %%check
BuildRequires: python3-pytest-xdist
# The tests only work if the tested tox is installed :(
BuildRequires: tox = %{version}-%{release}
%endif
%global _description %{expand:
Tox as is a generic virtualenv management and test command line tool you Tox as is a generic virtualenv management and test command line tool you
can use for: can use for:
@@ -52,13 +30,16 @@ can use for:
- running your tests in each of the environments, configuring your test tool - running your tests in each of the environments, configuring your test tool
of choice of choice
- acting as a frontend to Continuous Integration servers, greatly reducing - acting as a frontend to Continuous Integration servers, greatly reducing
boilerplate and merging CI and shell-based testing.} boilerplate and merging CI and shell-based testing.
%description %_description
%package -n tox %package -n python3-%{pypiname}
Summary: %{summary} Summary: %{summary}
%{?python_provide:%python_provide python3-%{pypiname}}
Provides: %{pypiname} = %{version}-%{release}
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-setuptools_scm
# Recommend "all the Pythons" # Recommend "all the Pythons"
# Why? Tox exists to enable developers to test libraries against various Python # Why? Tox exists to enable developers to test libraries against various Python
@@ -68,201 +49,92 @@ Summary: %{summary}
# however it launches other Python versions as subprocesses. # however it launches other Python versions as subprocesses.
# It recommends all Python versions it supports. (This is an exception to # It recommends all Python versions it supports. (This is an exception to
# the rule that Fedora packages may not require the alternative interpreters.) # the rule that Fedora packages may not require the alternative interpreters.)
Recommends: python2.7 Recommends: python27
Recommends: python3.6 Recommends: python34
Recommends: python3.7 Recommends: python35
Recommends: python3.8 Recommends: python36
Recommends: python3.9 Recommends: python37
Recommends: python3.10 Recommends: python38
Recommends: pypy2-devel Recommends: python39
Recommends: pypy-devel
Recommends: pypy3-devel Recommends: pypy3-devel
Recommends: python2-devel Recommends: python2-devel
Recommends: python3-devel Recommends: python3-devel
# Instead of adding new Pythons here, add `Supplements: tox` to them, see:
# https://lists.fedoraproject.org/archives/list/python-devel@lists.fedoraproject.org/thread/NVVUXSVSPFQOWIGBE2JNI67HEO7R63ZQ/
%py_provides python3-tox # Replace the python2 version
# Remove this once Fedora 36 goes EOL: Obsoletes: python2-tox < 2.9.1-4
Obsoletes: python3-tox < 3.24.4-2
%description -n tox %_description %if %{with internet}
# for tests
BuildRequires: python3-py
BuildRequires: python3-pytest
BuildRequires: python3-pytest-mock
BuildRequires: python3-pytest-xdist
BuildRequires: python3-virtualenv
%endif
%?python_enable_dependency_generator
%description -n python3-%{pypiname}
Tox as is a generic virtualenv management and test command line tool you
can use for:
- checking your package installs correctly with different Python versions
and interpreters
- running your tests in each of the environments, configuring your test tool
of choice
- acting as a frontend to Continuous Integration servers, greatly reducing
boilerplate and merging CI and shell-based testing.
%prep %prep
%autosetup -p1 -n tox-%{version} %autosetup -p1 -n %{pypiname}-%{version}
# In https://github.com/tox-dev/tox/pull/2463 upstream insisted on pinning tomli to >=2.0.1.
# However, it works fine with 1.2.3 we have in Fedora 35+36, so we relax the dependency.
# We rely on the Fedora CI to catch problems.
sed -i 's/tomli>=2.0.1/tomli>=1.2.3/' setup.cfg
%generate_buildrequires
%pyproject_buildrequires -r %{?with_tests:-x testing}
# remove bundled egg-info
rm -rf %{pypiname}.egg-info
%build %build
%pyproject_wheel %py3_build
%install %install
%pyproject_install %py3_install
%pyproject_save_files tox
# if internet connection available, run tests
%if %{with tests} %if %{with internet}
%check %check
%pytest -n auto # there will be failures like
# ModuleNotFoundError: tox
# or InterpreterNotFound: python
# We juggle the environment variables as much as we can, but it's not perfect.
# To workaround this:
# 1. build --without internet
# 2. install the new python3-tox
# 3. build --with internet
mkdir .path
ln -s %{__python3} .path/python
ln -s /usr/bin/easy_install-%{python3_version} .path/easy_install
ln -s /usr/bin/pytest-%{python3_version} .path/pytest
ln -s /usr/bin/pip3 .path/pip
export PATH=$(pwd)/.path:%{buildroot}%{_bindir}:$PATH
export PYTHONPATH=%{buildroot}%{python3_sitelib}
export TOXENV=py%{python3_version_nodots}
export TOX_TESTENV_PASSENV="PATH TOX_TESTENV_PASSENV"
# TODO figure out why PEP517/518 tests and test_provision_cli_args_ignore won't pass
pytest-3 -n auto -k "not test_verbose_isolated_build and not test_dist_exists_version_change and not test_alwayscopy"
rm -rf .path
%endif %endif
%files -n python3-%{pypiname}
%files -n tox -f %{pyproject_files} %{_bindir}/%{pypiname}
%{_bindir}/tox %{_bindir}/%{pypiname}-quickstart
%{_bindir}/tox-quickstart %{python3_sitelib}/%{pypiname}
%{python3_sitelib}/%{pypiname}-%{version}-py%{python3_version}.egg-info
%changelog %changelog
* Fri Nov 25 2022 Miro Hrončok <mhroncok@redhat.com> - 3.27.1-1 * Thu Feb 06 2020 Miro Hrončok <mhroncok@redhat.com> - 3.5.3-4
- Update to 3.27.1
* Wed Sep 14 2022 Miro Hrončok <mhroncok@redhat.com> - 3.26.0-1
- Update to 3.26.0
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.25.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jul 13 2022 Lumír Balhar <lbalhar@redhat.com> - 3.25.1-1
- Update to 3.25.1
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 3.25.0-2
- Rebuilt for Python 3.11
* Mon May 09 2022 Miro Hrončok <mhroncok@redhat.com> - 3.25.0-1
- Update to 3.25.0
* Tue Feb 22 2022 Rich Megginson <rmeggins@redhat.com> - 3.24.5-2
- Remove -s flag from tox shebang, make tox see user-installed plugins
- Fixes: rhbz#2057015
* Tue Jan 25 2022 Miro Hrončok <mhroncok@redhat.com> - 3.24.5-1
- Update to 3.24.5
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.24.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Mon Dec 13 2021 Miro Hrončok <mhroncok@redhat.com> - 3.24.4-2
- Always BuildRequire runtime dependencies to avoid non-installable builds
- Remove no longer needed obsoletes of python3-detox
* Wed Oct 13 2021 Tomáš Hrnčiar <thrnciar@redhat.com> - 3.24.4-1
- Update to 3.24.4
* Tue Aug 31 2021 Miro Hrončok <mhroncok@redhat.com> - 3.24.3-1
- Update to 3.24.3
* Wed Aug 04 2021 Miro Hrončok <mhroncok@redhat.com> - 3.24.1-2
- Obsolete newer versions of python3-tox
* Tue Aug 03 2021 Miro Hrončok <mhroncok@redhat.com> - 3.24.1-1
- Update to 3.24.1
* Mon Aug 02 2021 Miro Hrončok <mhroncok@redhat.com> - 3.24.0-2
- Remove Recommends Python 3.5
- Add Recommends for Python 3.10
- https://fedoraproject.org/wiki/Changes/RetirePython3.5
- https://fedoraproject.org/wiki/Changes/Python3.10
* Mon Jul 26 2021 Miro Hrončok <mhroncok@redhat.com> - 3.24.0-1
- Update to 3.24.0
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.23.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Jun 02 2021 Python Maint <python-maint@redhat.com> - 3.23.0-3
- Rebuilt for Python 3.10
* Tue Mar 30 2021 Miro Hrončok <mhroncok@redhat.com> - 3.23.0-2
- Allow building with setuptools_scm 6+
* Wed Mar 17 2021 Miro Hrončok <mhroncok@redhat.com> - 3.23.0-1
- Update to 3.23.0
* Tue Feb 02 2021 Miro Hrončok <mhroncok@redhat.com> - 3.21.4-1
- Update to 3.21.4
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.21.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Fri Jan 08 2021 Miro Hrončok <mhroncok@redhat.com> - 3.21.0-2
- Rename the installable package to "tox"
* Fri Jan 08 2021 Miro Hrončok <mhroncok@redhat.com> - 3.21.0-1
- Update to 3.21.0
* Mon Sep 07 2020 Tomas Hrnciar <thrnciar@redhat.com> - 3.20.0-1
- Update to 3.20.0
- Fixes rhbz#1874601
* Fri Aug 07 2020 Miro Hrončok <mhroncok@redhat.com> - 3.19.0-1
- Update to 3.19.0
- Fixes rhbz#1861313
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.18.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Thu Jul 23 2020 Miro Hrončok <mhroncok@redhat.com> - 3.18.0-1
- Update to 3.18.0
- Fixes rhbz#1859875
* Tue Jul 14 2020 Miro Hrončok <mhroncok@redhat.com> - 3.17.0-1
- Update to 3.17.0
- Fixes rhbz#1856985
* Thu Jul 09 2020 Miro Hrončok <mhroncok@redhat.com> - 3.16.1-1
- Update to 3.16.1
- Fixes rhbz#1851519
* Mon Jun 08 2020 Miro Hrončok <mhroncok@redhat.com> - 3.15.2-1
- Update to 3.15.2 (#1844689)
* Mon Jun 01 2020 Charalampos Stratakis <cstratak@redhat.com> - 3.15.1-1
- Update to 3.15.1 (#1838137)
* Sat May 23 2020 Miro Hrončok <mhroncok@redhat.com> - 3.15.0-2
- Rebuilt for Python 3.9
* Wed May 13 2020 Tomas Hrnciar <thrnciar@redhat.com> - 3.15.0-1
- Update to 3.15.0
- Stop recommending Python 3.4
* Thu Mar 19 2020 Tomas Hrnciar <thrnciar@redhat.com> - 3.14.6-1
- Update to 3.14.6
* Thu Feb 06 2020 Miro Hrončok <mhroncok@redhat.com> - 3.14.3-1
- Update to 3.14.3 (#1725939)
- Fix invocation with Python 3.9 (#1798929) - Fix invocation with Python 3.9 (#1798929)
- Recommend Python 3.9 - Recommend Python 3.9
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 3.13.2-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Thu Oct 03 2019 Miro Hrončok <mhroncok@redhat.com> - 3.13.2-4
- Rebuilt for Python 3.8.0rc1 (#1748018)
* Fri Aug 16 2019 Miro Hrončok <mhroncok@redhat.com> - 3.13.2-3
- Rebuilt for Python 3.8
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 3.13.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Mon Jul 08 2019 Miro Hrončok <mhroncok@redhat.com> - 3.13.2-1
- Update to 3.13.2 (#1699032)
* Tue Apr 30 2019 Miro Hrončok <mhroncok@redhat.com> - 3.9.0-1
- Update to 3.9.0
- Obsolete detox
- License is MIT
* Fri Feb 15 2019 Lumír Balhar <lbalhar@redhat.com> - 3.5.3-3 * Fri Feb 15 2019 Lumír Balhar <lbalhar@redhat.com> - 3.5.3-3
- Recommend Python 3.8 - Recommend Python 3.8
+1 -1
View File
@@ -1 +1 @@
SHA512 (tox-3.27.1.tar.gz) = 89be82a1e0374ce3e281e63bdf36d1619878c46ba5e2a3b45ee28ed3a3ab13b1f7030ad27efabb866a084fb813d1e146ad9fa81f22580904d0e261a94fde0689 SHA512 (tox-3.5.3.tar.gz) = d93fd44af6e62d0ceb756894f2b6d3fc695f7a797069422c93a1d82eb62542227f900ed19505cb6f77345a9c03fd1080f017638fa623d985c4f6ded48aad5545
-88
View File
@@ -1,88 +0,0 @@
#!/usr/bin/python3
"""
Several packages with various Python interpreters *Supplement* tox.
*Supplements* is a reverse dependency to *Recommends*.
See https://lists.fedoraproject.org/archives/list/python-devel@lists.fedoraproject.org/thread/NVVUXSVSPFQOWIGBE2JNI67HEO7R63ZQ/
This script:
1) figures out all packages in the enabled repositories supplementing tox
2) ensures there is a venv.sh test for each of them in tests.yml
That way, when we change tox (update, patch, etc.),
we will always test it with all Pythons that supplement it.
"""
import shlex
import subprocess
import sys
import yaml
def parse_python_test_arg(command):
tokens = shlex.split(command)
for token in tokens:
if token.startswith('PYTHON='):
return token.removeprefix('PYTHON=')
# only check VERSION if PYTHON was not found
for token in tokens:
if token.startswith('VERSION='):
return 'python' + token.removeprefix('VERSION=')
raise RuntimeError(f'Could not determine the Python version from `{command}`')
# First, construct a set of various Pythons we test, e.g. {python3.10, python3.7, pypy3.6, ...}
tested_pythons = set()
with open('tests.yml') as f:
tests_yml = yaml.safe_load(f)
# this nested structure access is quite fragile,
# but at least it should fail the test if we reach to a wrong place
for test in tests_yml[-1]['roles'][0]['tests']:
for value in test.values():
run = value['run']
if run.endswith('./venv.sh'):
tested_pythons.add(parse_python_test_arg(run))
print('Tested Pythons found in tests.yml:', file=sys.stderr)
for python in sorted(tested_pythons):
print(' ', python, file=sys.stderr)
# Get all packages that supplement tox,
# no repo explicitly specified means we use the enabled repos on the CI system which should be what we want
repoquery_result = subprocess.check_output(['dnf', 'repoquery', '--whatsupplements', 'tox'], text=True)
supplementing_pkgs = set(repoquery_result.splitlines())
# It gets quite tricky, since packages like "pypy" can supplement tox, we get a set of provides for all of them
supplementing_pkgs_provides = {}
for nvra in supplementing_pkgs:
repoquery_result = subprocess.check_output(['dnf', '-q', 'repoquery', '--provides', nvra], text=True)
provides = set(repoquery_result.splitlines())
unversioned_provides = {provide.split(' ')[0] for provide in provides}
supplementing_pkgs_provides[nvra.rsplit('-', 2)[0]] = unversioned_provides
# We use this hack to treat -devel and -libs packages as if they were not such
def normalize_name(pkgname):
for suffix in '-devel', '-libs':
if pkgname.endswith(suffix):
return pkgname.removesuffix(suffix)
return pkgname
# Now, for each package that supplements tox, we check if there is a tested Python that *is* it
exit_code = 0
for pkg, provides in supplementing_pkgs_provides.items():
if normalize_name(pkg) in tested_pythons:
print(f'{pkg} is tested', file=sys.stderr)
continue
for provide in provides:
if normalize_name(provide) in tested_pythons:
print(f'{pkg} is tested (via {provide})', file=sys.stderr)
break
else:
print(f'{pkg} is NOT tested', file=sys.stderr)
exit_code = 1
sys.exit(exit_code)
+15 -68
View File
@@ -1,41 +1,22 @@
--- ---
- hosts: localhost - hosts: localhost
tags:
- classic
tasks:
- dnf:
name: "*"
state: latest
- hosts: localhost
tags:
- classic
pre_tasks:
- import_role:
name: standard-test-source
vars:
fetch_only: True
roles: roles:
- role: standard-test-basic - role: standard-test-basic
tags:
- classic
repositories: repositories:
- repo: "https://src.fedoraproject.org/tests/python.git" - repo: "https://src.fedoraproject.org/tests/python.git"
dest: "python" dest: "python"
- repo: "https://src.fedoraproject.org/rpms/pyproject-rpm-macros.git"
dest: "pyproject-rpm-macros"
tests: tests:
- mock_with_tests:
dir: .
run: pyproject-rpm-macros/tests/mocktest.sh python-tox --enable-network --with tests
- all_supplementing_pythons:
dir: tests
run: ./all_supplementing_pythons.py
- smoke27: - smoke27:
dir: python/smoke dir: python/smoke
run: VERSION=2.7 METHOD=virtualenv ./venv.sh run: VERSION=2.7 METHOD=virtualenv ./venv.sh
- smoke35_optional: - smoke34:
dir: python/smoke dir: python/smoke
run: VERSION=3.5 INSTALL_OR_SKIP=true ./venv.sh run: VERSION=3.4 ./venv.sh
- smoke35:
dir: python/smoke
run: VERSION=3.5 ./venv.sh
- smoke36: - smoke36:
dir: python/smoke dir: python/smoke
run: VERSION=3.6 ./venv.sh run: VERSION=3.6 ./venv.sh
@@ -48,50 +29,16 @@
- smoke39: - smoke39:
dir: python/smoke dir: python/smoke
run: VERSION=3.9 ./venv.sh run: VERSION=3.9 ./venv.sh
- smoke310:
dir: python/smoke
run: VERSION=3.10 ./venv.sh
- smoke311:
dir: python/smoke
run: VERSION=3.11 ./venv.sh
- smoke312:
dir: python/smoke
run: VERSION=3.12 ./venv.sh
- smoke_pypy37_optional:
dir: python/smoke
run: PYTHON=pypy3.7 VERSION=3.7 INSTALL_OR_SKIP=true ./venv.sh
- smoke_pypy38:
dir: python/smoke
run: PYTHON=pypy3.8 VERSION=3.8 ./venv.sh
- smoke_pypy39:
dir: python/smoke
run: PYTHON=pypy3.9 VERSION=3.9 ./venv.sh
- pyproject_pytest:
dir: pyproject-rpm-macros/tests
run: ./mocktest.sh python-pytest
- pyproject_pluggy:
dir: pyproject-rpm-macros/tests
run: ./mocktest.sh python-pluggy
- pyproject_openqa_client:
dir: pyproject-rpm-macros/tests
run: ./mocktest.sh python-openqa_client
required_packages: required_packages:
- gcc - gcc
- virtualenv - virtualenv
- python2.7 - python27
- python3.6 - python34
- python3.7 - python35
- python3.8 - python36
- python3.9 - python37
- python3.10-devel - python38
- python3.11-devel - python39
- python3.12-devel
- python2-devel - python2-devel
- pypy3.8-devel - python3-devel
- pypy3.9-devel
- python3-tox - python3-tox
- dnf
- mock
- rpmdevtools
- rpm-build
- python3-pyyaml