Build and test wheels #125
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 and test wheels | |
on: | |
push: | |
branches: | |
- main | |
- test | |
tags: | |
- '*' | |
release: | |
types: [published, created] | |
jobs: | |
windows: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
python: [3.7, 3.8, 3.9, 3.10] | |
wordsize: [64] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Install deps | |
env: | |
PYTHON: "py -${{ matrix.python }}-${{ matrix.wordsize }}" | |
shell: bash | |
# Instead of letting setup.py install a newer numpy we install it here | |
# using the oldest supported version for ABI compatibility | |
run: | | |
set -ex | |
${PYTHON} -m pip install --upgrade pip | |
${PYTHON} -m pip install setuptools wheel | |
${PYTHON} -m pip install oldest-supported-numpy | |
- name: Build C extension | |
env: | |
PYTHON: "py -${{ matrix.python }}-${{ matrix.wordsize }}" | |
shell: bash | |
run: | | |
set -ex | |
# Fix symlinks on windows | |
git config core.symlinks true | |
git reset --hard | |
cd python | |
${PYTHON} -VV | |
${PYTHON} setup.py build_ext --inplace | |
- name: Build Wheel | |
env: | |
PYTHON: "py -${{ matrix.python }}-${{ matrix.wordsize }}" | |
shell: bash | |
run: | | |
set -ex | |
cd python | |
${PYTHON} setup.py bdist_wheel | |
- name: Install wheel and run tests | |
env: | |
PYTHON: "py -${{ matrix.python }}-${{ matrix.wordsize }}" | |
shell: bash | |
run: | | |
set -ex | |
# We install in this odd way to make sure we get both deps and a local kastore | |
${PYTHON} -m pip install kastore --only-binary kastore -f python/dist/ | |
${PYTHON} -m pip uninstall -y kastore | |
${PYTHON} -m pip install -v kastore --only-binary kastore -f python/dist/ --no-index | |
${PYTHON} -c "import kastore" | |
${PYTHON} -m pip install -r python/requirements/CI/tests/requirements.txt | |
rm -rf python/kastore python/*.pyd | |
${PYTHON} -m pytest -v python | |
- name: Upload Wheels | |
uses: actions/upload-artifact@v2 | |
with: | |
name: win-wheel-${{ matrix.python }}-${{ matrix.wordsize }} | |
path: python/dist | |
OSX: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
python: [3.7, 3.8, 3.9, 3.10] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Install deps | |
# Instead of letting setup.py install a newer numpy we install it here | |
# using the oldest supported version for ABI compatibility | |
run: | | |
pip install --upgrade pip | |
pip install setuptools wheel | |
pip install oldest-supported-numpy | |
- name: Build C extension | |
run: | | |
cd python | |
python -VV | |
python setup.py build_ext --inplace | |
- name: Build Wheel | |
run: | | |
cd python | |
python setup.py bdist_wheel | |
- name: Install wheel and run tests | |
run: | | |
# We install in this odd way to make sure we get both deps and a local kastore | |
pip install kastore --only-binary kastore -f python/dist/ | |
pip uninstall -y kastore | |
pip install -v kastore --only-binary kastore -f python/dist/ --no-index | |
python -c "import kastore" | |
pip install -r python/requirements/CI/tests/requirements.txt | |
rm -rf python/kastore python/*.so | |
python -m pytest -v python | |
- name: Upload Wheels | |
uses: actions/upload-artifact@v2 | |
with: | |
name: osx-wheel-${{ matrix.python }} | |
path: python/dist | |
manylinux: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
- name: Set up Python 3.8 | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.8 | |
- name: Build sdist | |
shell: bash | |
run: | | |
cd python | |
python setup.py sdist | |
- name: Upload sdist | |
uses: actions/upload-artifact@v2 | |
with: | |
name: sdist | |
path: python/dist | |
- name: Build wheels in docker | |
shell: bash | |
run: | | |
docker run --rm -v `pwd`:/project -w /project quay.io/pypa/manylinux2010_x86_64 bash docker/buildwheel.sh | |
- name: Set up Python 3.10 | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.10 | |
- name: Run tests (3.10) | |
run: | | |
python -VV | |
# We install in this odd way to make sure we get both deps and a local kastore | |
pip install kastore --only-binary kastore -f python/dist/wheelhouse | |
pip uninstall -y kastore | |
pip install -v kastore --only-binary kastore -f python/dist/wheelhouse --no-index | |
python -c "import kastore" | |
pip install -r python/requirements/CI/tests/requirements.txt | |
python -m pytest -v python | |
- name: Set up Python 3.9 | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.9 | |
- name: Run tests (3.9) | |
run: | | |
python -VV | |
# We install in this odd way to make sure we get both deps and a local kastore | |
pip install kastore --only-binary kastore -f python/dist/wheelhouse | |
pip uninstall -y kastore | |
pip install -v kastore --only-binary kastore -f python/dist/wheelhouse --no-index | |
python -c "import kastore" | |
pip install -r python/requirements/CI/tests/requirements.txt | |
python -m pytest -v python | |
- name: Set up Python 3.8 | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.8 | |
- name: Run tests (3.8) | |
run: | | |
python -VV | |
# We install in this odd way to make sure we get both deps and a local kastore | |
pip install kastore --only-binary kastore -f python/dist/wheelhouse | |
pip uninstall -y kastore | |
pip install -v kastore --only-binary kastore -f python/dist/wheelhouse --no-index | |
python -c "import kastore" | |
pip install -r python/requirements/CI/tests/requirements.txt | |
python -m pytest -v python | |
- name: Set up Python 3.7 | |
uses: actions/setup-python@v2 | |
with: | |
python-version: 3.7 | |
- name: Run tests (3.7) | |
run: | | |
python -VV | |
# We install in this odd way to make sure we get both deps and a local kastore | |
pip install kastore --only-binary kastore -f python/dist/wheelhouse | |
pip uninstall -y kastore | |
pip install -v kastore --only-binary kastore -f python/dist/wheelhouse --no-index | |
python -c "import kastore" | |
pip install -r python/requirements/CI/tests/requirements.txt | |
python -m pytest -v python | |
- name: Upload Wheels | |
uses: actions/upload-artifact@v2 | |
with: | |
name: linux-wheels | |
path: python/dist/wheelhouse | |
PyPI_Upload: | |
runs-on: ubuntu-latest | |
needs: ['windows', 'OSX', 'manylinux'] | |
steps: | |
- name: Download all | |
uses: actions/download-artifact@v2 | |
- name: Move to dist | |
run: | | |
mkdir dist | |
cp */*.{whl,gz} dist/. | |
- name: Publish distribution to Test PyPI | |
if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags') && !contains(github.event.ref, 'C_') | |
uses: pypa/gh-action-pypi-publish@master | |
with: | |
password: ${{ secrets.test_pypi_password }} | |
repository_url: https://test.pypi.org/legacy/ | |
- name: Publish distribution to PRODUCTION PyPI | |
if: github.event_name == 'release' && !startsWith(github.event.release.tag_name, 'C_') | |
uses: pypa/gh-action-pypi-publish@master | |
with: | |
password: ${{ secrets.pypi_password }} |