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
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ jobs:
python: ["3.11", "3.12", "3.13", "3.14"]
env:
# WIRELOG_VERSION here is the exact wirelog ref CI builds against.
# The default is pinned to the wirelog v0.51.0 release commit;
# The default is pinned to the wirelog v0.52.0 release commit;
# override the repository variable to test another ref before
# updating this fallback.
WIRELOG_VERSION: ${{ vars.WIRELOG_VERSION || '0c6e0cdaee7db069be5d8d896bb59bdcb15673e9' }}
WIRELOG_VERSION: ${{ vars.WIRELOG_VERSION || 'da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba' }}
# `runner.temp` is NOT available in job-level `env:` (only in
# step-level contexts) — using it here caused the whole workflow
# to fail at startup (#114). `github.workspace` IS resolvable at
Expand Down
15 changes: 14 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,18 @@ wirelog floor and a validated wirelog ref (see

## [Unreleased]

## [1.0.3] - 2026-06-28

### Changed
- The bundled and validated wirelog ref moves from `v0.51.0` to
`v0.52.0` at peeled SHA
`da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba`.
- The minimum compatible runtime wirelog version is raised from `0.44.0`
to `0.52.0`. `MINIMUM_WIRELOG_VERSION` in the loader now rejects any
libwirelog older than `0.52.0`, so source installs must provide a
system `libwirelog` of `0.52.0` or newer. The PyreWire public API is
unchanged.

## [1.0.2] - 2026-06-19

### Changed
Expand Down Expand Up @@ -162,7 +174,8 @@ runtime wirelog version remaining `0.44.0`.
wirelog#852. They are available in the later [1.0.0] line, whose
validated wirelog ref is v0.50.0. Tracked in wirelog#859.

[Unreleased]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.2...HEAD
[Unreleased]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.3...HEAD
[1.0.3]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.2...v1.0.3
[1.0.2]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.1...v1.0.2
[1.0.1]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.0...v1.0.1
[1.0.0]: https://github.com/semantic-reasoning/PyreWire/compare/v0.41.0...v1.0.0
Expand Down
6 changes: 3 additions & 3 deletions docs/support.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ not need to install wirelog separately.
| macOS | `arm64` | `macos-15` | Apple Silicon only for v1.0; no macOS Intel or universal2 wheel is produced. |
| Windows | `win_amd64` / `AMD64` | `windows-2025-vs2026` | Built with MSVC and repaired with delvewheel. |

The bundled library is built from wirelog v0.51.0, using peeled SHA
`0c6e0cdaee7db069be5d8d896bb59bdcb15673e9`.
The bundled library is built from wirelog v0.52.0, using peeled SHA
`da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba`.

## Source Distributions

Source distributions do not bundle `libwirelog`. A source install needs
a compatible system `libwirelog` that PyreWire can discover at runtime.
The minimum compatible wirelog version is >= 0.44.0.
The minimum compatible wirelog version is >= 0.52.0.

PyreWire searches for `libwirelog` through its normal loader order,
including the system dynamic linker and `pkg-config`. Set `WIRELOG_LIB`
Expand Down
1 change: 1 addition & 0 deletions docs/versioning.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ release to publish; it is **not** tied to the wirelog change.
| `1.0.0` | `0.44.0` | `272edf3a24b25676f12c4b843d55510f5048dd2f` | Validated against wirelog `v0.50.0` (peeled tag SHA); runtime minimum remains `0.44.0`. |
| `1.0.1` | `0.44.0` | `0c6e0cdaee7db069be5d8d896bb59bdcb15673e9` | Validated against wirelog `v0.51.0` (peeled tag SHA); runtime minimum remains `0.44.0`. Bundled engine bumped to pick up the wirelog#914 single-body-rule derivation fix (#165). |
| `1.0.2` | `0.44.0` | `0c6e0cdaee7db069be5d8d896bb59bdcb15673e9` | Validated against wirelog `v0.51.0` (peeled tag SHA); runtime minimum remains `0.44.0`. PyreWire-only maintenance release (CI action bumps, SPDX headers, docs); no engine change. |
| `1.0.3` | `0.52.0` | `da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba` | Validated against wirelog `v0.52.0` (peeled tag SHA); runtime minimum raised to `0.52.0`. Bundled engine bumped to v0.52.0 and the loader floor moved up to match. |

The table grows with every release; the source of truth is the
[CHANGELOG](https://github.com/semantic-reasoning/PyreWire/blob/main/CHANGELOG.md).
10 changes: 5 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "pyrewire"
version = "1.0.2"
version = "1.0.3"
description = "Python wrapper for wirelog - declarative dataflow analysis"
readme = "README.md"
requires-python = ">=3.11"
Expand Down Expand Up @@ -74,7 +74,7 @@ test-requires = ["pytest", "pytest-cov"]
before-build = "python {project}/scripts/bundle_libwirelog.py"
# Pin the wirelog source ref here too so the environment matches the
# `WIRELOG_VERSION` used by the test-matrix workflow.
environment = { WIRELOG_VERSION = "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9" }
environment = { WIRELOG_VERSION = "da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba" }

[tool.cibuildwheel.linux]
manylinux-x86_64-image = "manylinux_2_28"
Expand All @@ -83,7 +83,7 @@ before-all = """
pip install meson && \
WIRELOG_PREFIX=/wirelog-install bash {project}/scripts/build_wirelog.sh
"""
environment = { WIRELOG_VERSION = "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9", WIRELOG_PREFIX = "/wirelog-install", WIRELOG_LIB = "/wirelog-install/lib/libwirelog.so.1", LD_LIBRARY_PATH = "/wirelog-install/lib" }
environment = { WIRELOG_VERSION = "da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba", WIRELOG_PREFIX = "/wirelog-install", WIRELOG_LIB = "/wirelog-install/lib/libwirelog.so.1", LD_LIBRARY_PATH = "/wirelog-install/lib" }
# `auditwheel` bundles libwirelog.so.1 into the wheel and patches the
# RPATH (#31). Without this every wheel would ship as a manylinux
# wheel that immediately fails at import time on systems without the
Expand All @@ -96,15 +96,15 @@ before-all = """
brew install ninja meson pkg-config && \
WIRELOG_PREFIX=$HOME/wirelog-install bash {project}/scripts/build_wirelog.sh
"""
environment = { WIRELOG_VERSION = "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9", WIRELOG_PREFIX = "$HOME/wirelog-install", WIRELOG_LIB = "$HOME/wirelog-install/lib/libwirelog.1.dylib", DYLD_LIBRARY_PATH = "$HOME/wirelog-install/lib" }
environment = { WIRELOG_VERSION = "da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba", WIRELOG_PREFIX = "$HOME/wirelog-install", WIRELOG_LIB = "$HOME/wirelog-install/lib/libwirelog.1.dylib", DYLD_LIBRARY_PATH = "$HOME/wirelog-install/lib" }
# `delocate` is macOS's auditwheel equivalent — copies the dylib into
# the wheel and rewrites install names so the bundled copy wins.
repair-wheel-command = "DYLD_LIBRARY_PATH=$HOME/wirelog-install/lib delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}"

[tool.cibuildwheel.windows]
archs = ["AMD64"]
before-all = "powershell {project}\\scripts\\build_wirelog.ps1"
environment = { WIRELOG_VERSION = "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9", WIRELOG_PREFIX = "C:/wirelog-install", WIRELOG_LIB = "C:/wirelog-install/bin/wirelog-1.dll" }
environment = { WIRELOG_VERSION = "da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba", WIRELOG_PREFIX = "C:/wirelog-install", WIRELOG_LIB = "C:/wirelog-install/bin/wirelog-1.dll" }
# `delvewheel` is the Windows analogue. The bundled DLL ends up in
# `pyrewire/_lib/` and the loader (#2) finds it ahead of system paths.
repair-wheel-command = "pip install delvewheel && delvewheel repair -w {dest_dir} --no-mangle-all --add-path C:/wirelog-install/bin {wheel}"
Expand Down
2 changes: 1 addition & 1 deletion src/pyrewire/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: Apache-2.0 OR GPL-3.0-or-later
"""PyreWire - Python wrapper for wirelog declarative dataflow analysis."""

__version__ = "1.0.2"
__version__ = "1.0.3"
__author__ = "PyreWire Contributors"
__license__ = "Apache-2.0 OR GPL-3.0-or-later"

Expand Down
2 changes: 1 addition & 1 deletion src/pyrewire/_ffi/_loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
_SENTINEL_SYMBOL = "wirelog_easy_open"


MINIMUM_WIRELOG_VERSION: tuple[int, int, int] = (0, 44, 0)
MINIMUM_WIRELOG_VERSION: tuple[int, int, int] = (0, 52, 0)
"""Oldest libwirelog version this PyreWire build supports.

PyreWire CI builds against a pinned wirelog release commit, so the loader
Expand Down
8 changes: 4 additions & 4 deletions tests/docs/test_support_matrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

yaml = pytest.importorskip("yaml")

PINNED_WIRELOG_SHA = "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9"
PINNED_WIRELOG_SHA = "da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba"
SUPPORTED_PYTHONS = ["3.11", "3.12", "3.13", "3.14"]
SUPPORTED_CP_TAGS = ["cp311", "cp312", "cp313", "cp314"]
SUPPORTED_RUNNERS = ["ubuntu-24.04", "macos-15", "windows-2025-vs2026"]
Expand Down Expand Up @@ -122,7 +122,7 @@ def test_support_wirelog_bundle_contract_matches_config_and_versioning():
assert cibw["macos"]["environment"]["WIRELOG_VERSION"] == PINNED_WIRELOG_SHA
assert cibw["windows"]["environment"]["WIRELOG_VERSION"] == PINNED_WIRELOG_SHA

assert "wirelog v0.51.0" in support
assert "wirelog v0.52.0" in support
assert PINNED_WIRELOG_SHA in support
assert "peeled SHA" in support
assert "Wheels bundle" in versioning
Expand All @@ -135,11 +135,11 @@ def test_support_documents_sdist_system_libwirelog_behavior():

assert "Source distributions do not bundle `libwirelog`" in support
assert "compatible system `libwirelog`" in support
assert "minimum compatible wirelog version is >= 0.44.0" in support
assert "minimum compatible wirelog version is >= 0.52.0" in support
assert "`WIRELOG_LIB`" in support
assert "explicit path" in support
assert re.search(
r"^MINIMUM_WIRELOG_VERSION:\s*tuple\[int, int, int\]\s*=\s*\(0,\s*44,\s*0\)",
r"^MINIMUM_WIRELOG_VERSION:\s*tuple\[int, int, int\]\s*=\s*\(0,\s*52,\s*0\)",
loader,
re.MULTILINE,
)
Expand Down
18 changes: 15 additions & 3 deletions tests/docs/test_versioning_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@
yaml = pytest.importorskip("yaml")

# The wirelog ref the current release bundles and validates against.
PINNED_WIRELOG_SHA = "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9"
PINNED_WIRELOG_SHA = "da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba"
# Historical pins kept frozen in the compatibility table, one per release.
WIRELOG_SHA_100 = "272edf3a24b25676f12c4b843d55510f5048dd2f"
WIRELOG_SHA_101 = PINNED_WIRELOG_SHA
WIRELOG_SHA_101 = "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9"
WIRELOG_SHA_102 = WIRELOG_SHA_101
WIRELOG_SHA_103 = PINNED_WIRELOG_SHA


def _repo_root() -> Path:
Expand Down Expand Up @@ -53,6 +55,16 @@ def test_versioning_documents_101_wirelog_pin_and_runtime_floor():
assert "peeled tag SHA" in notes


def test_versioning_documents_103_wirelog_pin_and_runtime_floor():
minimum, validated_ref, notes = _versioning_row("1.0.3")

assert minimum == "`0.52.0`"
assert validated_ref == f"`{WIRELOG_SHA_103}`"
assert "v0.52.0" in notes
assert "runtime minimum raised to `0.52.0`" in notes
assert "peeled tag SHA" in notes


def test_versioning_explains_sdist_and_wheel_wirelog_behavior():
text = _read("docs/versioning.md")

Expand Down Expand Up @@ -81,7 +93,7 @@ def test_wirelog_pins_and_loader_floor_match_current_contract():
assert cibw["windows"]["environment"]["WIRELOG_VERSION"] == PINNED_WIRELOG_SHA

assert re.search(
r"^MINIMUM_WIRELOG_VERSION:\s*tuple\[int, int, int\]\s*=\s*\(0,\s*44,\s*0\)",
r"^MINIMUM_WIRELOG_VERSION:\s*tuple\[int, int, int\]\s*=\s*\(0,\s*52,\s*0\)",
loader,
re.MULTILINE,
)
6 changes: 5 additions & 1 deletion tests/test_changelog_format.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,11 @@ def test_release_compare_links_are_tag_to_tag():
changelog = (_repo_root() / "CHANGELOG.md").read_text(encoding="utf-8")

assert (
"[Unreleased]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.2...HEAD"
"[Unreleased]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.3...HEAD"
in changelog
)
assert (
"[1.0.3]: https://github.com/semantic-reasoning/PyreWire/compare/v1.0.2...v1.0.3"
in changelog
)
assert (
Expand Down
2 changes: 1 addition & 1 deletion tests/test_ci_workflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def _workflow() -> dict[str, Any]:
def test_ci_default_wirelog_version_is_exact_sha():
env = _workflow()["jobs"]["test"]["env"]
default = str(env["WIRELOG_VERSION"])
assert "0c6e0cdaee7db069be5d8d896bb59bdcb15673e9" in default
assert "da82a14a7e1472e33aa6ed753b3bc3dfe28a68ba" in default


def test_ci_matrix_drops_python_310():
Expand Down
6 changes: 3 additions & 3 deletions tests/test_release_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ def _runtime_version_literal() -> str:
return match.group(1)


def test_project_and_runtime_versions_are_102():
assert _pyproject()["project"]["version"] == "1.0.2"
assert _runtime_version_literal() == "1.0.2"
def test_project_and_runtime_versions_are_103():
assert _pyproject()["project"]["version"] == "1.0.3"
assert _runtime_version_literal() == "1.0.3"


def test_project_classifiers_mark_stable_python_311_through_314():
Expand Down