Skip to content

Commit

Permalink
sagemathgh-37750: CI Build&Test: Fix "test modularized distributions"…
Browse files Browse the repository at this point in the history
… after sagemath#37022

    
<!-- ^ Please provide a concise and informative title. -->
<!-- ^ Don't put issue numbers in the title, do this in the PR
description below. -->
<!-- ^ For example, instead of "Fixes sagemath#12345" use "Introduce new method
to calculate 1 + 2". -->
<!-- v Describe your changes below in detail. -->
<!-- v Why is this change required? What problem does it solve? -->
<!-- v If this PR resolves an open issue, please link to it here. For
example, "Fixes sagemath#12345". -->

- Cherry-picked updates of testing infrastructure from sagemath#35095.
- Add upper version bounds to avoid a regression in 4.14.1
- Fixes sagemath#37734.
- Also removes some unnecessary runs of the "CI Linux Incremental"
workflow.

### 📝 Checklist

<!-- Put an `x` in all the boxes that apply. -->

- [x] The title is concise and informative.
- [ ] The description explains in detail what this PR is about.
- [x] I have linked a relevant issue or discussion.
- [ ] I have created tests covering the changes.
- [ ] I have updated the documentation accordingly.

### ⌛ Dependencies

<!-- List all open PRs that this PR logically depends on. For example,
-->
<!-- - sagemath#12345: short description why this is a dependency -->
<!-- - sagemath#34567: ... -->
    
URL: sagemath#37750
Reported by: Matthias Köppe
Reviewer(s): Kwankyu Lee
  • Loading branch information
Release Manager committed Apr 28, 2024
2 parents 7d65bd3 + aba5aec commit 836825e
Show file tree
Hide file tree
Showing 19 changed files with 184 additions and 23 deletions.
7 changes: 6 additions & 1 deletion .github/workflows/ci-linux-incremental.yml
Expand Up @@ -19,7 +19,12 @@ on:
pull_request:
paths:
- 'build/pkgs/**'
- 'pkgs/**'
- '!build/pkgs/sage_conf/**'
- '!build/pkgs/sage_docbuild/**'
- '!build/pkgs/sage_setup/**'
- '!build/pkgs/sage_sws2rst/**'
- '!build/pkgs/sagelib/**'
- '!build/pkgs/sagemath_*/**'
workflow_dispatch:

concurrency:
Expand Down
48 changes: 40 additions & 8 deletions build/pkgs/sagemath_objects/spkg-check
@@ -1,15 +1,45 @@
#!/usr/bin/env bash
cd src

if [ ! -r tox.ini ]; then
echo "Not testing the package because there is no tox.ini"
exit 0
fi

for lib in "$SAGE_SRC/bin/sage-src-env-config" "$SAGE_SRC/bin/sage-env-config" "$SAGE_SRC/bin/sage-env" "$SAGE_ROOT/build/bin/sage-build-env-config" "$SAGE_ROOT/build/bin/sage-build-env"; do
source "$lib"
if [ $? -ne 0 ]; then
echo >&2 "Error: failed to source $lib"
echo >&2 "Is $SAGE_ROOT the correct SAGE_ROOT?"
exit 1
fi
done

export PIP_NO_INDEX=true
export PIP_FIND_LINKS="file://$SAGE_SPKG_WHEELS"

export TOX_PARALLEL_NO_SPINNER=1
unset tox_args

wheel="$(sed -n '1s,.*@ file://,,p' $SAGE_SPKG_SCRIPTS/$PKG_BASE/spkg-requirements.txt)"
echo Running "tox -r -p auto -v --installpkg $wheel"
tox -r -p auto -v --installpkg "$wheel"
if [ -n "$wheel" ]; then
tox_envs=$(tox -l)
tox_args="-r -p auto -v --installpkg $wheel"
elif [ "$SAGE_EDITABLE" = yes ]; then
tox_envs=$(tox -l | sed s/norequirements/editable/)
# FIXME: Should use -r if sage_setup or another build requirement changes
tox_args="-r -v -v -v -v -e $(echo $tox_envs | sed 's/ /,/g')"
else
echo "Not testing the package because SAGE_WHEELS=$SAGE_WHEELS and SAGE_EDITABLE=$SAGE_EDITABLE"
exit 0
fi

export TOX_PARALLEL_NO_SPINNER=1

echo Running "tox $tox_args"
tox $tox_args
status=$?
case $status:$SAGE_CHECK:$([ -r known-test-failures.json ]; echo $?) in
0:no:*) echo "Not testing the package because SAGE_CHECK=no";;
0:*:0) echo "Passed the test suite (modulo baseline known-test-failures*.json)";;
0:*:*) echo "Passed the test suite";;
*:warn:0) echo "Warning: New failures (not in baseline known-test-failures*.json (ignored)"; status=0;;
Expand All @@ -18,10 +48,12 @@ case $status:$SAGE_CHECK:$([ -r known-test-failures.json ]; echo $?) in
*:yes:*) echo "Failures testing the package";;
esac
# Show summaries of failures (suppress lines ending with '[failed in baseline]')
for f in $(pwd)/.tox/sagepython-sagewheels-nopypi-norequirements*/log/*-command*.log; do
if [ -r "$f" ]; then
echo "$f"
grep '^sage -t.*#[^]]*$' "$f"
fi
for e in $tox_envs; do
for f in $(pwd)/.tox/$e/log/*-command*.log; do
if [ -r "$f" ]; then
echo "$f"
grep '^sage -t.*#[^]]*$' "$f"
fi
done
done
exit $status
4 changes: 4 additions & 0 deletions pkgs/sage-conf_pypi/tox.ini
@@ -1,6 +1,10 @@
[tox]
envlist = py39, py310, py311, py39-user, py310-user, py311-user

requires =
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox<4.14.1

[testenv:.pkg]
basepython = py311
passenv =
Expand Down
4 changes: 4 additions & 0 deletions pkgs/sage-docbuild/tox.ini
Expand Up @@ -8,6 +8,10 @@
#
[tox]

requires =
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox<4.14.1

[testenv]
deps = -rrequirements.txt

Expand Down
4 changes: 4 additions & 0 deletions pkgs/sage-setup/tox.ini
Expand Up @@ -12,6 +12,10 @@
#
[tox]

requires =
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox<4.14.1

[testenv]
deps = -rrequirements.txt

Expand Down
7 changes: 7 additions & 0 deletions pkgs/sagemath-categories/requirements-editable.txt.m4
@@ -0,0 +1,7 @@
include(`sage_spkg_versions.m4')dnl
dnl Same as setup.cfg.m4 install_requires; FIXME: should pin to built wheels.
SPKG_INSTALL_REQUIRES_gmpy2
SPKG_INSTALL_REQUIRES_cysignals
SPKG_INSTALL_REQUIRES_memory_allocator
-e ../sagemath-environment
-e ../sagemath-objects
31 changes: 26 additions & 5 deletions pkgs/sagemath-categories/tox.ini
Expand Up @@ -13,7 +13,9 @@ envlist =
requires =
# Auto-provision a modern tox.
# [pkgenv] added in 4.2 - https://tox.wiki/en/latest/upgrading.html#packaging-configuration-and-inheritance
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox>=4.2
tox<4.14.1

[pkgenv]
# Environment in which to build the sdist.
Expand Down Expand Up @@ -49,6 +51,11 @@ passenv = {[pkgenv]passenv}
setenv = {[pkgenv]setenv}
# Sage scripts such as sage-runtests like to use $HOME/.sage
HOME={envdir}
# Stop 'sage -t --installed' from picking up doc installed in SAGE_LOCAL
SAGE_DOC=/doesnotexist
KNOWN_TEST_FAILURES={toxinidir}/known-test-failures.json
# See src/bin/sage-env
PYDEVD_DISABLE_FILE_VALIDATION=1

allowlist_externals =
bash
Expand All @@ -61,7 +68,7 @@ commands =
{envpython} -c 'import sys; "" in sys.path and sys.path.remove(""); from sage.categories.all import *; SimplicialComplexes(); FunctionFields()'

bash -c 'cd $(python -c "import sys; \"\" in sys.path and sys.path.remove(\"\"); from sage.env import SAGE_LIB; print(SAGE_LIB)") \
&& sage-runtests -p --initial --environment=sage.all__sagemath_categories --probe all --baseline-stats-path={toxinidir}/known-test-failures.json --optional=sage --installed'
&& sage-runtests -p --force-lib --initial --environment=sage.all__sagemath_categories --probe all --baseline-stats-path=$KNOWN_TEST_FAILURES --optional=sage --installed'

[testenv:.tox]
# Allow access to PyPI for auto-provisioning a suitable tox version
Expand All @@ -84,6 +91,11 @@ setenv = {[pkgenv]setenv}

basepython = {env:SAGE_VENV}/bin/python3

[testenv:.pkg-sagepython-sagewheels-nopypi-editable]
config_settings_build_editable =
editable_mode = strict


[testenv:sagepython]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython
Expand All @@ -92,14 +104,23 @@ package_env = .pkg-sagepython
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels-nopypi-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels]
basepython = {env:SAGE_VENV}/bin/python
package_env = .pkg-sagepython

[testenv:sagepython-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython


[testenv:sagepython-sagewheels-nopypi-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels-nopypi-editable]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi-editable
package = editable
deps = -r requirements-editable.txt
config_settings_build_editable =
editable_mode = strict
Empty file.
18 changes: 18 additions & 0 deletions pkgs/sagemath-environment/tox.ini
Expand Up @@ -13,7 +13,9 @@ envlist =
requires =
# Auto-provision a modern tox.
# [pkgenv] added in 4.2 - https://tox.wiki/en/latest/upgrading.html#packaging-configuration-and-inheritance
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox>=4.2
tox<4.14.1

[pkgenv]
# Environment in which to build the sdist.
Expand Down Expand Up @@ -49,6 +51,9 @@ passenv = {[pkgenv]passenv}
setenv = {[pkgenv]setenv}
# Sage scripts such as sage-runtests like to use $HOME/.sage
HOME={envdir}
# Stop 'sage -t --installed' from picking up doc installed in SAGE_LOCAL
SAGE_DOC=/doesnotexist
KNOWN_TEST_FAILURES={toxinidir}/known-test-failures.json

allowlist_externals =
bash
Expand Down Expand Up @@ -78,6 +83,11 @@ setenv = {[pkgenv]setenv}

basepython = {env:SAGE_VENV}/bin/python3

[testenv:.pkg-sagepython-sagewheels-nopypi-editable]
config_settings_build_editable =
editable_mode = strict


[testenv:sagepython]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython
Expand All @@ -98,3 +108,11 @@ package_env = .pkg-sagepython
[testenv:sagepython-sagewheels-nopypi-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels-nopypi-editable]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi-editable
package = editable
deps = -r requirements-editable.txt
config_settings_build_editable =
editable_mode = strict
4 changes: 4 additions & 0 deletions pkgs/sagemath-objects/requirements-editable.txt.m4
@@ -0,0 +1,4 @@
include(`sage_spkg_versions.m4')dnl
dnl Same as setup.cfg.m4 install_requires; FIXME: should pin to built wheels.
SPKG_INSTALL_REQUIRES_gmpy2
SPKG_INSTALL_REQUIRES_cysignals
18 changes: 18 additions & 0 deletions pkgs/sagemath-objects/tox.ini
Expand Up @@ -13,7 +13,9 @@ envlist =
requires =
# Auto-provision a modern tox.
# [pkgenv] added in 4.2 - https://tox.wiki/en/latest/upgrading.html#packaging-configuration-and-inheritance
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox>=4.2
tox<4.14.1

[pkgenv]
# Environment in which to build the sdist.
Expand Down Expand Up @@ -49,6 +51,9 @@ passenv = {[pkgenv]passenv}
setenv = {[pkgenv]setenv}
# Sage scripts such as sage-runtests like to use $HOME/.sage
HOME={envdir}
# Stop 'sage -t --installed' from picking up doc installed in SAGE_LOCAL
SAGE_DOC=/doesnotexist
KNOWN_TEST_FAILURES={toxinidir}/known-test-failures.json

allowlist_externals =
bash
Expand Down Expand Up @@ -82,6 +87,11 @@ setenv = {[pkgenv]setenv}

basepython = {env:SAGE_VENV}/bin/python3

[testenv:.pkg-sagepython-sagewheels-nopypi-editable]
config_settings_build_editable =
editable_mode = strict


[testenv:sagepython]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython
Expand All @@ -102,3 +112,11 @@ package_env = .pkg-sagepython
[testenv:sagepython-sagewheels-nopypi-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels-nopypi-editable]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi-editable
package = editable
deps = -r requirements-editable.txt
config_settings_build_editable =
editable_mode = strict
2 changes: 2 additions & 0 deletions pkgs/sagemath-repl/pyproject.toml.m4
Expand Up @@ -13,8 +13,10 @@ description = "Sage: Open Source Mathematics Software: IPython kernel, Sage prep
dependencies = [
SPKG_INSTALL_REQUIRES_sagemath_objects
SPKG_INSTALL_REQUIRES_sagemath_environment
SPKG_INSTALL_REQUIRES_ipykernel
SPKG_INSTALL_REQUIRES_ipython
SPKG_INSTALL_REQUIRES_ipywidgets
SPKG_INSTALL_REQUIRES_jupyter_client
]
dynamic = ["version"]
include(`pyproject_toml_metadata.m4')dnl'
Expand Down
11 changes: 11 additions & 0 deletions pkgs/sagemath-repl/requirements-editable.txt.m4
@@ -0,0 +1,11 @@
include(`sage_spkg_versions.m4')dnl
dnl Same as setup.cfg.m4 install_requires (+ their install-requires)
dnl FIXME: should pin to built wheels.
SPKG_INSTALL_REQUIRES_gmpy2
SPKG_INSTALL_REQUIRES_cysignals
SPKG_INSTALL_REQUIRES_memory_allocator
SPKG_INSTALL_REQUIRES_ipython
SPKG_INSTALL_REQUIRES_ipywidgets
dnl To be added when ready for editable:
-e ../sagemath-environment
-e ../sagemath-objects
31 changes: 26 additions & 5 deletions pkgs/sagemath-repl/tox.ini
Expand Up @@ -13,7 +13,9 @@ envlist =
requires =
# Auto-provision a modern tox.
# [pkgenv] added in 4.2 - https://tox.wiki/en/latest/upgrading.html#packaging-configuration-and-inheritance
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox>=4.2
tox<4.14.1

[pkgenv]
# Environment in which to build the sdist.
Expand Down Expand Up @@ -49,6 +51,11 @@ passenv = {[pkgenv]passenv}
setenv = {[pkgenv]setenv}
# Sage scripts such as sage-runtests like to use $HOME/.sage
HOME={envdir}
# Stop 'sage -t --installed' from picking up doc installed in SAGE_LOCAL
SAGE_DOC=/doesnotexist
KNOWN_TEST_FAILURES={toxinidir}/known-test-failures.json
# See src/bin/sage-env
PYDEVD_DISABLE_FILE_VALIDATION=1

allowlist_externals =
bash
Expand All @@ -57,7 +64,7 @@ commands =
# Beware of the treacherous non-src layout. "./sage/" shadows the installed sage package.
{envpython} -c 'import sys; "" in sys.path and sys.path.remove(""); import sage.repl.all; import sage.doctest.all'

bash -c 'cd $({envpython} -c "import sys; \"\" in sys.path and sys.path.remove(\"\"); from sage.env import SAGE_LIB; print(SAGE_LIB)") && sage-runtests -p --environment=sage.all__sagemath_repl --baseline-stats-path={toxinidir}/known-test-failures.json --initial --optional=sage sage/repl sage/doctest sage/misc/sage_input.py sage/misc/sage_eval.py'
bash -c 'cd $({envpython} -c "import sys; \"\" in sys.path and sys.path.remove(\"\"); from sage.env import SAGE_LIB; print(SAGE_LIB)") && sage-runtests -p --environment=sage.all__sagemath_repl --baseline-stats-path=$KNOWN_TEST_FAILURES --initial --optional=sage sage/repl sage/doctest sage/misc/sage_input.py sage/misc/sage_eval.py'

[testenv:.tox]
# Allow access to PyPI for auto-provisioning a suitable tox version
Expand All @@ -80,6 +87,11 @@ setenv = {[pkgenv]setenv}

basepython = {env:SAGE_VENV}/bin/python3

[testenv:.pkg-sagepython-sagewheels-nopypi-editable]
config_settings_build_editable =
editable_mode = strict


[testenv:sagepython]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython
Expand All @@ -88,14 +100,23 @@ package_env = .pkg-sagepython
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels-nopypi-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels]
basepython = {env:SAGE_VENV}/bin/python
package_env = .pkg-sagepython

[testenv:sagepython-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython


[testenv:sagepython-sagewheels-nopypi-norequirements]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi

[testenv:sagepython-sagewheels-nopypi-editable]
basepython = {env:SAGE_VENV}/bin/python3
package_env = .pkg-sagepython-sagewheels-nopypi-editable
package = editable
deps = -r requirements-editable.txt
config_settings_build_editable =
editable_mode = strict
2 changes: 2 additions & 0 deletions pkgs/sagemath-standard/tox.ini
Expand Up @@ -62,7 +62,9 @@ envlist =
requires =
# Auto-provision a modern tox.
# [pkgenv] added in 4.2 - https://tox.wiki/en/latest/upgrading.html#packaging-configuration-and-inheritance
# Because of https://github.com/tox-dev/tox/issues/3238, need <4.14.1
tox>=4.2
tox<4.14.1

[pkgenv]
# Environment in which to build the sdist.
Expand Down
3 changes: 2 additions & 1 deletion src/sage/doctest/reporting.py
Expand Up @@ -146,7 +146,8 @@ def were_doctests_with_optional_tag_run(self, tag):
When latex is available, doctests marked with optional tag
``latex`` are run by default since :issue:`32174`::
sage: filename = os.path.join(SAGE_SRC,'sage','misc','latex.py')
sage: # needs SAGE_SRC
sage: filename = os.path.join(SAGE_SRC, 'sage', 'misc', 'latex.py')
sage: DC = DocTestController(DocTestDefaults(), [filename])
sage: DTR = DocTestReporter(DC)
sage: DTR.were_doctests_with_optional_tag_run('latex') # optional - latex
Expand Down

0 comments on commit 836825e

Please sign in to comment.