From 073e155d971d30312c075811031f16219a2a8530 Mon Sep 17 00:00:00 2001 From: Jerome Kelleher Date: Tue, 29 Aug 2023 12:50:49 +0100 Subject: [PATCH] Add wheel building Closes #30 --- .github/workflows/docker/buildwheel.sh | 17 +++ .github/workflows/docker/shared.env | 6 ++ .github/workflows/wheels.yml | 138 +++++++++++++++++++++++++ 3 files changed, 161 insertions(+) create mode 100644 .github/workflows/docker/buildwheel.sh create mode 100644 .github/workflows/docker/shared.env create mode 100644 .github/workflows/wheels.yml diff --git a/.github/workflows/docker/buildwheel.sh b/.github/workflows/docker/buildwheel.sh new file mode 100644 index 0000000..f29b6a0 --- /dev/null +++ b/.github/workflows/docker/buildwheel.sh @@ -0,0 +1,17 @@ +#!/bin/bash +DOCKER_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +source "$DOCKER_DIR/shared.env" + +set -e -x + +ARCH=`uname -p` +echo "arch=$ARCH" + + +for V in "${PYTHON_VERSIONS[@]}"; do + PYBIN=/opt/python/$V/bin + rm -rf build/ # Avoid lib build by narrow Python is used by wide python + $PYBIN/python setup.py bdist_wheel +done + +rm dist/*.tar.gz \ No newline at end of file diff --git a/.github/workflows/docker/shared.env b/.github/workflows/docker/shared.env new file mode 100644 index 0000000..3f29924 --- /dev/null +++ b/.github/workflows/docker/shared.env @@ -0,0 +1,6 @@ +PYTHON_VERSIONS=( + cp311-cp311 + cp310-cp310 + cp39-cp39 + cp38-cp38 +) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml new file mode 100644 index 0000000..e9f1fde --- /dev/null +++ b/.github/workflows/wheels.yml @@ -0,0 +1,138 @@ +name: Build and test wheels + +on: + push: + branches: + - main + - test + tags: + - '*' + release: + types: [published] + +jobs: + manylinux: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + submodules: true + + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + + - name: Build sdist + shell: bash + run: | + python setup.py sdist + + - name: Upload sdist + uses: actions/upload-artifact@v2 + with: + name: sdist + path: dist + + - name: Build wheels in docker + shell: bash + run: | + docker run --rm -v `pwd`:/project -w /project quay.io/pypa/manylinux2010_x86_64 bash .github/workflows/docker/buildwheel.sh + + - name: Upload Wheels + uses: actions/upload-artifact@v2 + with: + name: wheels + path: dist + + OSX-test: + needs: ['manylinux'] + runs-on: macos-latest + strategy: + matrix: + python: [3.7, 3.8, 3.9] + steps: + - name: Download wheels + uses: actions/download-artifact@v2 + with: + name: wheels + - name: Set up Python ${{ matrix.python }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + - name: Install wheel and test + run: | + python -VV + # Install the local wheel + pip install tstrait --only-binary tstrait -f . + python -c "import tstrait" + + windows-test: + needs: ['manylinux'] + runs-on: windows-latest + strategy: + matrix: + python: [3.7, 3.8, 3.9] + wordsize: [64] + steps: + - name: Download wheels + uses: actions/download-artifact@v2 + with: + name: wheels + - name: Set up Python ${{ matrix.python }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + - name: Install wheel and test + run: | + python -VV + pip install wheel + # Install the local wheel + pip install tstrait --only-binary tstrait -f . + python -c "import tstrait" + + manylinux-test: + runs-on: ubuntu-latest + needs: ['manylinux'] + strategy: + matrix: + python: [3.8, 3.9, "3.10", "3.11"] + steps: + - name: Download wheels + uses: actions/download-artifact@v2 + with: + name: wheels + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + - name: Install wheel and test + run: | + python -VV + # Install the local wheel + pip install tstrait --only-binary tstrait -f . + python -c "import tstrait" + + + PyPI_Upload: + runs-on: ubuntu-latest + needs: ['windows-test', 'OSX-test', 'manylinux-test'] + 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') + 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' + uses: pypa/gh-action-pypi-publish@master + with: + password: ${{ secrets.pypi_password }}