Skip to content

Version 1.0.0a10

Version 1.0.0a10 #166

name: Python Wheels tests
on:
push:
tags-ignore:
- '**'
branches:
- '**'
env:
PACKAGE_VERSION: "1.0.0a10"
PACKAGE_NAME: alpaqa
PYTHON_VERSION: '3.11'
jobs:
build-linux:
runs-on: ubuntu-latest
container: ubuntu:jammy
strategy:
matrix:
config: [RelWithDebInfo, Debug]
env:
HOST: 'x86_64-centos7-linux-gnu'
CMAKE_C_COMPILER_LAUNCHER: ccache
CMAKE_CXX_COMPILER_LAUNCHER: ccache
CCACHE_DIR: /root/.ccache
steps:
# Git clone
- name: Install git
run: apt -y update && apt -y install --no-install-recommends git ca-certificates
- uses: actions/checkout@v3
with:
submodules: recursive
# Tools
- name: Install tools
uses: ./.github/workflows/toolchain
with:
host: ${{ env.HOST }}
python-version: ${{ env.PYTHON_VERSION }}
pypy: ''
# Ccache
- name: Prepare ccache directory
run: mkdir -p "${{ env.CCACHE_DIR }}"
- name: Cache ccache
uses: actions/cache@v3
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ env.HOST }}-${{ matrix.config }}-ccache-${{ github.run_id }}
restore-keys: ${{ runner.os }}-${{ env.PYTHON_VERSION }}-${{ env.HOST }}-${{ matrix.config }}-ccache
# Pip install dependencies
- name: Install Python dependencies
run: python${{ env.PYTHON_VERSION }} -m pip install -U pip build
# Build
- name: Build wheel
run: |
host="${{ env.HOST }}"
staging="/opt/$host"
cat > ninja-${{ matrix.config }}.cross.toml <<- EOF
[cmake]
build_args = ["1"]
config = ["${{ matrix.config }}"]
generator = "Ninja Multi-Config"
[cmake.options]
CMAKE_FIND_ROOT_PATH = "$staging/pybind11;$staging/eigen-master;$staging/casadi"
USE_GLOBAL_PYBIND11 = "On"
EOF
python${{ env.PYTHON_VERSION }} -m build -w . \
-C--cross="$PWD/ninja-${{ matrix.config }}.cross.toml" \
-C--cross="$staging/$host.py-build-cmake.cross.toml"
env:
CFLAGS: "-fstack-protector-all -mshstk -fcf-protection=full -D_FORTIFY_SOURCE=${{ matrix.config != 'Debug' && '3' || '0' }} -fdiagnostics-color -static-libgcc"
CXXFLAGS: "-fstack-protector-all -mshstk -fcf-protection=full -D_FORTIFY_SOURCE=${{ matrix.config != 'Debug' && '3' || '0' }} -fdiagnostics-color -static-libgcc -static-libstdc++"
# Upload
- name: Upload Wheels
uses: actions/upload-artifact@v3
with:
name: whl-${{ env.PYTHON_VERSION }}-${{ matrix.config }}-linux-test
retention-days: 1
path: dist/*.whl
test-linux:
needs: [build-linux]
runs-on: ubuntu-latest
container: python:3.11-bullseye
strategy:
matrix:
config: [RelWithDebInfo, Debug]
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/download-artifact@v3
with:
name: whl-${{ env.PYTHON_VERSION }}-${{ matrix.config }}-linux-test
path: dist
- name: Install test dependencies
run: |
python3 -m pip install -U pip cmake ninja twine
python3 -m pip install --find-links=dist "${PACKAGE_NAME}[test]==${PACKAGE_VERSION}"
- name: Test (${{ matrix.config }})
run: python3 -m pytest -rP
env:
ALPAQA_PYTHON_DEBUG: ${{ matrix.config == 'Debug' }}
- name: Install Valgrind
run: |
apt update
apt install -y valgrind --no-install-recommends
- name: Test (Valgrind, ${{ matrix.config }})
run: valgrind --gen-suppressions=all --suppressions=scripts/valgrind/python.supp --error-exitcode=234 python3 -m pytest -rP
env:
ALPAQA_PYTHON_DEBUG: ${{ matrix.config == 'Debug' }}
- name: Check Wheel metadata
run: python -m twine check dist/*.whl
build-macos:
runs-on: macos-12
env:
CMAKE_C_COMPILER_LAUNCHER: ccache
CMAKE_CXX_COMPILER_LAUNCHER: ccache
CCACHE_DIR: /tmp/.ccache
MACOSX_DEPLOYMENT_TARGET: '10.9'
steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- uses: actions/setup-python@v4
id: python
name: Install Python
with:
python-version: ${{ env.PYTHON_VERSION }}
- name: Install ccache
run: brew install ccache && ccache --version
- name: Prepare ccache directory
run: mkdir -p "${{ env.CCACHE_DIR }}"
- name: Cache ccache
uses: actions/cache@v3
with:
path: ${{ env.CCACHE_DIR }}
key: ${{ runner.os }}-${{ env.PYTHON_VERSION }}-ccache-${{ github.run_id }}
restore-keys: ${{ runner.os }}-${{ env.PYTHON_VERSION }}-ccache
- name: Cache Virtual Environment
id: cache-venv
uses: actions/cache@v3
with:
path: py-venv
key: ${{ runner.os }}-${{ steps.python.outputs.python-version }}-${{ hashFiles('scripts/install-eigen.sh', 'scripts/install-casadi-static.sh') }}
- name: Install Python dependencies
if: steps.cache-venv.outputs.cache-hit != 'true'
run: |
python -m venv py-venv
source ./py-venv/bin/activate
python -m pip install -U pip build cmake ninja
./scripts/install-eigen.sh
./scripts/install-casadi-static.sh
- name: Build
run: |
source ./py-venv/bin/activate
CMAKE_PREFIX_PATH="$VIRTUAL_ENV:$CMAKE_PREFIX_PATH" \
_PYTHON_HOST_PLATFORM='macosx-10.9-universal2' \
ARCHFLAGS='-arch arm64 -arch x86_64' \
python -m build -w .
- name: Upload
uses: actions/upload-artifact@v3
with:
name: whl-macos
retention-days: 1
path: dist/*.whl