Skip to content

Port of julia #179 #270

Port of julia #179

Port of julia #179 #270

Workflow file for this run

name: pypi
on:
workflow_dispatch:
pull_request:
branches:
- main
push:
branches:
- main
tags:
- v*
env:
PACKAGE_NAME: clarabel
PYTHON_VERSION: "3.7" # to build abi3 wheels
PYPI_TARGET: pypi # use "testpypi" for testing, "pypi" otherwise
# NB: uncomment "if" lines below to skip compilation except on version tagging
jobs:
linux:
runs-on: ubuntu-latest
strategy:
matrix:
target: [x86_64, i686, aarch64]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
target: ${{ matrix.target }}
command: build
manylinux: auto
args: -v --release --out dist -i python${{ env.PYTHON_VERSION }} --features "python"
- name: Install and test built wheel
if: matrix.target == 'x86_64'
run: |
python -m pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall
python -c "import clarabel"
python examples/python/example_qp.py
python examples/python/example_sdp.py
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.target }}
path: dist
macos:
runs-on: macos-13
# if: "startsWith(github.ref, 'refs/tags/v')"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
default: true
- name: Build wheels - x86_64
uses: PyO3/maturin-action@v1
with:
target: x86_64
command: build
args: --release -i python${{ env.PYTHON_VERSION }} --out dist --features "python"
- name: Install and test built wheel - x86_64
run: |
pip install --upgrade pip
pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall
python -c "import clarabel"
python examples/python/example_qp.py
python examples/python/example_sdp.py
- name: Build wheels - universal2
uses: PyO3/maturin-action@v1
with:
command: build
args: --release -i python${{ env.PYTHON_VERSION }} --target universal2-apple-darwin --out dist --features "python"
- name: Install and test built wheel - universal2
run: |
pip install --upgrade pip
pip install dist/${{ env.PACKAGE_NAME }}-*universal2.whl --force-reinstall
python -c "import clarabel"
python examples/python/example_qp.py
python examples/python/example_sdp.py
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos
path: dist
windows:
runs-on: windows-latest
# if: "startsWith(github.ref, 'refs/tags/v')"
strategy:
matrix:
target: [x64, x86]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
architecture: ${{ matrix.target }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
command: build
target: ${{ matrix.target }}
args: --release --out dist -i python${{ env.PYTHON_VERSION }} --features "python"
- name: Install and test built wheel
shell: bash
run: |
python -m pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall
python -c "import clarabel"
python examples/python/example_qp.py
python examples/python/example_sdp.py
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.target }}
path: dist
sdist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
command: sdist
manylinux: auto
args: --out dist
- name: Test sdist
run: |
pip install --force-reinstall --verbose dist/*.tar.gz
python -c 'import clarabel'
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: sdist
path: dist
release:
name: Release
runs-on: ubuntu-latest
if: "startsWith(github.ref, 'refs/tags/v')"
needs:
- macos
- windows
- linux
steps:
- uses: actions/download-artifact@v4
with:
pattern: wheels-*
merge-multiple: true
path: dist
- uses: actions/download-artifact@v4
with:
name: sdist
path: dist
- uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Publish to PyPi
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }}
run: |
pip install --upgrade twine
twine upload --skip-existing --repository ${{ env.PYPI_TARGET }} dist/*