Skip to content

refactor wheels workflow #716

refactor wheels workflow

refactor wheels workflow #716

Workflow file for this run

name: Build, test, and deploy, wheels
on:
schedule:
- cron: "0 0 1 * *"
release:
types: [created]
pull_request:
branches: [main, dev]
jobs:
macOS_wheel:
runs-on: macos-latest
strategy:
matrix:
python: [3.8, 3.9, "3.10", "3.11"]
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Install deps
run: |
brew install gsl
# Upgrade pip to get bdist_wheel
pip install --upgrade pip
pip install setuptools wheel build
# Instead of letting setup.py install a newer numpy we install it here
# using the oldest supported version for ABI compatibility
pip install oldest-supported-numpy
- name: Build Wheel
run: |
python -m build --wheel
- name: Delocate to bundle dynamic libs
run: |
pip install delocate
delocate-wheel -v dist/*.whl
# The following is going to be fragile:
# 1. The workflow gives a bizzare platform
# name to the wheels, macosx_11_0.
# 1a. On 19 Nov, 2022, it seems to have changed to macosx_12_0
# 2. But, the CI totally works on the 10_15 platform
# 3. The odd platform name means the wheels won't
# install on any macosx I can get ahold of.
# 4. So, we just rename them.
- name: rename wheel (HACK ALERT)
run: |
for i in dist/*.whl; do
echo $i
mv $i $(ls $i | sed 's/macosx_12_0/macosx_10_15/g')
done
- name: Upload Wheels
uses: actions/upload-artifact@v3
with:
name: macOS-wheel-${{ matrix.python }}
path: dist
build_sdist:
runs-on: ubuntu-latest
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Set up Python 3.8
uses: actions/setup-python@v4
with:
python-version: 3.8
- name: Build sdist
shell: bash
run: |
python -m pip install --upgrade pip setuptools
python setup.py sdist
- name: Upload sdist
uses: actions/upload-artifact@v3
with:
name: sdist
path: dist
manylinux2_28:
runs-on: ubuntu-latest
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout
uses: actions/checkout@v3
with:
submodules: true
fetch-depth: 0
- name: Build wheels in docker
shell: bash
run: |
docker run --rm -v `pwd`:/project -w /project quay.io/pypa/manylinux_2_28_x86_64:2022-10-02-69a0972 bash .github/workflows/manylinux/buildwheels.sh
- name: Upload Wheels
uses: actions/upload-artifact@v3
with:
name: linux-wheels
path: dist/wheelhouse
manylinux2_28_test:
runs-on: ubuntu-latest
needs: ['manylinux2_28', 'build_sdist']
strategy:
matrix:
python: [3.8, 3.9, "3.10", "3.11"]
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout
uses: actions/checkout@v3
- name: Download wheels
uses: actions/download-artifact@v3.0.2
with:
name: linux-wheels
- name: Download sdist
uses: actions/download-artifact@v3.0.2
with:
name: sdist
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: Install sdist into venv
run: |
python -m venv sdist_venv
source sdist_venv/bin/activate
python -m pip install --upgrade pip setuptools
python -m pip install *.gz
# The cd is to move us away from
# the project repo root where the module is not built
cd sdist_venv
python -c "import fwdpy11;print(fwdpy11.__version__)"
deactivate
rm -rf sdist_venv
- name: Install wheel and test
run: |
python -VV
# pip install minimal dependencies
pip install --upgrade pip
pip install wheel
pip install -r requirements/wheel_building_workflow.txt
# delete the source dir to prevent pip from mistaking it for
# the package
rm -rf fwdpy11
# Install the local wheel
pip install fwdpy11 --no-deps --no-index --pre --only-binary fwdpy11 -f .
python -c "import fwdpy11;print(fwdpy11.__version__)"
macOS_test:
needs: ['macOS_wheel']
runs-on: macos-latest
strategy:
matrix:
python: [3.8, 3.9, "3.10", "3.11"]
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
- name: Checkout
uses: actions/checkout@v3
- name: Download wheels
uses: actions/download-artifact@v3.0.2
with:
name: macOS-wheel-${{ matrix.python }}
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: ls
run: |
ls -lhrt
- name: Install wheel and test
run: |
python -VV
# pip install minimal dependencies
pip install --upgrade pip
pip install wheel
pip install -r requirements/wheel_building_workflow.txt
# delete the source dir to prevent pip from mistaking it for
# the package
rm -rf fwdpy11
# Install the local wheel
pip install fwdpy11 --no-deps --no-index --pre --only-binary fwdpy11 -f .
python -c "import fwdpy11;print(fwdpy11.__version__)"
upload_to_PyPI:
runs-on: ubuntu-latest
needs: ['macOS_test', 'manylinux2_28_test']
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.11.0
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
- name: Download all
uses: actions/download-artifact@v3.0.2
- name: Move to dist
run: |
mkdir dist
cp */*.{whl,gz} dist/.
- name: Publish distribution to PRODUCTION PyPI
if: github.event_name == 'release'
uses: pypa/gh-action-pypi-publish@release/v1
with:
password: ${{ secrets.PYPI_UPLOAD }}