name: Build wheels
on: [push, pull_request]
env:
ARTIFACT_RETENTION: ${{ github.ref == 'refs/heads/master' && '30' || '7' }}
jobs:
cpython-linux-x86_64:
name: 'Linux CPython (${{ matrix.cibw_archs }}, ${{ matrix.manylinux_image }})'
runs-on: ubuntu-20.04
strategy:
matrix:
cibw_archs: ["x86_64"]
manylinux_image: ["manylinux2010"]
steps:
- uses: actions/checkout@v2
with:
submodules: true
- uses: actions/setup-python@v2
name: Install Python
with:
python-version: '3.10'
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.1
env:
CIBW_BEFORE_BUILD: pip install cython
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }}
CIBW_ARCHS_LINUX: ${{ matrix.cibw_archs }}
CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-*"
CIBW_SKIP: pp*
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp38*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp39*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp310*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp311*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
cpython-linux-aarch64:
name: 'Linux CPython (${{ matrix.cibw_archs }}, ${{ matrix.manylinux_image }})'
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-20.04]
cibw_archs: ["aarch64"]
manylinux_image: ["manylinux2014"]
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
with:
platforms: all
- uses: actions/checkout@v2
with:
submodules: true
- uses: actions/setup-python@v2
name: Install Python
with:
python-version: '3.9'
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.1
env:
CIBW_BEFORE_BUILD: pip install cython
CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }}
CIBW_ARCHS_LINUX: ${{ matrix.cibw_archs }}
CIBW_BUILD: ${{ github.ref == 'refs/heads/master' && 'cp39-* cp310-*' || 'cp310-*' }}
CIBW_SKIP: pp*
- uses: actions/upload-artifact@v2
if: github.ref == 'refs/heads/master'
with:
path: ./wheelhouse/*cp39*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp310*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
cpython-macos-x86_64:
name: 'macOS CPython (${{ matrix.cibw_archs }})'
runs-on: macos-latest
strategy:
matrix:
cibw_archs: ["x86_64"]
steps:
- uses: actions/checkout@v2
with:
submodules: true
- uses: actions/setup-python@v2
name: Install Python
with:
python-version: '3.10'
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.1
env:
CIBW_BEFORE_BUILD:
pip install cython &&
brew install libomp ninja
CIBW_ARCHS_MACOS: ${{ matrix.cibw_archs }}
CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-*"
CIBW_ENVIRONMENT: CXX='c++'
CIBW_SKIP: pp*
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp38*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp39*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp310*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp311*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
cpython-windows:
name: 'Windows CPython (${{ matrix.cibw_archs }})'
runs-on: windows-latest
strategy:
matrix:
cibw_archs: [amd64]
steps:
- uses: actions/checkout@v2
with:
submodules: true
- name: Setup devCmd (vstools)
uses: ilammy/msvc-dev-cmd@v1
- uses: actions/setup-python@v2
name: Install Python
with:
python-version: '3.10'
- name: Build wheels
uses: pypa/cibuildwheel@v2.1.2
env:
CIBW_BEFORE_BUILD: pip install cython ipython
CIBW_ARCHS: "AMD64"
CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-*"
CIBW_SKIP: pp*
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp38*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp39*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp310*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
- uses: actions/upload-artifact@v2
with:
path: ./wheelhouse/*cp311*.whl
retention-days: ${{ env.ARTIFACT_RETENTION }}
source-distribution:
name: 'Source distribution'
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
submodules: true
- uses: actions/setup-python@v2
name: Install Python
with:
python-version: '3.10'
- name: Create sdist source
run: |
pip install cython
python3 setup.py build_ext
python3 setup.py sdist
- uses: actions/upload-artifact@v2
with:
path: ./dist/*networkit*.tar.gz
retention-days: ${{ env.ARTIFACT_RETENTION }}
check-release-tag:
name: "Check for new release"
runs-on: ubuntu-latest
outputs:
is-release: ${{ steps.do-check.outputs.is-release }}
steps:
- name: Check release tag ${{ github.ref }}
id: do-check
run: |
if [[ ${{ github.ref }} =~ ^refs\/tags\/[0-9]+\.[0-9]+(\.[0-9]+)?$ ]]; then
echo "::set-output name=is-release::true"
else
echo "::set-output name=is-release::false"
fi
upload-packages:
if: needs.check-release-tag.outputs.is-release == 'true' && github.repository == 'networkit/networkit'
name: 'PyPi release upload'
runs-on: ubuntu-20.04
needs: [cpython-macos-x86_64, cpython-linux-aarch64, cpython-linux-x86_64, cpython-windows, source-distribution, check-release-tag]
steps:
- uses: actions/download-artifact@v2
with:
path: ./dist
- uses: actions/setup-python@v2
name: Install Python
with:
python-version: '3.10'
- name: Upload to TestPyPI
run: |
pip install twine
python3 -m twine upload --verbose --skip-existing ./dist/artifact/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.TWINE_TOKEN }}