diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f2bf0a..89d54f0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index d183741..5fd48eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 @@ -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 diff --git a/docs/support.md b/docs/support.md index 25d7c8f..c3075cf 100644 --- a/docs/support.md +++ b/docs/support.md @@ -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` diff --git a/docs/versioning.md b/docs/versioning.md index c8adf87..0bb9c6d 100644 --- a/docs/versioning.md +++ b/docs/versioning.md @@ -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). diff --git a/pyproject.toml b/pyproject.toml index 78d1ecd..0a5895e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" @@ -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" @@ -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 @@ -96,7 +96,7 @@ 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}" @@ -104,7 +104,7 @@ repair-wheel-command = "DYLD_LIBRARY_PATH=$HOME/wirelog-install/lib delocate-whe [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}" diff --git a/src/pyrewire/__init__.py b/src/pyrewire/__init__.py index fef1b10..be98cda 100644 --- a/src/pyrewire/__init__.py +++ b/src/pyrewire/__init__.py @@ -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" diff --git a/src/pyrewire/_ffi/_loader.py b/src/pyrewire/_ffi/_loader.py index 374d3e2..b211ddf 100644 --- a/src/pyrewire/_ffi/_loader.py +++ b/src/pyrewire/_ffi/_loader.py @@ -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 diff --git a/tests/docs/test_support_matrix.py b/tests/docs/test_support_matrix.py index ed6a518..a61eaa4 100644 --- a/tests/docs/test_support_matrix.py +++ b/tests/docs/test_support_matrix.py @@ -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"] @@ -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 @@ -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, ) diff --git a/tests/docs/test_versioning_contract.py b/tests/docs/test_versioning_contract.py index d835339..00ddd21 100644 --- a/tests/docs/test_versioning_contract.py +++ b/tests/docs/test_versioning_contract.py @@ -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: @@ -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") @@ -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, ) diff --git a/tests/test_changelog_format.py b/tests/test_changelog_format.py index f26af5e..3a11cd4 100644 --- a/tests/test_changelog_format.py +++ b/tests/test_changelog_format.py @@ -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 ( diff --git a/tests/test_ci_workflow.py b/tests/test_ci_workflow.py index d2e14a5..8750076 100644 --- a/tests/test_ci_workflow.py +++ b/tests/test_ci_workflow.py @@ -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(): diff --git a/tests/test_release_metadata.py b/tests/test_release_metadata.py index 3493d44..933dbd4 100644 --- a/tests/test_release_metadata.py +++ b/tests/test_release_metadata.py @@ -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():