Build + Deploy #23
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 + Deploy | |
on: | |
push: | |
tags: ["*.*.*"] | |
# enables workflow to be run manually | |
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch | |
workflow_dispatch: | |
env: | |
# skip binary wheels for pypy (preferable to use pure-python) and 32-bit Linux | |
CIBW_SKIP: pp* cp*linux_i686 | |
CIBW_ENVIRONMENT: FONTTOOLS_WITH_CYTHON=1 | |
CIBW_TEST_REQUIRES: tox | |
# only test core fonttools library without extras for now, stuff like lxml or scipy | |
# create too many issues when testing on a large matrix of environments... | |
CIBW_TEST_COMMAND: "tox -c {package}/tox.ini -e py-cy-noextra --installpkg {wheel}" | |
jobs: | |
build_pure: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
pip install setuptools wheel twine | |
- name: Build source distribution and pure-python wheel | |
run: | | |
python setup.py sdist bdist_wheel | |
- uses: actions/upload-artifact@v3 | |
with: | |
path: | | |
dist/*.whl | |
dist/*.tar.gz | |
build_wheels: | |
name: ${{ matrix.type }} ${{ matrix.arch }} on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [macos-latest, windows-latest, ubuntu-latest] | |
arch: [auto64] | |
include: | |
- os: macos-latest | |
arch: universal2 | |
- os: windows-latest | |
arch: auto32 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Set up Python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: "3.x" | |
- name: Install dependencies | |
run: pip install cibuildwheel | |
- name: Build Wheels | |
run: python -m cibuildwheel --output-dir wheelhouse . | |
env: | |
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 | |
CIBW_ARCHS: ${{ matrix.arch }} | |
- uses: actions/upload-artifact@v3 | |
with: | |
path: wheelhouse/*.whl | |
build_arch_wheels: | |
name: py${{ matrix.python }} on ${{ matrix.arch }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
# aarch64 uses qemu so it's slow, build each py version in parallel jobs | |
python: [38, 39, 310, 311, 312] | |
arch: [aarch64] | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: docker/setup-qemu-action@v3.0.0 | |
with: | |
platforms: all | |
- name: Install dependencies | |
run: pip install cibuildwheel | |
- name: Build Wheels | |
run: python -m cibuildwheel --output-dir wheelhouse . | |
env: | |
CIBW_BUILD: cp${{ matrix.python }}-* | |
CIBW_ARCHS: ${{ matrix.arch }} | |
- uses: actions/upload-artifact@v3 | |
with: | |
path: wheelhouse/*.whl | |
deploy: | |
name: Upload to PyPI on tagged commit | |
runs-on: ubuntu-latest | |
needs: | |
- build_pure | |
- build_wheels | |
- build_arch_wheels | |
# only run if the commit is tagged... | |
if: startsWith(github.ref, 'refs/tags/') | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: artifact | |
path: dist | |
- uses: pypa/gh-action-pypi-publish@v1.8.10 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_PASSWORD }} |