Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion copier.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ add_pyodide:
type: bool
default: false
help: Build and test Pyodide wheels
when: "{{ add_extension in ['cpp', 'rust'] }}"
when: "{{ add_extension in ['cpp', 'rust', 'cppjswasm', 'rustjswasm'] }}"

python_version_primary:
type: str
Expand Down
1 change: 1 addition & 0 deletions examples/cppjswasm.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
add_docs: true
add_pyodide: false
add_vcpkg: true
add_wiki: true
add_extension: cppjswasm
Expand Down
1 change: 1 addition & 0 deletions examples/rustjswasm.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
add_docs: true
add_pyodide: false
add_wiki: true
add_extension: rustjswasm
email: 3105306+timkpaine@users.noreply.github.com
Expand Down
94 changes: 46 additions & 48 deletions python/cpp/.github/workflows/build.yaml.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,20 @@ permissions:

jobs:
build:
runs-on: {% raw %}${{ matrix.os }}{% endraw %}
name: build ({% raw %}${{ matrix.platform.name }}-${{ matrix.python.version }}{% endraw %})
runs-on: {% raw %}${{ matrix.platform.os }}{% endraw %}

strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
platform:
- name: ubuntu-latest
os: ubuntu-latest
- name: ubuntu-24.04-arm
os: ubuntu-24.04-arm
- name: macos-latest
os: macos-latest
- name: windows-latest
os: windows-latest
python:
{% if python_version_primary == "3.10" -%}
- version: "3.10"
Expand All @@ -49,6 +58,20 @@ jobs:
- version: "3.13"
cibuildwheel: "cp313"
primary: {{ (python_version_primary == "3.13") | lower }}
include:
- target: native
dist_path: dist
{% if add_pyodide -%}
- platform:
name: pyodide
os: ubuntu-latest
python:
version: "3.14"
cibuildwheel: "cp314"
primary: false
target: pyodide
dist_path: dist/pyodide
{% endif %}

steps:
- name: Checkout
Expand All @@ -71,38 +94,46 @@ jobs:
{% endif -%}
- name: Install dependencies
run: make develop
if: matrix.target == 'native'

- name: Lint
run: make lint
if: matrix.os == 'ubuntu-latest' && matrix.python.primary
if: matrix.platform.name == 'ubuntu-latest' && matrix.python.primary

- name: Checks
run: make checks
if: matrix.os == 'ubuntu-latest' && matrix.python.primary
if: matrix.platform.name == 'ubuntu-latest' && 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: {% raw %}test-results-${{ matrix.os }}-${{ matrix.python.version }}{% endraw %}
name: {% raw %}test-results-${{ matrix.platform.name }}-${{ matrix.python.version }}{% endraw %}
path: junit.xml
if: matrix.os == 'ubuntu-latest' && matrix.python.primary
if: matrix.platform.name == 'ubuntu-latest' && matrix.python.primary

- name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2.24.0
with:
files: '**/junit.xml'
if: matrix.os == 'ubuntu-latest' && matrix.python.primary
if: matrix.platform.name == 'ubuntu-latest' && matrix.python.primary

- name: Upload coverage
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
with:
token: {% raw %}${{ secrets.CODECOV_TOKEN }}{% endraw %}
if: matrix.target == 'native'

- name: Install build dependencies
run: pip install cibuildwheel
if: matrix.target == 'native'

- name: Build distributions (Linux x86_64)
run: |
Expand All @@ -114,7 +145,7 @@ jobs:
CIBW_BUILD: {% raw %}"${{ matrix.python.cibuildwheel }}-manylinux*"{% endraw %}
CIBW_ARCHS_LINUX: native
CIBW_BUILD_VERBOSITY: 3
if: matrix.os == 'ubuntu-latest'
if: matrix.platform.name == 'ubuntu-latest'

- name: Build distributions (Linux ARM64)
run: |
Expand All @@ -125,7 +156,7 @@ jobs:
CIBW_BUILD: {% raw %}"${{ matrix.python.cibuildwheel }}-manylinux*"{% endraw %}
CIBW_ARCHS_LINUX: native
CIBW_BUILD_VERBOSITY: 3
if: matrix.os == 'ubuntu-24.04-arm'
if: matrix.platform.name == 'ubuntu-24.04-arm'

- name: Build distributions (macOS)
run: |
Expand All @@ -134,63 +165,30 @@ jobs:
env:
CIBW_BUILD: {% raw %}"${{ matrix.python.cibuildwheel }}-macos*"{% endraw %}
CIBW_BUILD_VERBOSITY: 3
if: matrix.os == 'macos-latest'
if: matrix.platform.name == 'macos-latest'

- name: Build distributions (Windows)
run: |
if (Test-Path dist) { Remove-Item dist -Recurse -Force }
make dist-py-wheel
env:
CIBW_BUILD: {% raw %}"${{ matrix.python.cibuildwheel }}-win_amd64"{% endraw %}
if: matrix.os == 'windows-latest'
if: matrix.platform.name == 'windows-latest'

- name: Test wheel
uses: actions-ext/python/test-wheel@6e1b91a408ea89f49bc8aff8724f83826f7b5446
with:
module: {{module}}
if: runner.os == 'Linux'
if: matrix.target == 'native' && runner.os == 'Linux'

- name: Test source distribution
uses: actions-ext/python/test-sdist@6e1b91a408ea89f49bc8aff8724f83826f7b5446
with:
module: {{module}}
if: matrix.os == 'ubuntu-latest'
if: matrix.platform.name == 'ubuntu-latest'

- name: Upload distributions
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: {% raw %}dist-${{ matrix.os }}-${{ matrix.python.version }}{% endraw %}
path: dist

{% if add_pyodide %}
pyodide:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Setup Python
uses: actions-ext/python/setup@6e1b91a408ea89f49bc8aff8724f83826f7b5446
with:
version: "3.14"

- name: Setup C++
uses: actions-ext/cpp/setup@c2b1e90366b3a1c628a1df0748135f5e345ab26f

{% if add_vcpkg -%}
- name: Setup vcpkg cache
uses: actions-ext/cpp/setup-vcpkg-cache@c2b1e90366b3a1c628a1df0748135f5e345ab26f

{% endif -%}
- name: Build and test Pyodide wheel
run: make test-pyodide

- name: Upload Pyodide distribution
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: dist-pyodide
path: dist/pyodide
{% endif %}
name: {% raw %}dist-${{ matrix.platform.name }}-${{ matrix.python.version }}{% endraw %}
path: {% raw %}${{ matrix.dist_path }}{% endraw %}
68 changes: 53 additions & 15 deletions python/cppjswasm/.github/workflows/build.yaml.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,39 @@ permissions:

jobs:
build:
name: build ({% raw %}${{ matrix.name }}{% endraw %})
runs-on: {% raw %}${{ matrix.os }}{% endraw %}

strategy:
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
include:
- name: ubuntu-latest
dist_path: dist
os: ubuntu-latest
python: "{{ python_version_primary }}"
target: native
- name: ubuntu-24.04-arm
dist_path: dist
os: ubuntu-24.04-arm
python: "{{ python_version_primary }}"
target: native
- name: macos-latest
dist_path: dist
os: macos-latest
python: "{{ python_version_primary }}"
target: native
- name: windows-latest
dist_path: dist
os: windows-latest
python: "{{ python_version_primary }}"
target: native
{% if add_pyodide -%}
- name: pyodide
dist_path: dist/pyodide
os: ubuntu-latest
python: "3.14"
target: pyodide
{% endif %}

steps:
- name: Checkout
Expand All @@ -40,12 +68,13 @@ jobs:
- name: Setup Python
uses: actions-ext/python/setup@6e1b91a408ea89f49bc8aff8724f83826f7b5446
with:
version: "{{ python_version_primary }}"
version: {% raw %}${{ matrix.python }}{% endraw %}

- name: Setup Node.js
uses: actions-ext/node/setup@0ea5bdcd24d2488b28e16bf611b446a2f8e1e12f
with:
version: 22.x
if: matrix.target == 'native'

- name: Setup C++
uses: actions-ext/cpp/setup@c2b1e90366b3a1c628a1df0748135f5e345ab26f
Expand All @@ -57,41 +86,50 @@ jobs:
{% endif -%}
- name: Setup Emscripten
uses: mymindstorm/setup-emsdk@4528d102f7230f0e7b276855c01ea1159be0e984 # v16
if: matrix.target == 'native'

- name: Install dependencies
run: make develop
if: matrix.target == 'native'

- name: Lint
run: make lint
if: matrix.os == 'ubuntu-latest'
if: matrix.name == 'ubuntu-latest'

- name: Checks
run: make checks
if: matrix.os == 'ubuntu-latest'
if: matrix.name == 'ubuntu-latest'

- 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: {% raw %}test-results-${{ matrix.os }}{% endraw %}
name: {% raw %}test-results-${{ matrix.name }}{% endraw %}
path: junit.xml
if: matrix.os == 'ubuntu-latest'
if: matrix.name == 'ubuntu-latest'

- name: Publish test results
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2.24.0
with:
files: '**/junit.xml'
if: matrix.os == 'ubuntu-latest'
if: matrix.name == 'ubuntu-latest'

- name: Upload coverage
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
with:
token: {% raw %}${{ secrets.CODECOV_TOKEN }}{% endraw %}
if: matrix.target == 'native'

- name: Install build dependencies
run: pip install cibuildwheel
if: matrix.target == 'native'

- name: Build distributions (Linux x86_64)
run: |
Expand All @@ -103,7 +141,7 @@ jobs:
CIBW_BUILD: "cp{{ python_version_primary.replace('.', '') }}-manylinux*"
CIBW_ARCHS_LINUX: native
CIBW_BUILD_VERBOSITY: 3
if: matrix.os == 'ubuntu-latest'
if: matrix.name == 'ubuntu-latest'

- name: Build distributions (Linux ARM64)
run: |
Expand All @@ -114,7 +152,7 @@ jobs:
CIBW_BUILD: "cp{{ python_version_primary.replace('.', '') }}-manylinux*"
CIBW_ARCHS_LINUX: native
CIBW_BUILD_VERBOSITY: 3
if: matrix.os == 'ubuntu-24.04-arm'
if: matrix.name == 'ubuntu-24.04-arm'

- name: Build distributions (macOS)
run: |
Expand All @@ -123,30 +161,30 @@ jobs:
env:
CIBW_BUILD: "cp{{ python_version_primary.replace('.', '') }}-macos*"
CIBW_BUILD_VERBOSITY: 3
if: matrix.os == 'macos-latest'
if: matrix.name == 'macos-latest'

- name: Build distributions (Windows)
run: |
if (Test-Path dist) { Remove-Item dist -Recurse -Force }
make dist-py-wheel
env:
CIBW_BUILD: "cp{{ python_version_primary.replace('.', '') }}-win_amd64"
if: matrix.os == 'windows-latest'
if: matrix.name == 'windows-latest'

- name: Test wheel
uses: actions-ext/python/test-wheel@6e1b91a408ea89f49bc8aff8724f83826f7b5446
with:
module: {{module}}
if: runner.os == 'Linux'
if: matrix.target == 'native' && runner.os == 'Linux'

- name: Test source distribution
uses: actions-ext/python/test-sdist@6e1b91a408ea89f49bc8aff8724f83826f7b5446
with:
module: {{module}}
if: matrix.os == 'ubuntu-latest'
if: matrix.name == 'ubuntu-latest'

- name: Upload distributions
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: {% raw %}dist-${{ matrix.os }}{% endraw %}
path: dist
name: {% raw %}dist-${{ matrix.name }}{% endraw %}
path: {% raw %}${{ matrix.dist_path }}{% endraw %}
3 changes: 3 additions & 0 deletions python/cppjswasm/.gitignore.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,9 @@ Untitled*.ipynb

# Emscripten SDK (locally installed)
emsdk
{% if add_pyodide -%}
.pyodide_build/
{% endif %}

# Mac
.DS_Store
Expand Down
6 changes: 5 additions & 1 deletion python/cppjswasm/Makefile.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,12 @@ tests-cpp: test-cpp
coverage-cpp: ## run C++ tests and collect test coverage
make -C cpp coverage

.PHONY: test coverage tests
.PHONY: test{% if add_pyodide %} test-pyodide{% endif %} coverage tests
test: test-py test-js test-cpp ## run all tests
{% if add_pyodide %}
test-pyodide: ## build and test the Python package in Pyodide
uvx --from cibuildwheel==4.2.0 cibuildwheel --only cp314-pyodide_wasm32 --output-dir dist/pyodide .
{% endif %}
coverage: coverage-py coverage-js coverage-cpp ## run all tests and collect test coverage

# alias
Expand Down
Loading
Loading