abi3 compatible wheels #207
Workflow file for this run
This file contains hidden or 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 and upload to PyPI | |
| on: | |
| pull_request: | |
| push: | |
| tags: | |
| - v* | |
| branches: | |
| - main | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build_wheels: | |
| name: Build wheels on ${{ matrix.os }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-24.04, windows-2025, macos-latest, macos-15-intel, ubuntu-24.04-arm] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Build wheels | |
| uses: pypa/cibuildwheel@v3.3.1 | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: tetgen-wheels-${{ matrix.os }} | |
| path: ./wheelhouse/*.whl | |
| test_abi3: | |
| name: Test ABI3 wheels | |
| needs: build_wheels | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| python-version: ['3.13'] # , '3.14'] # skip 3.14 testing until vtk 9.6 is released | |
| os: [ubuntu-24.04, windows-2025, macos-latest, macos-15-intel, ubuntu-24.04-arm] | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-python@v6 | |
| with: | |
| python-version: ${{ matrix.python-version }} | |
| - uses: actions/download-artifact@v7 | |
| with: | |
| pattern: tetgen-wheels-${{ matrix.os }} | |
| path: wheels/ | |
| - name: Find ABI3 wheel | |
| id: find_wheel | |
| shell: bash | |
| run: | | |
| WHEEL=$(ls wheels/*abi3*.whl | head -n 1) | |
| echo "wheel=$WHEEL" >> "$GITHUB_OUTPUT" | |
| - name: Install wheel | |
| run: pip install "${{ steps.find_wheel.outputs.wheel }}" | |
| - name: Install test dependencies from source | |
| run: | | |
| pip install tomli | |
| pip install $(python -c "import tomli; print(' '.join(tomli.load(open('pyproject.toml','rb'))['project']['optional-dependencies']['tests']))") | |
| - name: Run tests | |
| run: pytest | |
| build_sdist: | |
| name: Build source distribution | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.13' | |
| - name: Build sdist | |
| run: pipx run build --sdist | |
| - name: Install package from sdist | |
| run: pip install dist/*.tar.gz | |
| - name: Install test requirements | |
| run: pip install .[tests] | |
| - name: Run tests | |
| run: pytest | |
| - uses: actions/upload-artifact@v6 | |
| with: | |
| name: tetgen-sdist | |
| path: dist/*.tar.gz | |
| release: | |
| name: Release | |
| if: github.event_name == 'push' && contains(github.ref, 'refs/tags') | |
| needs: [build_wheels, build_sdist] | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: pypi | |
| url: https://pypi.org/p/tetgen | |
| permissions: | |
| id-token: write # this permission is mandatory for trusted publishing | |
| contents: write # required to create a release | |
| steps: | |
| - uses: actions/download-artifact@v7 | |
| - name: Flatten directory structure | |
| run: | | |
| mkdir -p dist/ | |
| find . -name '*.whl' -exec mv {} dist/ \; | |
| find . -name '*.tar.gz' -exec mv {} dist/ \; | |
| - name: Publish package distributions to PyPI | |
| uses: pypa/gh-action-pypi-publish@release/v1 | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| generate_release_notes: true | |
| files: | | |
| ./**/*.whl |