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: 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: 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: 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: name: artifact path: dist - uses: pypa/gh-action-pypi-publish@v1.8.11 with: user: __token__ password: ${{ secrets.PYPI_PASSWORD }}