Modernize build versioning #187
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 | |
| on: | |
| pull_request: | |
| push: | |
| branches: | |
| - master | |
| tags: | |
| - 'v*' | |
| # https://docs.github.com/en/actions/using-jobs/using-concurrency#example-using-a-fallback-value | |
| # Only cancels-in-progress on PRs (head_ref only defined in PR, fallback run_id always unique) | |
| concurrency: | |
| group: ${{ github.head_ref || github.run_id }} | |
| cancel-in-progress: true | |
| jobs: | |
| test: | |
| name: Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # setuptools-scm needs tags to compute the version | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.12' | |
| - name: Install dependencies and build | |
| run: | | |
| pip install build cmake ninja | |
| pip install -v .[test] | |
| - name: Run tests | |
| run: pytest tests/ -v | |
| build_wheels: | |
| name: Build wheels on ${{ matrix.os }} | |
| needs: [test] | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| # macos-15-intel is Intel x86_64, macos-14 is Apple Silicon ARM64 | |
| os: [ubuntu-latest, macos-15-intel, macos-14] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # setuptools-scm needs tags to compute the version | |
| - name: Build wheels | |
| uses: pypa/cibuildwheel@v2.22.0 | |
| env: | |
| CIBW_SKIP: "pp* *-win32 *_i686" | |
| CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28 | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: cibw-wheels-${{ matrix.os }}-${{ strategy.job-index }} | |
| path: ./wheelhouse/*.whl | |
| compression-level: 0 | |
| build_sdist: | |
| name: Build source distribution | |
| needs: [test] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # setuptools-scm needs tags to compute the version | |
| - name: Build sdist | |
| run: pipx run build --sdist | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: cibw-sdist | |
| path: dist/*.tar.gz | |
| compression-level: 0 | |
| upload_pypi: | |
| needs: [build_wheels, build_sdist] | |
| runs-on: ubuntu-latest | |
| environment: pypi | |
| permissions: | |
| id-token: write | |
| if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| # unpacks all CIBW artifacts into dist/ | |
| pattern: cibw-* | |
| path: dist | |
| merge-multiple: true | |
| - name: Verify wheel integrity | |
| run: | | |
| pip install twine | |
| for whl in dist/*.whl; do | |
| echo "Checking $whl..." | |
| unzip -t "$whl" || { echo "CORRUPT: $whl"; exit 1; } | |
| done | |
| twine check dist/* | |
| - uses: pypa/gh-action-pypi-publish@release/v1 | |
| with: | |
| verbose: true | |
| password: ${{ secrets.PYPI_API_TOKEN }} |