Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add workflow for building and releasing wheels #739

Merged
merged 1 commit into from
Dec 18, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
125 changes: 125 additions & 0 deletions .github/workflows/build-and-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Because this library provides extension modules for macOS, but not for other
# platforms, we want to provide built distributions for each macOS platform, but we
# explicitly DON'T want to provide a cross-platform pure-Python wheel to fall back on.
#
# This is because in the event that a new Python version is released or a new
# macOS platform is released, macOS users won't be able to install the built
# distributions we've provided and should fall back to the source distribution,
# but pip's behavior is to prefer a pure-Python wheel first, which will be
# missing the extension modules.
#
# However, to provide built distributions for Linux and Windows (which don't
# have extension modules) we can just build a pure-Python wheel on that
# platform and override the platform name manually via wheel's --plat-name
# feature, to provide a platform-specific wheel for all platforms.

name: Test, Build & Publish

on:
workflow_dispatch:
inputs:
branch:
description: 'Branch to base the release from'
required: true
default: 'master'

jobs:
tests:
name: Run tests for ${{ matrix.os }} for ${{ matrix.python }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python: [3.6, 3.7, 3.8, 3.9]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Use Python ${{ matrix.python }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python }}
- name: Install test dependencies
run: python -m pip install tox
- name: Test
run: python -m tox -e py

macos-built-distributions:
name: Build macOS wheels
needs: tests
runs-on: macos-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Python
uses: actions/setup-python@v2
- name: Install build dependencies
run: python -m pip install cibuildwheel
- name: Build wheels
run: python -m cibuildwheel
env:
CIBW_SKIP: "cp27-* cp35-* pp27-*" # skip 2.7 and 3.5 wheels
- uses: actions/upload-artifact@v2
with:
name: python-package-distributions
path: ./wheelhouse/*.whl

pure-built-distributions:
name: Build pure wheels
needs: tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Python
uses: actions/setup-python@v2
- name: Install build dependencies
run: python -m pip install -U setuptools wheel
- name: Build wheels
run: |
for platform in 'manylinux2014_x86_64' 'manylinux2014_i686' 'manylinux2014_aarch64' 'manylinux2014_armv7l' 'manylinux2014_ppc64' 'manylinux2014_ppc64le' 'manylinux2014_s390x' 'win32' 'win_amd64' 'win_ia64'
do
python setup.py bdist_wheel --plat-name $platform
done
- uses: actions/upload-artifact@v2
with:
name: python-package-distributions
path: ./dist/*.whl

source-distribution:
needs: tests
name: Build source distribution
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Install Python
uses: actions/setup-python@v2
- name: Build source distribution
run: python setup.py sdist
- name: Store the source distribution
uses: actions/upload-artifact@v2
with:
name: python-package-distributions
path: dist
retention-days: 4

publish:
needs:
- macos-built-distributions
- pure-built-distributions
- source-distribution
runs-on: ubuntu-latest
steps:
- name: Download all the dists
uses: actions/download-artifact@v2
with:
name: python-package-distributions
path: dist/
- name: What will we publish?
run: ls dist
- name: Publish
uses: pypa/gh-action-pypi-publish@master
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
skip_existing: true
1 change: 1 addition & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ envlist = py{310,39,38,37,36,35,py3}
skip_missing_interpreters = True

[testenv]
usedevelop = true
deps =
-r requirements-tests.txt
commands =
Expand Down