Skip to content

Run tests in release mode as well #109

Run tests in release mode as well

Run tests in release mode as well #109

name: Python bindings
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
release:
types: [published]
permissions:
contents: read
jobs:
check_format:
name: Check formatting of pySplashsurf crate
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check formatting of pySplashsurf crate
run: cargo fmt -- --check
working-directory: pysplashsurf
generate-stub:
name: Run stub generator
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: moonrepo/setup-rust@v1
- run: |
cargo run --bin stub_gen
working-directory: pysplashsurf
- name: Upload stub as artifact
uses: actions/upload-artifact@v4
with:
name: pysplashsurf.pyi
path: pysplashsurf/pysplashsurf/
# linux_wheels:
# name: Build wheels for "${{ matrix.python-version }}"
# needs: generate-stub
# runs-on: ubuntu-24.04
# strategy:
# fail-fast: false
# matrix:
# include:
# - python-version: "manylinux_x86_64"
# archs: "x86_64"
# enable_test: true
# - python-version: "manylinux_i686"
# archs: "i686"
# enable_test: false
# - python-version: "manylinux_aarch64"
# archs: "aarch64"
# enable_test: false
# - python-version: "manylinux_armv7l"
# archs: "armv7l"
# enable_test: false
# steps:
# - uses: actions/checkout@v4
# - name: Download stub artifact
# uses: actions/download-artifact@v4
# with:
# name: pysplashsurf.pyi
# path: pysplashsurf/pysplashsurf/
# - uses: actions/setup-python@v5
# with:
# python-version: 3.12
# # QEMU is required for non-native archs
# # https://cibuildwheel.pypa.io/en/stable/faq/#emulation
# - name: Set up QEMU
# if: runner.os == 'Linux'
# uses: docker/setup-qemu-action@v3
# with:
# platforms: all
# - name: Install cibuildwheel
# run: python -m pip install cibuildwheel==3.1.3
# - name: Build wheels with tests
# run: python -m cibuildwheel --output-dir wheelhouse pysplashsurf
# if: matrix.enable_test == true
# env:
# CIBW_BUILD: ${{ format('cp312-{0}', matrix.python-version) }}
# CIBW_ARCHS: ${{ matrix.archs }}
# CIBW_BEFORE_ALL_LINUX: curl -sSf https://sh.rustup.rs | sh -s -- -y
# CIBW_ENVIRONMENT_LINUX: "PATH=$HOME/.cargo/bin:$PATH"
# CIBW_TEST_COMMAND: "cargo install --path {project}/splashsurf && pytest pysplashsurf/tests"
# CIBW_TEST_SOURCES: "pysplashsurf/tests"
# CIBW_TEST_REQUIRES: pytest meshio trimesh rtree scipy
# - name: Build wheels without tests
# run: python -m cibuildwheel --output-dir wheelhouse pysplashsurf
# if: matrix.enable_test == false
# env:
# CIBW_BUILD: ${{ format('cp312-{0}', matrix.python-version) }}
# CIBW_ARCHS: ${{ matrix.archs }}
# CIBW_BEFORE_ALL_LINUX: curl -sSf https://sh.rustup.rs | sh -s -- -y
# CIBW_ENVIRONMENT_LINUX: "PATH=$HOME/.cargo/bin:$PATH"
# - name: Upload wheels
# uses: actions/upload-artifact@v4
# with:
# name: wheels-${{ matrix.python-version }}
# path: wheelhouse
linux_wheels:
name: Build wheels for Linux ${{ matrix.target }}
needs: generate-stub
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
target: [x86_64, x86, aarch64, armv7]
steps:
- uses: actions/checkout@v4
- name: Download stub artifact
uses: actions/download-artifact@v4
with:
name: pysplashsurf.pyi
path: pysplashsurf/pysplashsurf/
- uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out wheelhouse --auditwheel repair -m pysplashsurf/Cargo.toml
#sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: 2014
- name: Audit & fix wheels
run: |
pip install auditwheel
auditwheel repair wheelhouse/*.whl
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.target }}
path: wheelhouse
# macos_wheels:
# name: Build wheels for "${{ matrix.python-version }}"
# needs: generate-stub
# runs-on: ${{ matrix.runner }}
# strategy:
# fail-fast: false
# matrix:
# include:
# - runner: macos-13
# python-version: "macosx_x86_64"
# archs: "x86_64"
# macosx_deployment_target: "13.0"
# - runner: macos-14
# python-version: "macosx_arm64"
# archs: "arm64"
# macosx_deployment_target: "14.0"
# steps:
# - uses: actions/checkout@v4
# - name: Download stub artifact
# uses: actions/download-artifact@v4
# with:
# name: pysplashsurf.pyi
# path: pysplashsurf/pysplashsurf/
# - uses: actions/setup-python@v5
# with:
# python-version: 3.12
# - name: Install cibuildwheel
# run: python -m pip install cibuildwheel==3.1.3
# - name: Build wheels
# run: python -m cibuildwheel --output-dir wheelhouse pysplashsurf
# env:
# CIBW_BUILD: ${{ format('cp312-{0}', matrix.python-version) }}
# CIBW_ARCHS: ${{ matrix.archs }}
# CIBW_ENVIRONMENT_MACOS: "MACOSX_DEPLOYMENT_TARGET=${{ matrix.macosx_deployment_target }}"
# CIBW_TEST_COMMAND: "cargo install --path {project}/splashsurf && pytest pysplashsurf/tests"
# CIBW_TEST_SOURCES: "pysplashsurf/tests"
# CIBW_TEST_REQUIRES: pytest meshio trimesh rtree scipy
# - name: Upload wheels
# uses: actions/upload-artifact@v4
# with:
# name: wheels-${{ matrix.python-version }}
# path: wheelhouse
macos_wheels:
name: Build wheels for macOS ${{ matrix.target }}
needs: generate-stub
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- runner: macos-13
target: x86_64
- runner: macos-14
target: aarch64
steps:
- uses: actions/checkout@v4
- name: Download stub artifact
uses: actions/download-artifact@v4
with:
name: pysplashsurf.pyi
path: pysplashsurf/pysplashsurf/
- uses: actions/setup-python@v5
with:
python-version: 3.12
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out wheelhouse -m pysplashsurf/Cargo.toml
#sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Audit & fix wheels
run: |
pip install delocate
delocate-wheel -v wheelhouse/*.whl
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.target }}
path: wheelhouse
# windows_wheels:
# name: Build wheels for "${{ matrix.python-version }}"
# needs: generate-stub
# runs-on: windows-latest
# strategy:
# fail-fast: false
# matrix:
# include:
# - archs: "AMD64"
# python-version: "win_amd64"
# - archs: "x86"
# python-version: "win32"
# steps:
# - uses: actions/checkout@v4
# - name: Download stub artifact
# uses: actions/download-artifact@v4
# with:
# name: pysplashsurf.pyi
# path: pysplashsurf/pysplashsurf/
# - uses: actions/setup-python@v5
# with:
# python-version: 3.12
# - name: Install cibuildwheel
# run: python -m pip install cibuildwheel==3.1.3
# - name: Build wheels
# run: python -m cibuildwheel --output-dir wheelhouse pysplashsurf
# env:
# CIBW_BUILD: ${{ format('cp312-{0}', matrix.python-version) }}
# CIBW_ARCHS: ${{ matrix.archs }}
# # Tests are broken on Windows because trimesh library tries to write temporary files which fails
# #CIBW_TEST_COMMAND: "cargo install --path {project}/splashsurf && pytest pysplashsurf/tests"
# #CIBW_TEST_SOURCES: "pysplashsurf/tests"
# #CIBW_TEST_REQUIRES: pytest meshio trimesh rtree scipy
# - name: Upload wheels
# uses: actions/upload-artifact@v4
# with:
# name: wheels-${{ matrix.python-version }}
# path: wheelhouse
windows_wheels:
name: Build wheels for Windows ${{ matrix.target }}
needs: generate-stub
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
target: [x64, x86]
steps:
- uses: actions/checkout@v4
- name: Download stub artifact
uses: actions/download-artifact@v4
with:
name: pysplashsurf.pyi
path: pysplashsurf/pysplashsurf/
- uses: actions/setup-python@v5
with:
python-version: 3.12
architecture: ${{ matrix.target }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
args: --release --out wheelhouse -m pysplashsurf/Cargo.toml
#sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Audit wheels
run: |
pip install delvewheel
delvewheel show -v wheelhouse/*.whl
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.target }}
path: wheelhouse
sdist:
name: Build source distribution
needs: generate-stub
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download stub artifact
uses: actions/download-artifact@v4
with:
name: pysplashsurf.pyi
path: pysplashsurf/pysplashsurf/
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist -m pysplashsurf/Cargo.toml
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: dist
publish:
name: Publish to PyPI
runs-on: ubuntu-latest
if: ${{ startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch' }}
needs: [linux_wheels, macos_wheels, windows_wheels, sdist, tests, docs]
steps:
- uses: actions/download-artifact@v4
with:
pattern: wheels-*
merge-multiple: true
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install twine
- name: Upload wheels
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
ls
twine upload --skip-existing *.whl *.tar.gz
build_wheel_dev:
name: Build wheel for documentation and tests
runs-on: ubuntu-latest
outputs:
filename: ${{ steps.get_filename.outputs.file_name }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: x86_64
args: --release --out dist -m pysplashsurf/Cargo.toml
manylinux: auto
- name: Get wheel name
id: get_filename
run: |
FILE_NAME=$(ls dist)
echo "file_name=$FILE_NAME" >> $GITHUB_OUTPUT
- name: Upload wheel
uses: actions/upload-artifact@v4
with:
name: doc_tests_wheel
path: dist
docs:
name: Build documentation
needs: build_wheel_dev
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Download wheel
uses: actions/download-artifact@v4
with:
name: doc_tests_wheel
path: dist/
- name: Append output to file
run: |
echo "./dist/${{ needs.build_wheel_dev.outputs.filename }}" >> pysplashsurf/pysplashsurf/docs/requirements.txt
- uses: ammaraskar/sphinx-action@8.2.3
with:
docs-folder: "pysplashsurf/pysplashsurf/docs/"
- uses: actions/upload-artifact@v4
with:
name: DocumentationHTML
path: pysplashsurf/pysplashsurf/docs/build/html/
read_the_docs:
name: Read the Docs trigger
needs: [docs, publish]
runs-on: ubuntu-latest
steps:
- name: Trigger Read the Docs build
run: |
curl -X POST -d "branches=main" -d "token=${{ secrets.READTHEDOCS_TOKEN }}" https://app.readthedocs.org/api/v2/webhook/pysplashsurf/299116/
tests:
name: Run pytest
needs: build_wheel_dev
defaults:
run:
shell: bash -l {0}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- uses: mamba-org/setup-micromamba@v2
with:
environment-file: pysplashsurf/python_environment.yaml
init-shell: >-
bash
- run: |
conda info
conda list
- name: Download wheel
uses: actions/download-artifact@v4
with:
name: doc_tests_wheel
path: dist/
- run: pip install dist/${{ needs.build_wheel_dev.outputs.filename }}
- name: Install splashsurf CLI
run: cargo install splashsurf
- name: Run pytest
uses: pavelzw/pytest-action@v2
with:
verbose: true
emoji: false
job-summary: true
click-to-expand: true
report-title: 'Pytest Report'