Use vcpkg for building cdd and cddgmp, and refactor library to follow same structure. #41
Workflow file for this run
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: build | |
on: | |
push: | |
branches: [ develop ] | |
tags: ['**'] | |
pull_request: | |
branches: [ develop ] | |
jobs: | |
build-sdist: | |
runs-on: 'ubuntu-latest' | |
steps: | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- uses: actions/checkout@v3 | |
- name: Create sdist | |
run: | | |
pip install setuptools | |
python setup.py sdist | |
- name: Check files | |
run: | | |
python -m pip install twine | |
twine check dist/* | |
- name: Upload sdist | |
uses: actions/upload-artifact@v4 | |
with: | |
name: sdist | |
path: dist/* | |
if-no-files-found: error | |
test-ubuntu-macos: | |
runs-on: ${{ matrix.os }} | |
needs: build-sdist | |
strategy: | |
fail-fast: false | |
matrix: | |
os: ['ubuntu-latest', 'macos-latest'] | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
cython-version: [''] | |
include: | |
# test oldest supported Cython version on most recent Python | |
- os: 'ubuntu-latest' | |
python-version: '3.12' | |
cython-version: '==3.0.0' | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download sdist | |
uses: actions/download-artifact@v4 | |
with: | |
name: sdist | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install cddlib and gmp (Ubuntu) | |
if: matrix.os == 'ubuntu-latest' | |
run: sudo apt-get install -y libcdd-dev libgmp-dev | |
- name: Install libgmp (MacOS) | |
if: matrix.os == 'macos-latest' | |
run: brew install cddlib gmp | |
- name: Install Python dependencies | |
run: python -m pip install setuptools Cython${{ matrix.cython-version }} Sphinx pytest wheel numpy | |
- name: Install tarball (Ubuntu) | |
if: matrix.os == 'ubuntu-latest' | |
run: python -m pip install --pre --no-index --find-links=. pycddlib | |
- name: Install tarball (MacOS) | |
if: matrix.os == 'macos-latest' | |
run: | | |
brew --prefix | |
ls $(brew --prefix)/include/cddlib/ | |
ls $(brew --prefix)/lib/cddlib/ | |
ls $(brew --prefix)/include/*gmp* | |
ls $(brew --prefix)/lib/*gmp* | |
env "CFLAGS=-I$(brew --prefix)/include -L$(brew --prefix)/lib" python -m pip install --pre --no-index --find-links=. pycddlib | |
- name: Run test suite | |
run: | | |
pytest | |
cd docs | |
make doctest | |
build-vcpkg: | |
runs-on: 'windows-latest' | |
strategy: | |
fail-fast: false | |
matrix: | |
architecture: ['x86', 'x64'] | |
vcpkg_ref: ['dee8b7d2c'] | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
repository: mcmtroffaes/vcpkg | |
ref: ${{ matrix.vcpkg_ref }} | |
- uses: actions/cache@v3 | |
id: vcpkg-installed-cache | |
with: | |
path: installed/ | |
key: vcpkg-0-${{ matrix.architecture }}-${{ matrix.vcpkg_ref }} | |
- name: Install cddlib | |
if: steps.vcpkg-installed-cache.outputs.cache-hit != 'true' | |
run: | | |
./bootstrap-vcpkg.bat -disableMetrics | |
./vcpkg.exe install cddlib:${{ matrix.architecture }}-windows-static-md-release | |
ls installed/${{ matrix.architecture }}-windows-static-md-release/include/ -r | |
ls installed/${{ matrix.architecture }}-windows-static-md-release/lib/ -r | |
- name: Upload vcpkg | |
uses: actions/upload-artifact@v4 | |
with: | |
name: vcpkg-${{ matrix.architecture }} | |
path: installed/ | |
if-no-files-found: error | |
build-test-windows: | |
runs-on: 'windows-latest' | |
needs: build-vcpkg | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
architecture: ['x86', 'x64'] | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download vcpkg | |
uses: actions/download-artifact@v4 | |
with: | |
name: vcpkg-${{ matrix.architecture }} | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: ${{ matrix.architecture }} | |
- name: Check Python | |
run: | | |
ls installed/x64-windows-static-md-release/include/ -r | |
ls installed/x64-windows-static-md-release/lib/ -r | |
python --version | |
python -c "import struct; print(struct.calcsize('P') * 8)" | |
- name: Install Python dependencies | |
run: python -m pip install Sphinx pytest numpy twine build | |
- name: Create wheel | |
run: | | |
mkdir dist -Force | |
python -m build --wheel -C="--global-option=build_ext" -C="--global-option=-Iinstalled/x64-windows-static-md-release/include/" -C="--global-option=-Linstalled/x64-windows-static-md-release/lib/" . | |
- name: Check files | |
run: twine check dist/* | |
- name: Upload wheel | |
uses: actions/upload-artifact@v4 | |
with: | |
name: windows-wheels-${{ matrix.python-version }}-${{ matrix.architecture }} | |
path: dist/* | |
if-no-files-found: error | |
- name: Install wheel | |
run: | | |
cd dist | |
ls | |
pip install --pre --no-index --find-links=. pycddlib | |
cd .. | |
- name: Run test suite | |
run: | | |
pytest | |
cd docs | |
make doctest | |
release: | |
if: github.repository == 'mcmtroffaes/pycddlib' | |
runs-on: 'ubuntu-latest' | |
needs: [ build-sdist, test-ubuntu-macos, build-test-windows ] | |
steps: | |
- name: Download sdist | |
uses: actions/download-artifact@v4 | |
with: | |
name: sdist | |
path: dist/ | |
- name: Download wheels | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: windows-wheels-* | |
path: dist/ | |
merge-multiple: true | |
- name: List files | |
run: ls -R dist/ | |
- name: Publish to Test PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
repository-url: https://test.pypi.org/legacy/ | |
skip-existing: true | |
- name: Publish to PyPI | |
if: startsWith(github.ref, 'refs/tags') | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.PYPI_API_TOKEN }} |