|
name: Build Status |
|
|
|
on: |
|
push: |
|
branches: |
|
- main |
|
tags: |
|
- v* |
|
paths-ignore: |
|
- LICENSE |
|
- README.md |
|
pull_request: |
|
branches: |
|
- main |
|
workflow_dispatch: |
|
|
|
concurrency: |
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} |
|
cancel-in-progress: true |
|
|
|
permissions: |
|
contents: read |
|
checks: write |
|
pull-requests: write |
|
|
|
jobs: |
|
build: |
|
name: build (${{ matrix.platform.name }}-${{ matrix.python.version }}) |
|
runs-on: ${{ matrix.platform.os }} |
|
|
|
strategy: |
|
matrix: |
|
platform: |
|
- name: ubuntu-24.04 |
|
os: ubuntu-24.04 |
|
- name: ubuntu-24.04-arm |
|
os: ubuntu-24.04-arm |
|
- name: macos-26 |
|
os: macos-26 |
|
- name: windows-2025 |
|
os: windows-2025 |
|
python: |
|
- version: "3.11" |
|
cibuildwheel: "cp311" |
|
primary: true |
|
- version: "3.12" |
|
cibuildwheel: "cp312" |
|
primary: false |
|
- version: "3.13" |
|
cibuildwheel: "cp313" |
|
primary: false |
|
include: |
|
- target: native |
|
dist_path: dist |
|
- platform: |
|
name: pyodide |
|
os: ubuntu-24.04 |
|
python: |
|
version: "3.14" |
|
cibuildwheel: "cp314" |
|
primary: false |
|
target: pyodide |
|
dist_path: dist/pyodide |
|
|
|
|
|
steps: |
|
- name: Checkout |
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 |
|
with: |
|
persist-credentials: false |
|
|
|
- name: Setup Python |
|
uses: actions-ext/python/setup@ec67f82b3bd863948308a41ecb9e70547cbb19c7 |
|
with: |
|
version: ${{ matrix.python.version }} |
|
|
|
- name: Setup C++ |
|
uses: actions-ext/cpp/setup@22ebafc6f57971978e964f9977333ac98a7c49d9 |
|
|
|
- name: Setup vcpkg cache |
|
uses: actions-ext/cpp/setup-vcpkg-cache@22ebafc6f57971978e964f9977333ac98a7c49d9 |
|
|
|
- name: Install dependencies |
|
run: make develop |
|
if: matrix.target == 'native' |
|
|
|
- name: Lint |
|
run: make lint |
|
if: matrix.platform.name == 'ubuntu-24.04' && matrix.python.primary |
|
|
|
- name: Checks |
|
run: make checks |
|
if: matrix.platform.name == 'ubuntu-24.04' && matrix.python.primary |
|
|
|
- name: Test |
|
run: make coverage |
|
if: matrix.target == 'native' |
|
|
|
- name: Build and test Pyodide wheel |
|
run: make test-pyodide |
|
if: matrix.target == 'pyodide' |
|
|
|
- name: Upload test results (Python) |
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 |
|
with: |
|
name: test-results-${{ matrix.platform.name }}-${{ matrix.python.version }} |
|
path: junit.xml |
|
if: matrix.platform.name == 'ubuntu-24.04' && matrix.python.primary |
|
|
|
- name: Publish test results |
|
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2.24.0 |
|
with: |
|
files: '**/junit.xml' |
|
if: matrix.platform.name == 'ubuntu-24.04' && matrix.python.primary |
|
|
|
- name: Upload coverage |
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 |
|
with: |
|
token: ${{ secrets.CODECOV_TOKEN }} |
|
if: matrix.target == 'native' |
|
|
|
- name: Install build dependencies |
|
run: pip install cibuildwheel |
|
if: matrix.target == 'native' |
|
|
|
- name: Build distributions (Linux x86_64) |
|
run: | |
|
rm -rf dist |
|
make dist-py-sdist |
|
make dist-py-wheel |
|
make dist-check |
|
env: |
|
CIBW_BUILD: "${{ matrix.python.cibuildwheel }}-manylinux*" |
|
CIBW_ARCHS_LINUX: native |
|
CIBW_BUILD_VERBOSITY: 3 |
|
if: matrix.platform.name == 'ubuntu-24.04' |
|
|
|
- name: Build distributions (Linux ARM64) |
|
run: | |
|
rm -rf dist |
|
make dist-py-wheel |
|
make dist-check |
|
env: |
|
CIBW_BUILD: "${{ matrix.python.cibuildwheel }}-manylinux*" |
|
CIBW_ARCHS_LINUX: native |
|
CIBW_BUILD_VERBOSITY: 3 |
|
if: matrix.platform.name == 'ubuntu-24.04-arm' |
|
|
|
- name: Build distributions (macOS) |
|
run: | |
|
rm -rf dist |
|
make dist-py-wheel |
|
env: |
|
CIBW_BUILD: "${{ matrix.python.cibuildwheel }}-macos*" |
|
CIBW_BUILD_VERBOSITY: 3 |
|
if: matrix.platform.name == 'macos-26' |
|
|
|
- name: Build distributions (Windows) |
|
run: | |
|
if (Test-Path dist) { Remove-Item dist -Recurse -Force } |
|
make dist-py-wheel |
|
env: |
|
CIBW_BUILD: "${{ matrix.python.cibuildwheel }}-win_amd64" |
|
if: matrix.platform.name == 'windows-2025' |
|
|
|
- name: Test wheel |
|
uses: actions-ext/python/test-wheel@ec67f82b3bd863948308a41ecb9e70547cbb19c7 |
|
with: |
|
module: python_template_cpp |
|
if: matrix.target == 'native' && runner.os == 'Linux' |
|
|
|
- name: Test source distribution |
|
uses: actions-ext/python/test-sdist@ec67f82b3bd863948308a41ecb9e70547cbb19c7 |
|
with: |
|
module: python_template_cpp |
|
if: matrix.platform.name == 'ubuntu-24.04' |
|
|
|
- name: Upload distributions |
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 |
|
with: |
|
name: dist-${{ matrix.platform.name }}-${{ matrix.python.version }} |
|
path: ${{ matrix.dist_path }} |