https://github.com/actions/upload-artifact?tab=readme-ov-file#breaking-changes > Due to how Artifacts are created in this new version, it is no longer possible to upload to the same named Artifact multiple times. You must either split the uploads into multiple Artifacts with different names, or only upload once. Otherwise you will encounter an error. This caused the PyPI upload job to fail earlier. Hopefully this should fix it.
125 lines
3.4 KiB
YAML
125 lines
3.4 KiB
YAML
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@v5
|
|
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@v4
|
|
with:
|
|
name: pure
|
|
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@v5
|
|
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@v4
|
|
with:
|
|
name: wheels
|
|
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@v4
|
|
with:
|
|
name: aarch64-wheels
|
|
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@v4
|
|
with:
|
|
# so that all artifacts are downloaded in the same directory specified by 'path'
|
|
merge-multiple: true
|
|
path: dist
|
|
- uses: pypa/gh-action-pypi-publish@v1.8.11
|
|
with:
|
|
user: __token__
|
|
password: ${{ secrets.PYPI_PASSWORD }}
|