Build and test wheels #136
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 and test wheels | |
on: | |
push: | |
branches: | |
- main | |
- test | |
tags: | |
- '*' | |
release: | |
types: [published, created] | |
jobs: | |
windows: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
python: [3.9, "3.10", 3.11, 3.12] | |
wordsize: [64] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Build wheel | |
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} -m pip install delocate build | |
${PYTHON} -m build --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@v4 | |
with: | |
name: win-wheel-${{ matrix.python }}-${{ matrix.wordsize }} | |
path: python/dist | |
OSX-ARM: | |
runs-on: macos-14 | |
strategy: | |
matrix: | |
python: [3.9, "3.10", 3.11, 3.12] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python ${{ matrix.python }} | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python }} | |
- name: Build Wheel | |
run: | | |
cd python | |
python -m pip install build | |
python -m build --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@v4 | |
with: | |
name: osxarm-wheel-${{ matrix.python }} | |
path: python/dist | |
manylinux: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Set up Python 3.9 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
- name: Build sdist | |
shell: bash | |
run: | | |
cd python | |
pip install build | |
python -m build --sdist | |
- name: Upload sdist | |
uses: actions/upload-artifact@v4 | |
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/manylinux2014_x86_64 bash docker/buildwheel.sh | |
- name: Set up Python 3.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.12 | |
- name: Run tests (3.12) | |
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.12 | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.12 | |
- name: Run tests (3.11) | |
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.10 | |
uses: actions/setup-python@v5 | |
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@v5 | |
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: Upload Wheels | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-wheels | |
path: python/dist/wheelhouse | |
PyPI_Upload: | |
runs-on: ubuntu-latest | |
environment: release | |
needs: ['windows', 'OSX-ARM', 'manylinux'] | |
permissions: | |
id-token: write | |
steps: | |
- name: Download all | |
uses: actions/download-artifact@v4 | |
- 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@release/v1 | |
with: | |
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@release/v1 |