Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .ci/setup-conda.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#! /usr/bin/env bash

set -e

if [ -z "$CONDA_PREFIX" ]; then
echo >&2 "CONDA_PREFIX needs to be set"
exit 1
fi

# https://docs.anaconda.com/anaconda/install/silent-mode/
# https://docs.anaconda.com/anaconda/user-guide/tasks/shared-pkg-cache/
# https://www.anaconda.com/conda-configuration-engine-power-users/

mkdir -p "$CONDA_PREFIX"
echo > "$CONDA_PREFIX"/.condarc "# Generated by .ci/setup-conda.sh"

if [ -n "$SHARED_CACHE_DIR" ]; then
mkdir -p "$SHARED_CACHE_DIR"/conda_pkgs
echo >> "$CONDA_PREFIX"/.condarc "pkgs_dirs:"
echo >> "$CONDA_PREFIX"/.condarc " - $SHARED_CACHE_DIR/conda_pkgs"
fi
if [ -n "$USE_CONDARC" ]; then
cat $USE_CONDARC >> "$CONDA_PREFIX"/.condarc
fi
if [ ! -x "$CONDA_PREFIX"/bin/conda ]; then
mkdir -p "$CONDA_PREFIX"/conda-meta
curl -L "$CONDA_INSTALLER_URL_BASE$CONDA_INSTALLER_FILE" -C - -o "$SHARED_CACHE_DIR"/"$CONDA_INSTALLER_FILE"
bash "$SHARED_CACHE_DIR"/"$CONDA_INSTALLER_FILE" -b -f -p "$CONDA_PREFIX"
fi
4 changes: 0 additions & 4 deletions .ci/write-dockerfile.sh
Original file line number Diff line number Diff line change
Expand Up @@ -197,10 +197,6 @@ EOF
RUN="RUN . /opt/conda/etc/profile.d/conda.sh; conda activate base; " # to activate the conda env
;;
*)
cat <<EOF
ARG BASE_IMAGE
FROM \${BASE_IMAGE} as with-system-packages
EOF
INSTALL=$(sage-print-system-package-command $SYSTEM install " ")
;;
esac
Expand Down
109 changes: 67 additions & 42 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,30 @@ setenv =
# default tag is "latest"
#
docker: BASE_TAG=latest

###
### Default Docker images for packaging systems that can also be installed on top
### of other distributions
###

#
# https://hub.docker.com/r/continuumio
#
conda-forge: BASE_IMAGE=continuumio/miniconda3
anaconda3: BASE_IMAGE=continuumio/anaconda3
#
# https://hub.docker.com/r/nixos/nix/
#
nixos: BASE_IMAGE=nixos/nix
#
# https://hub.docker.com/r/linuxbrew/brew
#
docker-{homebrew,linuxbrew}: BASE_IMAGE=linuxbrew/brew

###
### Docker images
###

#
# https://hub.docker.com/_/ubuntu?tab=description
# as of 2024-02, latest=jammy=22.04, rolling=mantic=23.10, devel=noble=24.04
Expand Down Expand Up @@ -377,21 +401,6 @@ setenv =
alpine-edge: BASE_TAG=edge
alpine: IGNORE_MISSING_SYSTEM_PACKAGES=yes
#
# https://hub.docker.com/r/continuumio
#
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
#
# https://hub.docker.com/r/nixos/nix/
#
nixos: SYSTEM=nix
nixos: BASE_IMAGE=nixos/nix
#
# https://hub.docker.com/r/opensuse/leap
# - OpenSUSE Leap 42 was superseded by the Leap 15 series.
# - As of 2023-05, latest = 15 = 15.5
Expand Down Expand Up @@ -515,22 +524,28 @@ setenv =
docker-nobootstrap: BOOTSTRAP=./bootstrap -D
docker: CONFIG_CONFIGURE_ARGS_ROOT=--enable-build-as-root
###
### "local" envs
### "local" envs and overlays
###

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
#
# brew caches downloaded files in ${HOME}/Library/Caches. We share it between different toxenvs.
homebrew: SYSTEM=homebrew
docker-{homebrew,linuxbrew}: HOMEBREW=/home/linuxbrew/.linuxbrew
local-homebrew: HOMEBREW={envdir}/homebrew
# /opt/homebrew is the default install location on arm64 macOS
local-homebrew-opthomebrew: HOMEBREW=/opt/homebrew
# /usr/local is the default install location on x86_64 macOS
local-{homebrew-usrlocal,nohomebrew}: HOMEBREW=/usr/local
local-{homebrew-usrlocal,macos-nohomebrew}: HOMEBREW=/usr/local
# local-macos-nohomebrew: "best effort" isolation to avoid using a homebrew installation in /usr/local
# We use liblzma from the macOS system - which is available but its headers are not (neither is the xz executable).
# So we use /usr/local/opt/xz/{bin,include} (but not lib!).
Expand All @@ -540,8 +555,10 @@ setenv =
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
homebrew: IGNORE_MISSING_SYSTEM_PACKAGES=no
#
# macports
#
macports: SYSTEM=macports
local-macports: MP_PREFIX={envdir}/macports
local-macports-optlocal: MP_PREFIX=/opt/local
Expand All @@ -551,29 +568,44 @@ setenv =
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)
#
# conda
#
conda: SYSTEM=conda
conda: USE_CONDARC=/dev/null
conda-forge: USE_CONDARC=condarc.yml
conda-forge: IGNORE_MISSING_SYSTEM_PACKAGES=no
conda-anaconda3: IGNORE_MISSING_SYSTEM_PACKAGES=yes
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
conda: CONDA_OS=$(uname | sed 's/^Darwin/MacOSX/;')
conda: CONDA_ARCH=$(uname -m)
conda-forge: CONDA_INSTALLER_URL_BASE=https://github.com/conda-forge/miniforge/releases/latest/download/
conda-forge: CONDA_INSTALLER_FILE=Miniforge3-{env:CONDA_OS}-{env:CONDA_ARCH}.sh
conda-miniconda: CONDA_INSTALLER_URL_BASE=https://repo.anaconda.com/miniconda/
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
conda-environment: CONDA_SAGE_ENVIRONMENT=sage-build
conda-environment: CONDA_SAGE_ENVIRONMENT_DIR=
conda-environment-src: CONDA_SAGE_ENVIRONMENT=sage
conda-environment-src: CONDA_SAGE_ENVIRONMENT_DIR=src/
conda-environment-lock:
conda-environment: CONDA_SAGE_ENVIRONMENT_FILE=environment-{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}.yml
conda-environment-optional: CONDA_SAGE_ENVIRONMENT_FILE=environment-optional-{env:PYTHON_MAJOR}.{env:PYTHON_MINOR}.yml
conda-environment-dev: CONDA_SAGE_ENVIRONMENT=sage-dev
conda-environment-dev: CONDA_SAGE_ENVIRONMENT_DIR=src/
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}
#
# Configuration factors
# nix
#
{nixos,nix}: SYSTEM=nix

###
### Configuration factors
###

#
# - python
#
Expand Down Expand Up @@ -740,14 +772,7 @@ commands =
#
# local-conda
#
# https://docs.anaconda.com/anaconda/install/silent-mode/
# https://docs.anaconda.com/anaconda/user-guide/tasks/shared-pkg-cache/
# https://www.anaconda.com/conda-configuration-engine-power-users/
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 'CONDA_INSTALLER_FILE="{env:CONDA_INSTALLER_FILE}" .ci/setup-conda.sh'
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'
#
Expand Down