CI(GHActions): Run tests under Python 3.13 #155
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test, build, publish | |
# Run tests (all branches), | |
# for tags build wheels, publish wheels to PyPI and Github Releases. | |
on: [push, pull_request] | |
jobs: | |
run-tests: | |
env: | |
not_in_conda: "[]" | |
not_in_aarch64: "['3.5']" | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-latest, windows-latest] | |
python-version: ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13", "=3.9[build=*_pypy]"] | |
exclude: | |
- os: windows-latest | |
python-version: "2.7" | |
- os: macos-latest | |
python-version: "2.7" | |
- os: macos-latest | |
python-version: "3.5" | |
- os: macos-latest | |
python-version: "3.6" | |
- os: macos-latest | |
python-version: "3.7" | |
- os: macos-latest | |
python-version: "=3.9[build=*_pypy]" | |
- os: windows-latest | |
python-version: "=3.9[build=*_pypy]" | |
include: | |
- os: ubuntu-latest | |
os-name: Linux | |
pip-cache-path: ~/.cache/pip | |
- os: macos-latest | |
os-name: MacOS | |
pip-cache-path: ~/Library/Caches/pip | |
- os: windows-latest | |
os-name: w32 | |
pip-cache-path: ~\AppData\Local\pip\Cache | |
name: Python ${{ matrix.python-version }} @ ${{ matrix.os-name }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
# Setup Python/pip | |
- uses: actions/checkout@v4 | |
- uses: conda-incubator/setup-miniconda@v3 | |
with: | |
miniforge-version: latest | |
python-version: ${{ matrix.python-version }} | |
if: ${{ !contains(fromJSON(env.not_in_conda), matrix.python-version) }} | |
# Python 3.7 is needed for ghactions-release script | |
- name: Install additional Python 3.7 | |
run: | | |
conda create -n py37 --yes python=3.7 | |
py37_prefix="`echo $CONDA_PREFIX | sed 's/__setup_conda/py37/'`" | |
ln -s "$py37_prefix/bin/python" "$CONDA_PREFIX/bin/python3.7" | |
ln -s "$py37_prefix/bin/pip" "$CONDA_PREFIX/bin/pip3.7" | |
python3.7 --version | |
pip3.7 --version | |
shell: bash | |
if: ${{ matrix.python-version == '2.7' && runner.os != 'Windows' && startsWith(github.ref, 'refs/tags/') }} | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
if: ${{ contains(fromJSON(env.not_in_conda), matrix.python-version) }} | |
- uses: actions/cache@v3 | |
with: | |
path: ~/conda_pkgs_dir | |
key: ${{ runner.os }}-conda | |
- name: Cache pip | |
uses: actions/cache@v3 | |
with: | |
path: ${{ matrix.pip-cache-path }} | |
key: ${{ runner.os }}-pip | |
# Setup tox | |
- name: Install dependencies | |
run: | | |
python --version | |
python -m pip || python -m ensurepip --default-pip --upgrade | |
python -m pip install --upgrade pip setuptools wheel | |
pip --version | |
pip install --upgrade virtualenv "tox >= 3.15, < 4" | |
shell: bash -el {0} | |
- name: Set TOXENV | |
run: | | |
python -c " | |
import os, sys | |
ld_library_path = None | |
if hasattr(sys, 'pypy_version_info'): | |
toxenv = 'pypy3' | |
else: | |
pyver = '%d%d' % tuple(sys.version_info[:2]) | |
if (pyver == '27') and (os.name == 'posix'): # Python 2.7 on Linux requires `$LD_LIBRARY_PATH` | |
ld_library_path = os.path.join( | |
os.path.dirname(os.path.dirname(sys.executable)), 'lib') | |
toxenv = 'py%s' % pyver | |
if os.name == 'posix': | |
toxenv += ',py%s-flake8' % pyver | |
with open(os.environ['GITHUB_ENV'], 'a') as f: | |
if ld_library_path: | |
f.write('LD_LIBRARY_PATH=' + ld_library_path + '\n') | |
f.write('TOXENV=' + toxenv + '\n') | |
" | |
shell: bash -el {0} | |
- name: Run tox | |
run: | | |
python -c "import os; print(os.environ['TOXENV'])" | |
tox --version | |
tox | |
shell: bash -el {0} | |
- name: Build and publish sdist and wheel on Unix | |
run: | | |
pip install -U --ignore-installed certifi # Replace conda-installed | |
devscripts/CI/ghactions-release | |
env: | |
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} | |
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} | |
if: ${{ !startsWith(matrix.python-version, 'pypy') && runner.os != 'Windows' && startsWith(github.ref, 'refs/tags/') }} | |
- name: Build and publish wheel on w32 | |
run: | | |
pip install -U pip setuptools twine wheel | |
python setup.py bdist_wheel | |
twine upload --disable-progress-bar --skip-existing dist\* | |
if: ${{ !startsWith(matrix.python-version, 'pypy') && runner.os == 'Windows' && startsWith(github.ref, 'refs/tags/') }} | |
env: | |
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} | |
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} | |
- name: Build and publish wheel on Linux/aarch64 | |
uses: uraimo/run-on-arch-action@v2 | |
with: | |
arch: aarch64 | |
distro: ubuntu22.04 | |
env: | | |
PY_VER: "${{ matrix.python-version }}" | |
RUNNER_OS: ${{ runner.os }} | |
TWINE_USERNAME: ${{ secrets.TWINE_USERNAME }} | |
TWINE_PASSWORD: ${{ secrets.TWINE_PASSWORD }} | |
install: | | |
set -ex | |
apt-get update -q -y | |
apt-get install -q -y curl gcc patchelf | |
run: | | |
set -ex | |
curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-$(uname)-$(uname -m).sh" | |
bash Miniforge3-$(uname)-$(uname -m).sh -b -u -p "$HOME"/miniforge3 | |
source "$HOME"/miniforge3/etc/profile.d/conda.sh | |
#conda update -n base -c conda-forge --yes conda | |
pyv="`echo $PY_VER | sed 's/\.//'`" | |
conda create -n py$pyv --yes python=$PY_VER | |
conda activate py$pyv | |
python --version | |
python -m pip || python -m ensurepip --default-pip --upgrade | |
python -m pip install --upgrade pip setuptools wheel | |
pip --version | |
if [ $PY_VER = 2.7 ]; then | |
conda create -n py37 --yes python=3.7 | |
ln -s "$HOME"/miniforge3/envs/py37/bin/python "$HOME"/miniforge3/envs/py27/bin/python3.7 | |
ln -s "$HOME"/miniforge3/envs/py37/bin/pip "$HOME"/miniforge3/envs/py27/bin/pip3.7 | |
python3.7 --version | |
pip3.7 --version | |
fi | |
exec devscripts/CI/ghactions-release | |
if: ${{ !contains(fromJSON(env.not_in_aarch64), matrix.python-version) && runner.os == 'Linux' && startsWith(github.ref, 'refs/tags/') }} | |
- name: Publish wheel to Releases | |
uses: ncipollo/release-action@v1 | |
with: | |
artifacts: "dist/*" | |
allowUpdates: true | |
bodyFile: "LATEST-CHANGES.rst" | |
omitBodyDuringUpdate: true | |
omitNameDuringUpdate: true | |
omitPrereleaseDuringUpdate: true | |
prerelease: true | |
replacesArtifacts: false | |
skipIfReleaseExists: false | |
updateOnlyUnreleased: false | |
if: ${{ !startsWith(matrix.python-version, 'pypy') && startsWith(github.ref, 'refs/tags/') }} |