envlist =
check_configure,
docker-ubuntu-trusty-toolchain-gcc_9-minimal,
docker-debian-bullseye-standard,
docker-fedora-34-standard,
docker-archlinux-latest-maximal,
docker-manylinux-2_24-i686-standard,
docker-conda-forge-standard,
requires =
tox>=4.2.7
tox<4.14.1
skipsdist = true
passenv =
EXTRA_CONFIGURE_ARGS
EXTRA_SAGE_PACKAGES
TARGETS_PRE
TARGETS_OPTIONAL
docker: EXTRA_DOCKER_BUILD_ARGS
docker: EXTRA_DOCKER_TAGS
docker: DOCKER_TAG
docker: DOCKER_BUILDKIT
docker: BUILDKIT_INLINE_CACHE
docker: DOCKER_HOST
docker: HOME
docker: DOCKER_TARGETS
docker: DOCKER_PUSH_REPOSITORY
docker: DOCKER_CONFIG_FILE
docker-incremental: FROM_DOCKER_REPOSITORY
docker-incremental: FROM_DOCKER_TARGET
docker-incremental: FROM_DOCKER_TAG
local: MAKE
local: PREFIX
local: SAGE_NUM_THREADS
local: SKIP_SYSTEM_PKG_INSTALL
local: SKIP_BOOTSTRAP
local: SKIP_CONFIGURE
local: OPENBLAS_CONFIGURE
local-direct: *
GITHUB_ACTIONS
setenv =
BOOTSTRAP=./bootstrap
SAGE_DOWNLOAD_FILE_OPTIONS=--no-check-certificate
WITH_SYSTEM_SPKG=yes
IGNORE_MISSING_SYSTEM_PACKAGES=no
maximal: IGNORE_MISSING_SYSTEM_PACKAGES=yes
SAGE_PACKAGE_LIST_ARGS=--has-file=spkg-configure.m4 :standard:
recommended: EXTRA_SAGE_PACKAGES_3=_recommended $(head -n 1 build/pkgs/_recommended/dependencies)
incremental: EXTRA_SAGE_PACKAGES_4=git
develop: EXTRA_SAGE_PACKAGES_4=_develop $(head -n 1 build/pkgs/_develop/dependencies)
minimal: SAGE_PACKAGE_LIST_ARGS=_prereq
maximal: SAGE_PACKAGE_LIST_ARGS=:standard: :optional:
sitepackages: ENABLE_SYSTEM_SITE_PACKAGES=yes
sitepackages: CONFIG_CONFIGURE_ARGS_SITEPACKAGES=--enable-system-site-packages
conda-environment: SAGE_PACKAGE_LIST_ARGS=_prereq
conda-environment-{src,dev}: CONFIG_CONFIGURE_ARGS_SITEPACKAGES=--enable-system-site-packages
EXTRA_SAGE_PACKAGES_0=_bootstrap
nobootstrap: EXTRA_SAGE_PACKAGES_0=
local: HOME={envdir}
local: SYSTEM=auto
docker: BASE_TAG=latest
ubuntu: SYSTEM=debian
ubuntu: BASE_IMAGE=ubuntu
ubuntu-toolchain: EXTRA_REPOSITORY_1=ppa:ubuntu-toolchain-r/test
ubuntu-toolchain-trusty: EXTRA_SYSTEM_PACKAGES=binutils-2.26
ubuntu-toolchain-trusty: EXTRA_PATH=/usr/lib/binutils-2.26/bin
ubuntu-deadsnakes: EXTRA_REPOSITORY_2=ppa:deadsnakes/ppa
ubuntu: EXTRA_REPOSITORIES={env:EXTRA_REPOSITORY_1:} {env:EXTRA_REPOSITORY_2:}
ubuntu-trusty: BASE_TAG=trusty
ubuntu-trusty: IGNORE_MISSING_SYSTEM_PACKAGES=yes
ubuntu-xenial: BASE_TAG=xenial
ubuntu-xenial: IGNORE_MISSING_SYSTEM_PACKAGES=yes
ubuntu-bionic: BASE_TAG=bionic
ubuntu-bionic: IGNORE_MISSING_SYSTEM_PACKAGES=yes
ubuntu-focal: BASE_TAG=focal
ubuntu-focal: IGNORE_MISSING_SYSTEM_PACKAGES=yes
ubuntu-jammy: BASE_TAG=jammy
ubuntu-lunar: BASE_TAG=lunar
ubuntu-mantic: BASE_TAG=mantic
ubuntu-noble: BASE_TAG=noble
ubuntu-noble: IGNORE_MISSING_SYSTEM_PACKAGES=yes
debian: SYSTEM=debian
debian: BASE_IMAGE=debian
debian-jessie: BASE_TAG=jessie
debian-jessie: IGNORE_MISSING_SYSTEM_PACKAGES=yes
debian-stretch: BASE_TAG=stretch
debian-stretch: IGNORE_MISSING_SYSTEM_PACKAGES=yes
debian-buster: BASE_TAG=buster
debian-buster: IGNORE_MISSING_SYSTEM_PACKAGES=yes
debian-bullseye: BASE_TAG=bullseye
debian-bullseye: IGNORE_MISSING_SYSTEM_PACKAGES=yes
debian-bookworm: BASE_TAG=bookworm
debian-trixie: BASE_TAG=trixie
debian-trixie: IGNORE_MISSING_SYSTEM_PACKAGES=yes
debian-sid: BASE_TAG=sid
linuxmint: SYSTEM=debian
linuxmint: IGNORE_MISSING_SYSTEM_PACKAGES=yes
linuxmint-17: BASE_IMAGE=linuxmintd/mint17
linuxmint-18: BASE_IMAGE=linuxmintd/mint18
linuxmint-19: BASE_IMAGE=linuxmintd/mint19
linuxmint-19.1: BASE_IMAGE=linuxmintd/mint19.1
linuxmint-19.2: BASE_IMAGE=linuxmintd/mint19.2
linuxmint-19.3: BASE_IMAGE=linuxmintd/mint19.3
linuxmint-20: BASE_IMAGE=linuxmintd/mint20
linuxmint-20.1: BASE_IMAGE=linuxmintd/mint20.1
linuxmint-20.2: BASE_IMAGE=linuxmintd/mint20.2
linuxmint-20.3: BASE_IMAGE=linuxmintd/mint20.3
linuxmint-21: BASE_IMAGE=linuxmintd/mint21
linuxmint-21.1: BASE_IMAGE=linuxmintd/mint21.1
linuxmint-21.2: BASE_IMAGE=linuxmintd/mint21.2
linuxmint-21.3: BASE_IMAGE=linuxmintd/mint21.3
fedora: SYSTEM=fedora
fedora: BASE_IMAGE=fedora
fedora: IGNORE_MISSING_SYSTEM_PACKAGES=yes
fedora-26: BASE_TAG=26
fedora-27: BASE_TAG=27
fedora-28: BASE_TAG=28
fedora-29: BASE_TAG=29
fedora-30: BASE_TAG=30
fedora-31: BASE_TAG=31
fedora-32: BASE_TAG=32
fedora-33: BASE_TAG=33
fedora-34: BASE_TAG=34
fedora-35: BASE_TAG=35
fedora-36: BASE_TAG=36
fedora-37: BASE_TAG=37
fedora-38: BASE_TAG=38
fedora-39: BASE_TAG=39
fedora-40: BASE_TAG=40
fedora-41: BASE_TAG=41
scientificlinux: SYSTEM=fedora
scientificlinux: BASE_IMAGE=scientificlinux/sl
scientificlinux: IGNORE_MISSING_SYSTEM_PACKAGES=yes
scientificlinux-6: BASE_TAG=6
scientificlinux-7: BASE_TAG=7
centos: SYSTEM=fedora
centos: BASE_IMAGE=centos
centos: IGNORE_MISSING_SYSTEM_PACKAGES=yes
centos-7: BASE_TAG=centos7
centos-7: BOOTSTRAP=sed -i.bak s/https/http/ .upstream.d/*mirror_list; ./bootstrap
centos-stream: BASE_IMAGE=quay.io/centos/centos
centos-stream: BASE_TAG=stream
centos-stream-8: BASE_TAG=stream8
centos-stream-9: BASE_TAG=stream9
almalinux: SYSTEM=fedora
almalinux: BASE_IMAGE=almalinux
almalinux: IGNORE_MISSING_SYSTEM_PACKAGES=yes
almalinux-8: BASE_TAG=8
almalinux-9: BASE_TAG=9
gentoo: SYSTEM=gentoo
gentoo: BASE_IMAGE=sheerluck/sage-on-gentoo-stage4
gentoo-python3.10: BASE_TAG=latest-py10
gentoo-python3.11: BASE_TAG=latest-py11
gentoo-python3.12: BASE_TAG=latest-py12
gentoo: IGNORE_MISSING_SYSTEM_PACKAGES=no
archlinux: SYSTEM=arch
archlinux: BASE_IMAGE=archlinux
archlinux: IGNORE_MISSING_SYSTEM_PACKAGES=yes
slackware: SYSTEM=slackware
slackware: BASE_IMAGE=vbatts/slackware
slackware-14.2: BASE_TAG=14.2
slackware-15.0: BASE_TAG=15.0
slackware-current: BASE_TAG=current
slackware: IGNORE_MISSING_SYSTEM_PACKAGES=no
voidlinux: SYSTEM=void
voidlinux: BASE_IMAGE=ghcr.io/void-linux/void-glibc-full
voidlinux-musl: BASE_IMAGE=ghcr.io/void-linux/void-musl-full
voidlinux-minimal: BASE_IMAGE=ghcr.io/void-linux/void-glibc
voidlinux-musl-minimal: BASE_IMAGE=ghcr.io/void-linux/void-musl
voidlinux: IGNORE_MISSING_SYSTEM_PACKAGES=no
alpine: SYSTEM=alpine
alpine: BASE_IMAGE=alpine
alpine-edge: BASE_TAG=edge
alpine: IGNORE_MISSING_SYSTEM_PACKAGES=yes
conda: SYSTEM=conda
conda: USE_CONDARC=/dev/null
conda-forge: BASE_IMAGE=continuumio/miniconda3
conda-forge: USE_CONDARC=condarc.yml
conda-forge: IGNORE_MISSING_SYSTEM_PACKAGES=no
conda-anaconda3: BASE_IMAGE=continuumio/anaconda3
conda-anaconda3: IGNORE_MISSING_SYSTEM_PACKAGES=yes
nixos: SYSTEM=nix
nixos: BASE_IMAGE=nixos/nix
opensuse: SYSTEM=opensuse
opensuse: BASE_IMAGE=opensuse/leap
opensuse: IGNORE_MISSING_SYSTEM_PACKAGES=yes
opensuse-42: BASE_TAG=42
opensuse-15.0: BASE_TAG=15.0
opensuse-15.1: BASE_TAG=15.1
opensuse-15.2: BASE_TAG=15.2
opensuse-15.3: BASE_TAG=15.3
opensuse-15.4: BASE_TAG=15.4
opensuse-15.5: BASE_TAG=15.5
opensuse-15: BASE_TAG=15
opensuse-tumbleweed: BASE_IMAGE=opensuse/tumbleweed
opensuse-tumbleweed: IGNORE_MISSING_SYSTEM_PACKAGES=no
arm32v5: ARCH_IMAGE_PREFIX=arm32v5/
arm32v6: ARCH_IMAGE_PREFIX=arm32v6/
arm32v7: ARCH_IMAGE_PREFIX=arm32v7/
arm64v8: ARCH_IMAGE_PREFIX=arm64v8/
i386: ARCH_IMAGE_PREFIX=i386/
ppc64le: ARCH_IMAGE_PREFIX=ppc64le/
s390x: ARCH_IMAGE_PREFIX=s390x/
ubuntu-arm64: BASE_IMAGE=ubuntu-core
ubuntu-arm64: ARCH_IMAGE_PREFIX=multiarch/
ubuntu-arm64: ARCH_TAG_PREFIX=arm64-
ubuntu-armhf: BASE_IMAGE=ubuntu-core
ubuntu-armhf: ARCH_IMAGE_PREFIX=multiarch/
ubuntu-armhf: ARCH_TAG_PREFIX=armhf-
raspbian: SYSTEM=debian
raspbian: ARCH_IMAGE_PREFIX=
raspbian: IGNORE_MISSING_SYSTEM_PACKAGES=yes
raspbian-jessie: BASE_IMAGE=raspbian/jessie
raspbian-stretch: BASE_IMAGE=raspbian/stretch
raspbian-buster: BASE_IMAGE=raspbian/stretch
raspbian-buster: DIST_UPGRADE=s/stretch/buster/g
linuxmint: ARCH_IMAGE_PREFIX=
linuxmint: ARCH_IMAGE_SUFFIX=-amd64
linuxmint-i386: ARCH_IMAGE_SUFFIX=-i386
manylinux: SYSTEM=fedora
manylinux: IGNORE_MISSING_SYSTEM_PACKAGES=yes
manylinux: BASE_IMAGE=quay.io/pypa/manylinux2014
manylinux-1: BASE_IMAGE=quay.io/pypa/manylinux1
manylinux-1: BOOTSTRAP=./bootstrap -D
manylinux-2010: BASE_IMAGE=quay.io/pypa/manylinux2010
manylinux-2014: BASE_IMAGE=quay.io/pypa/manylinux2014
manylinux-2_24: SYSTEM=debian
manylinux-2_24: BASE_IMAGE=quay.io/pypa/manylinux_2_24
manylinux-2_28: BASE_IMAGE=quay.io/pypa/manylinux_2_28
manylinux-{2_24,2_28}: BOOTSTRAP=ACLOCAL_PATH=/usr/share/aclocal ./bootstrap
manylinux: ARCH_IMAGE_PREFIX=
manylinux: ARCH_IMAGE_SUFFIX=_x86_64
manylinux-i686: ARCH_IMAGE_SUFFIX=_i686
manylinux-i386: ARCH_IMAGE_SUFFIX=_i686
manylinux-aarch64: ARCH_IMAGE_SUFFIX=_aarch64
manylinux-ppc64le: ARCH_IMAGE_SUFFIX=_ppc64le
manylinux-s390x: ARCH_IMAGE_SUFFIX=_s390x
ubuntu-nvidia-cuda: BASE_IMAGE=nvidia/cuda
centos-nvidia-cuda: BASE_IMAGE=nvidia/cuda
nvidia-cuda: ARCH_TAG_PREFIX=11.0-devel-
nvidia-cuda-11.0: ARCH_TAG_PREFIX=11.0-devel-
ubuntu-focal-nvidia-cuda: BASE_TAG=ubuntu20.04
ubuntu-bionic-nvidia-cuda: BASE_TAG=ubuntu18.04
ubuntu-xenial-nvidia-cuda: BASE_TAG=ubuntu16.04
docker: FULL_BASE_IMAGE_AND_TAG={env:ARCH_IMAGE_PREFIX:}{env:BASE_IMAGE}{env:ARCH_IMAGE_SUFFIX:}:{env:ARCH_TAG_PREFIX:}{env:BASE_TAG}{env:ARCH_TAG_SUFFIX:}
docker-incremental: FULL_BASE_IMAGE_AND_TAG={env:FROM_DOCKER_REPOSITORY:ghcr.io/sagemath/sage/}sage-$(echo {envname} | sed -E "s/(docker-|-incremental|-sitepackages)//g")-{env:FROM_DOCKER_TARGET:with-targets}:{env:FROM_DOCKER_TAG:dev}
docker-incremental-{develop,recommended,maximal}: SKIP_SYSTEM_PKG_INSTALL=yes
docker-incremental-sitepackages: SKIP_SYSTEM_PKG_INSTALL=no
docker-nobootstrap: BOOTSTRAP=./bootstrap -D
docker: CONFIG_CONFIGURE_ARGS_ROOT=--enable-build-as-root
local: SHARED_CACHE_DIR={toxworkdir}/Caches
local: SETENV=:
local: SETENV_CONFIGURE=:
local-nobootstrap: BOOTSTRAP=:
local-!direct: PATH=/usr/bin:/bin:/usr/sbin:/sbin
local-sudo: __SUDO=--sudo
local-root: CONFIG_CONFIGURE_ARGS_ROOT=--enable-build-as-root
homebrew: SYSTEM=homebrew
local-homebrew: HOMEBREW={envdir}/homebrew
local-homebrew-opthomebrew: HOMEBREW=/opt/homebrew
local-{homebrew-usrlocal,nohomebrew}: HOMEBREW=/usr/local
local-macos-nohomebrew: PATH={env:HOMEBREW}/opt/xz/bin:{env:HOMEBREW}/opt/gpatch/bin:{env:HOMEBREW}/opt/cmake/bin:/usr/bin:/bin:/usr/sbin:/sbin
local-macos-nohomebrew: CPATH={env:HOMEBREW}/opt/xz/include
local-homebrew: PATH={env:HOMEBREW}/bin:/usr/bin:/bin:/usr/sbin:/sbin
local-{homebrew-nokegonly,nohomebrew}: BOOTSTRAP=ACLOCAL_PATH="$HOMEBREW/opt/gettext/share/aclocal:$ACLOCAL_PATH" PATH="$HOMEBREW/opt/gettext/bin/:$HOMEBREW/bin:$PATH" ./bootstrap
local-homebrew-!nokegonly: SETENV=. .homebrew-build-env
local-homebrew: IGNORE_MISSING_SYSTEM_PACKAGES=no
macports: SYSTEM=macports
local-macports: MP_PREFIX={envdir}/macports
local-macports-optlocal: MP_PREFIX=/opt/local
local-macports-optlocal: SUDO=sudo
local-macports-optlocal: __SUDO=--sudo
local-macports: PATH={env:MP_PREFIX}/bin:/usr/bin:/bin:/usr/sbin:/sbin
local-macports: CPATH={env:MP_PREFIX}/include
local-macports: LIBRARY_PATH={env:MP_PREFIX}/lib
local-macports: SETENV=eval $(build/bin/sage-print-system-package-command {env:SYSTEM} setup-build-env)
local-conda: CONDA_PREFIX={envdir}/conda
local-conda: PATH={env:CONDA_PREFIX}/bin:/usr/bin:/bin:/usr/sbin:/sbin
local-conda: CONDA_PKGS_DIRS={env:SHARED_CACHE_DIR}/conda_pkgs
local-conda: CONDA_OS=$(uname | sed 's/^Darwin/MacOSX/;')
local-conda: CONDA_ARCH=$(uname -m)
local-conda-forge: CONDA_INSTALLER_URL_BASE=https://github.com/conda-forge/miniforge/releases/latest/download/
local-conda-forge: CONDA_INSTALLER_FILE=Miniforge3-{env:CONDA_OS}-{env:CONDA_ARCH}.sh
local-conda-miniconda: CONDA_INSTALLER_URL_BASE=https://repo.anaconda.com/miniconda/
local-conda-miniconda: CONDA_INSTALLER_FILE=Miniconda3-latest-{env:CONDA_OS}-{env:CONDA_ARCH}.sh
local-conda: SETENV=. {env:CONDA_PREFIX}/bin/activate base
local-conda-environment: CONDA_SAGE_ENVIRONMENT=sage-build
local-conda-environment: CONDA_SAGE_ENVIRONMENT_DIR=
local-conda-environment-src: CONDA_SAGE_ENVIRONMENT=sage
local-conda-environment-src: CONDA_SAGE_ENVIRONMENT_DIR=src/
local-conda-environment: CONDA_SAGE_ENVIRONMENT_FILE=environment-{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}.yml
local-conda-environment-optional: CONDA_SAGE_ENVIRONMENT_FILE=environment-optional-{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}.yml
local-conda-environment-dev: CONDA_SAGE_ENVIRONMENT=sage-dev
local-conda-environment-dev: CONDA_SAGE_ENVIRONMENT_DIR=src/
local-conda-environment-dev: CONDA_SAGE_ENVIRONMENT_FILE=environment-dev-{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}.yml
local-conda-environment: SETENV_CONFIGURE=( {env:CONDA_PREFIX}/bin/conda env create -n {env:CONDA_SAGE_ENVIRONMENT} --file {env:CONDA_SAGE_ENVIRONMENT_DIR:}{env:CONDA_SAGE_ENVIRONMENT_FILE} || {env:CONDA_PREFIX}/bin/conda env update -n {env:CONDA_SAGE_ENVIRONMENT} --file {env:CONDA_SAGE_ENVIRONMENT_DIR:}{env:CONDA_SAGE_ENVIRONMENT_FILE} ) && . {env:CONDA_PREFIX}/bin/activate {env:CONDA_SAGE_ENVIRONMENT}
PYTHON_MAJOR=3
PYTHON_MINOR=10
python3.9: PYTHON_MINOR=9
python3.10: PYTHON_MINOR=10
python3.11: PYTHON_MINOR=11
python3.12: PYTHON_MINOR=12
CONFIG_CONFIGURE_ARGS_1=--with-system-python3=yes
python3_spkg: CONFIG_CONFIGURE_ARGS_1=--without-system-python3
python3.9,python3.10,python3.11,python3.12: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python=python{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}
macos-python3_xcode: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python=/usr/bin/python3
macos-{python3_xcode,nohomebrew}-{python3.9}: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python=/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}/bin/python3
homebrew-{python3.9,python3.10,python3.11,python3.12}: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python={env:HOMEBREW}/opt/python@{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}/bin/python3
macos-python3_pythonorg: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python=/Library/Frameworks/Python.framework/Versions/{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}/bin/python3
macports-{python3.8,python3.9,python3.10,python3.11,python3.12}: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python={env:MP_PREFIX}/bin/python{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}
manylinux-standard: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python=/opt/python/cp{env:PYTHON_MAJOR}{env:PYTHON_MINOR}-cp{env:PYTHON_MAJOR}{env:PYTHON_MINOR}/bin/python3
conda: CONFIG_CONFIGURE_ARGS_1=--with-system-python3=force --with-python=python3
conda: EXTRA_SAGE_PACKAGES_5=_bootstrap _prereq liblzma libffi libpng
python3.9,python3.10,python3.11,python3.12: EXTRA_SAGE_PACKAGES_5=_python{env:PYTHON_MAJOR}.{env:PYTHON_MINOR} _bootstrap _prereq liblzma libffi libpng
manylinux-{python3.9,python3.10,python3.11,python3.12}: EXTRA_SAGE_PACKAGES_5=_bootstrap liblzma bzip2 libffi libpng
macos-python3_pythonorg: EXTRA_SAGE_PACKAGES_5=_bootstrap _prereq liblzma libffi libpng
macos-python3_xcode: EXTRA_SAGE_PACKAGES_5=_bootstrap _prereq liblzma libffi libpng
{centos-stream,almalinux}-8-python3.9: EXTRA_SYSTEM_PACKAGES=python39 python39-devel
gcc_spkg: CONFIG_CONFIGURE_ARGS_2=--without-system-gcc
gcc_8: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=gcc-8 CXX=g++-8 FC=gfortran-8
gcc_8: EXTRA_SAGE_PACKAGES_2=_gcc8
gcc_9: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=gcc-9 CXX=g++-9 FC=gfortran-9
gcc_9: EXTRA_SAGE_PACKAGES_2=_gcc9
gcc_10: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=gcc-10 CXX=g++-10 FC=gfortran-10
gcc_10: EXTRA_SAGE_PACKAGES_2=_gcc10
gcc_11: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=gcc-11 CXX=g++-11 FC=gfortran-11
gcc_11: EXTRA_SAGE_PACKAGES_2=_gcc11
gcc_12: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=gcc-12 CXX=g++-12 FC=gfortran-12
gcc_12: EXTRA_SAGE_PACKAGES_2=_gcc12
gcc_13: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=gcc-13 CXX=g++-13 FC=gfortran-13
gcc_13: EXTRA_SAGE_PACKAGES_2=_gcc13
gcc_14: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=gcc-14 CXX=g++-14 FC=gfortran-14
gcc_14: EXTRA_SAGE_PACKAGES_2=_gcc14
centos-7-devtoolset: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force
centos-7-devtoolset-gcc_9: DEVTOOLSET=9
centos-7-devtoolset-gcc_10: DEVTOOLSET=10
centos-7-devtoolset-gcc_11: DEVTOOLSET=11
centos-7-devtoolset-gcc_12: DEVTOOLSET=12
llvm: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC=clang CXX=clang++
llvm: EXTRA_SAGE_PACKAGES_2=llvm
homebrew-llvm: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC={env:HOMEBREW}/opt/llvm/bin/clang CXX={env:HOMEBREW}/opt/llvm/bin/clang++
macos-nohomebrew: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC="$CONFIGURED_CC" CXX="$CONFIGURED_CXX" --without-system-gmp --without-system-mpfr --without-system-readline --without-system-boost_cropped
macos-nohomebrew: CONFIGURED_CXX=g++ -isysroot {env:MACOS_SDK}
macos-nohomebrew: CONFIGURED_CC=gcc -isysroot {env:MACOS_SDK}
macos-nohomebrew: LIBGD_CONFIGURE=--without-freetype --without-raqm --without-fontconfig --without-jpeg --without-liq --without-xpm --without-tiff --without-webp --without-heif --without-avif
macos-nohomebrew: FREETYPE_CONFIGURE=--without-harfbuzz
macos-nohomebrew: PILLOW_BUILD_EXT=--disable-platform-guessing --disable-jpeg2000 --disable-imagequant --disable-tiff --disable-lcms --disable-webp --disable-webpmux --disable-xcb
macos-nohomebrew: ZLIB_ROOT={env:MACOS_SDK}/usr
macports: CONFIG_CONFIGURE_ARGS_2=--with-system-gcc=force CC="$CONFIGURED_CC" CXX="$CONFIGURED_CXX"
macports: CONFIGURED_CC=gcc -isysroot {env:MACOS_SDK}
macports: CONFIGURED_CXX=g++ -isysroot {env:MACOS_SDK}
macports-clang_13: CONFIGURED_CC=clang-mp-13 -isysroot {env:MACOS_SDK}
macports-clang_13: CONFIGURED_CXX=clang-mp-13 -isysroot {env:MACOS_SDK}
{macos,macports}: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
macos-10.14: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk
macos-10.14: MACOSX_DEPLOYMENT_TARGET=10.14.6
macos-10.15: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
macos-10.15: MACOSX_DEPLOYMENT_TARGET=10.15
macos-11.1: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk
macos-11.1: MACOSX_DEPLOYMENT_TARGET=11.1
macos-11.3: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX11.3.sdk
macos-11.3: MACOSX_DEPLOYMENT_TARGET=11.3
macos-12.1: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk
macos-12.1: MACOSX_DEPLOYMENT_TARGET=12.1
macos-12.3: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX12.3.sdk
macos-12.3: MACOSX_DEPLOYMENT_TARGET=12.3
macos-13.3: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX13.3.sdk
macos-13.3: MACOSX_DEPLOYMENT_TARGET=13.3
macos-14.0: MACOS_SDK=/Library/Developer/CommandLineTools/SDKs/MacOSX14.0.sdk
macos-14.0: MACOSX_DEPLOYMENT_TARGET=14.0
xcode_11.7: XCODE_VERSION=11.7
xcode_12.4: XCODE_VERSION=12.4
xcode_12.5.1: XCODE_VERSION=12.5.1
xcode_13.0: XCODE_VERSION=13.0
xcode_13.1: XCODE_VERSION=13.1
xcode_13.2.1: XCODE_VERSION=13.2.1
xcode_13.3.1: XCODE_VERSION=13.3.1
xcode_13.4.1: XCODE_VERSION=13.4.1
xcode_14.0.1: XCODE_VERSION=14.0.1
xcode_14.1: XCODE_VERSION=14.1
xcode_14.2: XCODE_VERSION=14.2
xcode_14.3.1: XCODE_VERSION=14.3.1
xcode_15.0: XCODE_VERSION=15.0
CONFIGURE_ARGS=--enable-experimental-packages --enable-download-from-upstream-url {env:CONFIG_CONFIGURE_ARGS_ROOT:} {env:CONFIG_CONFIGURE_ARGS_SITEPACKAGES:} {env:CONFIG_CONFIGURE_ARGS_1:} {env:CONFIG_CONFIGURE_ARGS_2:} {env:EXTRA_CONFIGURE_ARGS:}
ALL_EXTRA_SAGE_PACKAGES={env:EXTRA_SAGE_PACKAGES_0:} {env:EXTRA_SAGE_PACKAGES_1:} {env:EXTRA_SAGE_PACKAGES_2:} {env:EXTRA_SAGE_PACKAGES_3:} {env:EXTRA_SAGE_PACKAGES_4:} {env:EXTRA_SAGE_PACKAGES_5:} {env:EXTRA_SAGE_PACKAGES:}
sitepackages: IGNORE_MISSING_SYSTEM_PACKAGES=yes
docker: BUILDKIT_PROGRESS=plain
platform =
local-macos: darwin
allowlist_externals =
bash
docker: docker
homebrew: brew
commands =
local: bash -c 'if [ ! -d {env:HOME}/Library/Caches ]; then mkdir -p {env:SHARED_CACHE_DIR} && mkdir -p {env:HOME}/Library && ln -sf {toxworkdir}/Caches {env:HOME}/Library/; fi'
local-macos: bash -c 'if [ -n "{env:XCODE_VERSION:}" ]; then sudo xcode-select -s /Applications/Xcode_{env:XCODE_VERSION:}.app; fi;'
homebrew: bash -c 'if [ ! -x {env:HOMEBREW}/bin/brew ]; then git clone --depth 1 https://github.com/Homebrew/brew {env:HOMEBREW}; fi'
homebrew: bash -c 'case "{env:SKIP_SYSTEM_PKG_INSTALL:}" in 1|y*|Y*);; *) export PATH="build/bin:$PATH" && PACKAGES=$(sage-get-system-packages homebrew $(sage-package list {env:SAGE_PACKAGE_LIST_ARGS}) {env:ALL_EXTRA_SAGE_PACKAGES}); {env:HOMEBREW}/bin/brew install $PACKAGES; {env:HOMEBREW}/bin/brew upgrade $PACKAGES;; esac'
local-macports: bash -c 'if [ ! -x "{env:MP_PREFIX}/bin/port" ]; then (mkdir -p {envdir}/macports-src && cd {envdir}/macports-src && curl -L https://distfiles.macports.org/MacPorts/MacPorts-2.7.2.tar.gz | tar xz --strip 1 && ./configure --prefix="{env:MP_PREFIX}" --with-applications-dir=$MP_PREFIX/Applications --with-no-root-privileges --without-startupitems && make && {env:SUDO:} make install); fi'
local-macports: bash -c 'case "{env:SKIP_SYSTEM_PKG_INSTALL:}" in 1|y*|Y*);; *) {env:SUDO:} port selfupdate && {env:SUDO:} port upgrade outdated && PACKAGES=$(build/bin/sage-get-system-packages {env:SYSTEM} $(PATH=build/bin:$PATH build/bin/sage-package list {env:SAGE_PACKAGE_LIST_ARGS}) {env:ALL_EXTRA_SAGE_PACKAGES}); eval $(build/bin/sage-print-system-package-command {env:SYSTEM} {env:__SUDO:} --yes --no-install-recommends install $PACKAGES) || [ "$IGNORE_MISSING_SYSTEM_PACKAGES" = yes ] && echo "(ignoring errors)" ;; esac'
local-conda: bash -c 'mkdir -p {env:SHARED_CACHE_DIR}/conda_pkgs {env:CONDA_PREFIX}'
local-conda: bash -c 'echo > {env:CONDA_PREFIX}/.condarc "pkgs_dirs:"'
local-conda: bash -c 'echo >> {env:CONDA_PREFIX}/.condarc " - {env:SHARED_CACHE_DIR}/conda_pkgs"'
local-conda: bash -c 'cat {env:USE_CONDARC} >> {env:CONDA_PREFIX}/.condarc'
local-conda: bash -c 'if [ ! -x {env:CONDA_PREFIX}/bin/conda ]; then mkdir {env:CONDA_PREFIX}/conda-meta && curl -L {env:CONDA_INSTALLER_URL_BASE}{env:CONDA_INSTALLER_FILE} -C - -o {env:SHARED_CACHE_DIR}/{env:CONDA_INSTALLER_FILE} && bash {env:SHARED_CACHE_DIR}/{env:CONDA_INSTALLER_FILE} -b -f -p {env:CONDA_PREFIX}; fi'
local-conda: bash -c 'case "{env:SKIP_SYSTEM_PKG_INSTALL:}" in 1|y*|Y*);; *) {env:SETENV} && {env:CONDA_PREFIX}/bin/conda update -n base --yes conda;; esac'
local-conda: bash -c 'export PATH="build/bin:$PATH" && PACKAGES=$(sage-get-system-packages conda $(sage-package list {env:SAGE_PACKAGE_LIST_ARGS}) {env:ALL_EXTRA_SAGE_PACKAGES}); {env:SETENV} && {env:CONDA_PREFIX}/bin/conda install --yes --quiet $PACKAGES'
local-{root,sudo}: bash -c 'case "{env:SKIP_SYSTEM_PKG_INSTALL:}" in 1|y*|Y*);; *) eval $(build/bin/sage-print-system-package-command {env:SYSTEM} {env:__SUDO:} update) ;; esac'
local-{root,sudo}: bash -c 'case "{env:SKIP_SYSTEM_PKG_INSTALL:}" in 1|y*|Y*);; *) export PATH="build/bin:$PATH" && eval $(sage-print-system-package-command {env:SYSTEM} {env:__SUDO:} --yes --no-install-recommends --spkg install $(sage-package list {env:SAGE_PACKAGE_LIST_ARGS}) {env:ALL_EXTRA_SAGE_PACKAGES}) || [ "$IGNORE_MISSING_SYSTEM_PACKAGES" = yes ] && echo "(ignoring errors)" ;; esac'
local: bash -c 'touch {envlogdir}/config.log; ln -sf {envlogdir}/config.log .; if [ ! -d logs -o -L logs ]; then rm -f logs; ln -sf {envlogdir} logs; fi'
local: bash -c 'if [ ! -d prefix -o -L prefix ]; then rm -f prefix; ln -sf {env:PREFIX:{envdir}/local} prefix; fi'
docker: bash -c 'BUILD_TAG={env:DOCKER_TAG:$(git describe --dirty --always)} .github/workflows/write-dockerfile.sh {env:SYSTEM} "{env:SAGE_PACKAGE_LIST_ARGS:}" {env:WITH_SYSTEM_SPKG} {env:IGNORE_MISSING_SYSTEM_PACKAGES} "{env:ALL_EXTRA_SAGE_PACKAGES}" > {envdir}/Dockerfile'
docker-{arm64,armhf}: docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker: bash -c 'if [ x"{env:DOCKER_CONFIG_FILE:}" != x ]; then mkdir -p {envdir}/.docker && ln -sf $(realpath "{env:DOCKER_CONFIG_FILE:}") {envdir}/.docker/; fi'
docker: bash -c 'for docker_target in {env:DOCKER_TARGETS:with-targets}; do \
docker: BUILD_IMAGE_STEM=sage-$(echo {envname} | sed "s/docker-//;s/-incremental//"); \
docker: BUILD_IMAGE=$DOCKER_PUSH_REPOSITORY$BUILD_IMAGE_STEM-$docker_target; \
docker: BUILD_TAG={env:DOCKER_TAG:$(git describe --dirty --always)}; \
docker: TAG_ARGS=$(for tag in $BUILD_TAG {env:EXTRA_DOCKER_TAGS:}; do echo --tag $BUILD_IMAGE:$tag; done); \
docker: DOCKER_BUILDKIT={env:DOCKER_BUILDKIT:1}; \
docker: docker build . -f {envdir}/Dockerfile \
docker: --target $docker_target \
docker: $TAG_ARGS \
docker: --build-arg TARGETS_PRE="$(if test -n "$TARGETS_PRE"; then echo $TARGETS_PRE; else echo {posargs:all-sage-local}; fi)" \
docker: --build-arg TARGETS="{posargs:build}" \
docker: --build-arg TARGETS_OPTIONAL="{env:TARGETS_OPTIONAL:ptest}" \
docker: {env:EXTRA_DOCKER_BUILD_ARGS:}; status=$?; \
docker: unset CONTAINER; \
docker: if [ $status != 0 ]; then \
docker: if [ $DOCKER_BUILDKIT = 0 ]; then \
docker: BUILD_TAG="$BUILD_TAG-failed"; CONTAINER=$(docker ps -l -q); docker commit $CONTAINER $BUILD_IMAGE:$BUILD_TAG; \
docker: else \
docker: unset BUILD_TAG; echo "DOCKER_BUILDKIT=1, so we cannot commit and tag the failed image"; \
docker: fi; \
docker: fi; \
docker: if [ -n "$BUILD_TAG" ]; then \
docker: echo "Copying logs from the container to {envdir}/sage/"; \
docker: rm -f {envdir}/sage/STATUS; \
docker: docker run $BUILD_IMAGE:$BUILD_TAG bash -c " \
docker: tar -c --ignore-failed-read -f - \
docker: /sage/STATUS /sage/logs /sage/{prefix,venv}/var/lib/sage/installed \
docker: ~/.sage/timings2.json /sage/pkgs/*/.tox/*/.sage/timings2.json \
docker: /sage/pkgs/*/.tox/*/logs 2> /dev/null" \
docker: | (cd {envdir} && tar xf -); \
docker: if [ -f {envdir}/sage/STATUS ]; then status=$(cat {envdir}/sage/STATUS); fi; \
docker: fi; \
docker: unset PUSH_TAGS; \
docker: if [ -n "$BUILD_TAG" ]; then \
docker: if [ $status != 0 ]; then \
docker: BUILD_TAG="${BUILD_TAG%-failed}-failed"; PUSH_TAGS=$BUILD_IMAGE:$BUILD_TAG; \
docker: else \
docker: PUSH_TAGS=$(echo $BUILD_IMAGE:$BUILD_TAG; for tag in {env:EXTRA_DOCKER_TAGS:}; do echo "$BUILD_IMAGE:$tag"; done); \
docker: fi; \
docker: echo $BUILD_IMAGE:$BUILD_TAG >> {envdir}/Dockertags; \
docker: fi; \
docker: if [ x"{env:DOCKER_PUSH_REPOSITORY:}" != x -a x"$PUSH_TAGS" != x ]; then \
docker: echo Pushing $PUSH_TAGS; \
docker: for tag in $PUSH_TAGS; do \
docker: if docker push $tag; then echo $tag >> {envdir}/Dockertags.pushed; else echo "(ignoring errors)"; fi; \
docker: done; \
docker: fi; \
docker: if [ $status != 0 ]; then exit $status; fi; \
docker: done'
local: bash -c 'export PATH={env:PATH} && {env:SETENV} && \
local: case "{env:SKIP_BOOTSTRAP:}" in 1|y*|Y*);; *) {env:BOOTSTRAP} ;; esac && \
local: {env:SETENV_CONFIGURE} && \
local: case "{env:SKIP_CONFIGURE:}" in 1|y*|Y*);; *) ./configure --prefix={env:PREFIX:{envdir}/local} {env:CONFIGURE_ARGS} ;; esac && \
local: case "{posargs:}" in \
local: bash) PS1="(tox -e {envname}) \w\$ " bash -i; exit ;; \
local: config*) ;; \
local: *) make -k V=0 base-toolchain ;; \
local: esac && \
local: make -k V=0 SAGE_CHECK=warn SAGE_CHECK_PACKAGES="!cython,!python3,!cysignals,!linbox,!ppl,!cmake,!rpy2" {env:TARGETS_PRE:} {posargs:build} && \
local: ( [ -z "{env:TARGETS_OPTIONAL:}" ] || make -k V=0 SAGE_CHECK=warn SAGE_CHECK_PACKAGES="!cython,!python3,!cysignals,!linbox,!ppl,!cmake,!rpy2" {env:TARGETS_OPTIONAL:} || echo "(error ignored)" ) '
allowlist_externals =
bash
setenv =
HOME = {envdir}
commands =
./bootstrap
bash -c 'test -z "$(./configure --quiet 2>&1)" || (echo >&2 Error: "configure --quiet" is not quiet; exit 1)'
description =
Update the platforms tested in CI Linux (.github/workflows/docker.yml),
create .devcontainer/portability-*/devcontainer.json files for all
these platforms, and generate a table with dev container links for
the developer guide.
passenv =
SYSTEM_FACTORS
PACKAGE_FACTORS
DOCKER_TARGETS
FROM_DOCKER_REPOSITORY
setenv =
DEFAULT_SYSTEM_FACTORS=\
ubuntu-{xenial-toolchain-gcc_9,bionic-gcc_8,focal,jammy,lunar,mantic,noble} \
debian-{bullseye,bookworm,trixie,sid} \
linuxmint-{20.1,20.2,20.3,21,21.1,21.2,21.3} \
fedora-{30,31,32,33,34,35,36,37,38,39,40,41} \
centos-stream-{9,9-python3.12} \
almalinux-{8-python3.9,9-python3.11} \
gentoo-python{3.10,3.11,3.12} \
archlinux-latest \
opensuse-15.5-gcc_11-python3.11 \
opensuse-tumbleweed{-python3.10,} \
conda-forge-python3.11 \
ubuntu-bionic-gcc_8-i386 \
debian-bullseye-i386
COLOR_with_system_packages = %23696969
COLOR_configured = %23696969
COLOR_with_targets_pre = %235d8a4c
COLOR_with_targets = %2350ab2e
COLOR_with_targets_optional = %2344cc11
COLOR_minimal_with_system_packages = %23696969
COLOR_minimal_configured = %23696969
COLOR_minimal_with_targets_pre = %23677895
COLOR_minimal_with_targets = %236686c1
COLOR_minimal_with_targets_optional = %236495ed
COLOR_maximal_with_system_packages = %23696969
COLOR_maximal_configured = %23696969
COLOR_maximal_with_targets_pre = %238f6b8d
COLOR_maximal_with_targets = %23b46eb2
COLOR_maximal_with_targets_optional = %23da70d6
commands =
bash -c 'DEFAULT_SYSTEM_FACTORS=$(echo {env:DEFAULT_SYSTEM_FACTORS}); \
for SYSTEM_FACTOR in {env:SYSTEM_FACTORS:$DEFAULT_SYSTEM_FACTORS}; do \
for PACKAGE_FACTOR in {env:PACKAGE_FACTORS:minimal standard}; do \
for DOCKER_TARGET in {env:DOCKER_TARGETS:with-targets}; do \
DIR=.devcontainer/portability-$SYSTEM_FACTOR-$PACKAGE_FACTOR; \
mkdir -p $DIR; \
ln -sf ../portability-Dockerfile $DIR/portability-Dockerfile; \
sed -e s/@SYSTEM_FACTOR@/$SYSTEM_FACTOR/ \
-e s/@PACKAGE_FACTOR@/$PACKAGE_FACTOR/ \
-e s/@DOCKER_TARGET@/$DOCKER_TARGET/ \
-e s/@DOCKER_TAG@/dev/ .devcontainer/portability-devcontainer.json.in \
> $DIR/devcontainer.json; \
done; \
echo "Wrote $DIR/"; \
done; \
done'
bash -c 'DEFAULT_SYSTEM_FACTORS=$(echo {env:DEFAULT_SYSTEM_FACTORS}); \
FILE=.github/workflows/docker.yml; \
(sed -n "1,/update_docker_platforms.*below/p" $FILE; \
echo " default: >-"; \
echo " ["; \
for SYSTEM_FACTOR in {env:SYSTEM_FACTORS:$DEFAULT_SYSTEM_FACTORS}; do \
echo " \"$SYSTEM_FACTOR\","; \
done; \
echo " ]"; \
sed -n "/update_docker_platforms.*above/,\$p" $FILE) \
> $FILE.new; \
mv $FILE.new $FILE; \
echo "Wrote $FILE"'
bash -c 'DEFAULT_SYSTEM_FACTORS=$(echo {env:DEFAULT_SYSTEM_FACTORS}); \
FILE=src/doc/en/developer/portability_platform_table.rst; \
(for SYSTEM_FACTOR in {env:SYSTEM_FACTORS:$DEFAULT_SYSTEM_FACTORS}; do \
for PACKAGE_FACTOR in {env:PACKAGE_FACTORS:minimal standard maximal}; do \
REPO="{env:FROM_DOCKER_REPOSITORY:ghcr.io/sagemath/sage/}sage-$SYSTEM_FACTOR-$PACKAGE_FACTOR"; \
for DOCKER_TARGET in {env:DOCKER_TARGETS:with-system-packages configured with-targets-pre with-targets with-targets-optional}; do \
eval COLOR=\$COLOR_${PACKAGE_FACTOR}_${DOCKER_TARGET//-/_}; \
if [ x$COLOR = x ]; then eval COLOR=\$COLOR_${DOCKER_TARGET//-/_}; fi; \
case $DOCKER_TARGET in \
with-system-packages) BADGE="size?tag=dev&label=$DOCKER_TARGET&color=$COLOR";; \
*) BADGE="latest_tag?ignore=latest,dev,*-failed&label=$DOCKER_TARGET&color=$COLOR";; \
esac; \
echo ".. |image-$SYSTEM_FACTOR-$PACKAGE_FACTOR-$DOCKER_TARGET| image:: https://ghcr-badge.egpl.dev/${REPO\#ghcr.io/}-$DOCKER_TARGET/$BADGE"; \
echo " :target: https://$REPO-$DOCKER_TARGET"; \
echo ""; \
done; \
echo ".. |codespace-$SYSTEM_FACTOR-$PACKAGE_FACTOR| image:: https://github.com/codespaces/badge.svg"; \
echo " :target: https://codespaces.new/sagemath/sage?devcontainer_path=.devcontainer%2Fportability-$SYSTEM_FACTOR-$PACKAGE_FACTOR%2Fdevcontainer.json"; \
echo ""; \
done; \
done; \
echo ".. list-table::"; \
echo " :widths: 50 50 40"; \
echo " :header-rows: 1"; \
echo " :stub-columns: 0"; \
echo ""; \
echo " * - Platform"; \
echo " - Images"; \
echo " - "; \
for SYSTEM_FACTOR in {env:SYSTEM_FACTORS:$DEFAULT_SYSTEM_FACTORS}; do \
SYSTEM_FACTOR_LABEL="**${SYSTEM_FACTOR/-/**-}"; \
for PACKAGE_FACTOR in {env:PACKAGE_FACTORS:minimal standard maximal}; do \
case $SYSTEM_FACTOR-$PACKAGE_FACTOR in \
conda*-minimal) continue;; \
esac; \
PACKAGE_FACTOR_LABEL="‑*$PACKAGE_FACTOR*"; \
for ROW_DOCKER_TARGETS in "{env:DOCKER_TARGETS:with-system-packages with-targets-pre with-targets with-targets-optional}"; do \
if [ -n "$SYSTEM_FACTOR_LABEL" ]; then \
echo " * - $SYSTEM_FACTOR_LABEL "; SYSTEM_FACTOR_LABEL=""; \
echo " "; \
echo " $PACKAGE_FACTOR_LABEL"; PACKAGE_FACTOR_LABEL=""; \
else \
echo " * - $PACKAGE_FACTOR_LABEL"; PACKAGE_FACTOR_LABEL=""; \
fi; \
echo -n " -"; \
for DOCKER_TARGET in $ROW_DOCKER_TARGETS; do \
echo -n " |image-$SYSTEM_FACTOR-$PACKAGE_FACTOR-$DOCKER_TARGET|"; \
case $PACKAGE_FACTOR:$DOCKER_TARGET in maximal:with-targets-pre) break;; esac; \
done; \
echo ""; \
if [ $PACKAGE_FACTOR != maximal ]; then \
echo " - |codespace-$SYSTEM_FACTOR-$PACKAGE_FACTOR|"; \
else \
echo " -"; \
fi; \
done; \
done; \
done) > $FILE; \
echo "Wrote $FILE"'
description =
Update the conda-lock files.
deps =
conda-lock
commands =
{envpython} .github/workflows/conda-lock-update.py
passenv =
HOME
envdir = {toxworkdir}/src
allowlist_externals = tox
commands = tox -c {toxinidir}/src/tox.ini -e {envname} -- {posargs}
description =
run the Sage doctester (same as "sage -t")
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
run the Sage doctester with Coverage.py
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
run the Sage doctester with Coverage.py, generate HTML report
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
run the Sage doctester with Coverage.py, generate XML report
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
give information about doctest coverage of files (same as "sage --coverage[all]")
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
display how long each component of Sage takes to start up (same as "sage --startuptime")
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
check against the Python style conventions of PEP8
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
check against Sage's minimal style conventions
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
check whether some forbidden patterns appear
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
check for misspelled words in source code (use -w -i to fix)
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
allowlist_externals = {[sage_src]allowlist_externals}
commands = tox -c {toxinidir}/src/tox.ini -e {envname} -- {posargs:{toxinidir}}
description =
run the static typing checker pyright
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
validate Python docstrings markup as reStructuredText
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
check Cython files for code style
passenv = {[sage_src]passenv}
envdir = {[sage_src]envdir}
commands = {[sage_src]commands}
allowlist_externals = {[sage_src]allowlist_externals}
description =
check against Python style conventions
passenv = {[sage_src]passenv}
RUFF_OUTPUT_FORMAT
envdir = {[sage_src]envdir}
allowlist_externals = {[sage_src]allowlist_externals}
commands = tox -c {toxinidir}/src/tox.ini -e {envname} -- {posargs:src/sage/}
description =
check against Sage's minimal style conventions
passenv = {[sage_src]passenv}
RUFF_OUTPUT_FORMAT
envdir = {[sage_src]envdir}
allowlist_externals = {[sage_src]allowlist_externals}
commands = tox -c {toxinidir}/src/tox.ini -e {envname} -- {posargs:src/sage/}