Skip to content

Commit

Permalink
Adding cibuildwheel workflow to build and publish wheels (#361)
Browse files Browse the repository at this point in the history
This should build wheels for most platforms, and also run a simple `load_model()` test to check whether the compiled wheels actually work. It'll also upload wheels from published GitHub releases to PyPI, but I'll still need to set that up.
  • Loading branch information
omar-h-omar authored Jan 29, 2024
1 parent 3276019 commit ecaa24a
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 0 deletions.
85 changes: 85 additions & 0 deletions .github/workflows/cibuildwheel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
name: cibuildwheel build

on:
workflow_dispatch:
push:
branches:
- master
release:
types:
- published

jobs:
make_sdist:
name: Make SDist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
submodules: recursive

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel
- name: Build sdist
run: |
python setup.py sdist
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
path: dist/*.*

build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, windows-2022, macOS-11]

steps:
- uses: actions/checkout@v3
with:
submodules: recursive

# Used to host cibuildwheel
- uses: actions/setup-python@v3

- name: Use cmake
run: cmake --version

- name: Install cibuildwheel
run: python -m pip install cibuildwheel==2.15.0

- name: Build wheels
run: python -m cibuildwheel --output-dir wheelhouse
# to supply options, put them in 'env', like:
env:
MACOSX_DEPLOYMENT_TARGET: 10.15
CIBW_ARCHS_MACOS: "x86_64 universal2 arm64"
CIBW_SKIP: pp* *i686
CIBW_TEST_REQUIRES: pytest numpy
CIBW_TEST_COMMAND: pytest {package}/tests
CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64"

- uses: actions/upload-artifact@v3
with:
path: ./wheelhouse/*.whl

upload_all:
needs: [build_wheels, make_sdist]
environment: pypi
permissions:
id-token: write
runs-on: ubuntu-latest
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- uses: actions/download-artifact@v3
with:
name: artifact
path: dist

- uses: pypa/gh-action-pypi-publish@release/v1
4 changes: 4 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ def build_extension(self, ext):
build_args = ['--config', cfg]

if platform.system() == "Windows":
if platform.architecture()[0] == '32bit':
cmake_args += ['-A', 'Win32']
else:
cmake_args += ['-A', 'x64']
cmake_args += ['-G', 'Visual Studio 17 2022']
cmake_args += ['-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{}={}'.format(cfg.upper(), extdir)]
build_args += ['--', '/m']
Expand Down
8 changes: 8 additions & 0 deletions tests/test_load_model.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import pytest
import eos
import numpy as np
from pathlib import Path

def test_load_model():
model = eos.morphablemodel.load_model(str(Path(__file__).resolve().parent.parent / 'share' / 'sfm_shape_3448.bin'))
assert model is not None

0 comments on commit ecaa24a

Please sign in to comment.