From 5e453eb6b90f373148da10ff50b8425f479dd456 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Thu, 29 Oct 2026 15:12:47 -0500 Subject: [PATCH 1/2] Install audiodsp at the pin under its new name, omnipython-audiodsp audiodsp now publishes as omnipython-audiodsp, and pip refuses a requirement named pydevices-audiodsp that builds metadata under the new name. The package floors in lib/*/pyproject.toml keep the released name; every pinned install here uses --no-deps. --- .github/workflows/publish-release-packages.yml | 4 ++-- .github/workflows/tests.yml | 6 +++--- CONTRIBUTING.md | 2 +- tools/effect_probes/README.md | 2 +- tools/effect_probes/make_probes.py | 4 ++-- tools/wheel_gate.py | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/publish-release-packages.yml b/.github/workflows/publish-release-packages.yml index 1dfde50e..9c4d3a52 100644 --- a/.github/workflows/publish-release-packages.yml +++ b/.github/workflows/publish-release-packages.yml @@ -49,7 +49,7 @@ jobs: - name: Install audiodsp at the pin run: >- python -m pip install - "pydevices-audiodsp @ git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" + "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" # numpy: two tests need it (test_cpython_asym_table through the ulab # bridge, test_rig_comparator directly); the packages themselves do not. @@ -57,7 +57,7 @@ jobs: - run: python -m pip install numpy pytest pytest-xdist # --no-deps is load-bearing: without it a floor raised above the pinned - # release re-resolves pydevices-audiodsp from the index and every + # release re-resolves omnipython-audiodsp from the index and every # measurement is taken against a core AUDIODSP_PIN does not name -- the # failure the pin exists to prevent, arriving through packaging. Do not # drop the flag. diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4778b528..6cdc4226 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -111,11 +111,11 @@ jobs: if: steps.audiodsp-wheel.outputs.cache-hit != 'true' run: >- python -m pip wheel --no-deps --wheel-dir .audiodsp-wheel - "pydevices-audiodsp @ git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" + "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" - name: Install audiodsp at the pin shell: bash - run: python -m pip install .audiodsp-wheel/pydevices_audiodsp-*.whl + run: python -m pip install .audiodsp-wheel/omnipython_audiodsp-*.whl # Editable, so the tests exercise lib/ directly rather than a copy, and # so each package's own pyproject.toml is exercised too. @@ -126,7 +126,7 @@ jobs: - run: python -m pip install numpy pytest pytest-xdist # --no-deps is load-bearing: without it a floor raised above the pinned - # release re-resolves pydevices-audiodsp from the index and every + # release re-resolves omnipython-audiodsp from the index and every # measurement is taken against a core AUDIODSP_PIN does not name -- the # failure the pin exists to prevent, arriving through packaging. Do not # drop the flag. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 904e7ea6..f2a3445a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,7 @@ the pin: `AUDIODSP_PIN` may name a commit ahead of it, and the gates use the pin ```bash python3 -m venv .venv -.venv/bin/pip install "pydevices-audiodsp @ git+https://github.com/PyDevices/audiodsp@v0.6.9" +.venv/bin/pip install "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@v0.6.9" .venv/bin/pip install -e lib/audioinstruments -e lib/audioeffects ``` diff --git a/tools/effect_probes/README.md b/tools/effect_probes/README.md index 39f15e18..30d274cf 100644 --- a/tools/effect_probes/README.md +++ b/tools/effect_probes/README.md @@ -77,7 +77,7 @@ the one CI installs. An audiodsp that renders the instruments differently fails the check, and the message says so; install audiodsp at the pin: ``` -pip install "pydevices-audiodsp @ git+https://github.com/PyDevices/audiodsp@" +pip install "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@" ``` That failure is the point of the check: it is how a change in the way diff --git a/tools/effect_probes/make_probes.py b/tools/effect_probes/make_probes.py index 59cf62fa..f8eddb10 100644 --- a/tools/effect_probes/make_probes.py +++ b/tools/effect_probes/make_probes.py @@ -758,7 +758,7 @@ def _audiodsp_pin(): def _audiodsp_installed(): try: from importlib.metadata import version - return version("pydevices-audiodsp") + return version("omnipython-audiodsp") except Exception: return "not found" @@ -769,7 +769,7 @@ def _instrument_advice(name): " probes.json records them at the audiodsp release AUDIODSP_PIN" " names: install audiodsp at %s (this interpreter has %s), for" " example" - ' pip install "pydevices-audiodsp @' + ' pip install "omnipython-audiodsp @' ' git+https://github.com/PyDevices/audiodsp@%s".' % (pin, _audiodsp_installed(), pin)) diff --git a/tools/wheel_gate.py b/tools/wheel_gate.py index ac1a7771..b28bc494 100644 --- a/tools/wheel_gate.py +++ b/tools/wheel_gate.py @@ -145,7 +145,7 @@ def main(): help="pip requirement for audiodsp (default: the AUDIODSP_PIN commit)") args = parser.parse_args() audiodsp = args.audiodsp or ( - "pydevices-audiodsp @ git+https://github.com/PyDevices/audiodsp@" + "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@" + audiodsp_pin()) failures = [] From a3179de1bb32233724affe23255a984be14ed4e3 Mon Sep 17 00:00:00 2001 From: Brad Barnett <127794626+bdbarnett@users.noreply.github.com> Date: Thu, 29 Oct 2026 15:57:34 -0500 Subject: [PATCH 2/2] Let the pinned audiodsp ref name its own distribution audiodsp was renamed from pydevices-audiodsp to omnipython-audiodsp, and a named requirement only installs when the name matches the one the ref's pyproject.toml declares: omnipython-audiodsp @ ...@v0.6.9 fails, because v0.6.9 predates the rename. Every install of the pin now uses a bare git+URL@ref requirement, so pip takes the name from the commit it builds. The test jobs install whichever audiodsp wheel was built, and make_probes.py reports the installed version under either name. --- .github/workflows/publish-release-packages.yml | 7 +++++-- .github/workflows/tests.yml | 10 +++++++--- CONTRIBUTING.md | 2 +- tools/effect_probes/README.md | 2 +- tools/effect_probes/make_probes.py | 16 +++++++++++----- tools/wheel_gate.py | 2 +- 6 files changed, 26 insertions(+), 13 deletions(-) diff --git a/.github/workflows/publish-release-packages.yml b/.github/workflows/publish-release-packages.yml index 9c4d3a52..035f8480 100644 --- a/.github/workflows/publish-release-packages.yml +++ b/.github/workflows/publish-release-packages.yml @@ -46,10 +46,13 @@ jobs: echo "tag=$tag" >> "$GITHUB_OUTPUT" echo "audiodsp pinned at $tag" + # No distribution name in the requirement: the pinned commit's own + # pyproject.toml names it (pydevices-audiodsp before the rename, + # omnipython-audiodsp after), as in tests.yml. - name: Install audiodsp at the pin run: >- python -m pip install - "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" + "git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" # numpy: two tests need it (test_cpython_asym_table through the ulab # bridge, test_rig_comparator directly); the packages themselves do not. @@ -57,7 +60,7 @@ jobs: - run: python -m pip install numpy pytest pytest-xdist # --no-deps is load-bearing: without it a floor raised above the pinned - # release re-resolves omnipython-audiodsp from the index and every + # release re-resolves audiodsp from the index and every # measurement is taken against a core AUDIODSP_PIN does not name -- the # failure the pin exists to prevent, arriving through packaging. Do not # drop the flag. diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6cdc4226..3a5ffcb2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -107,15 +107,19 @@ jobs: path: .audiodsp-wheel key: audiodsp-wheel-v1-${{ steps.pin.outputs.tag }}-${{ runner.os }}-${{ runner.arch }}-py${{ matrix.python }} + # The requirement carries no distribution name: audiodsp was renamed + # from pydevices-audiodsp to omnipython-audiodsp, and the name pip + # checks must be the one the pinned commit declares. Without a name, + # pip reads it from that commit's pyproject.toml. - name: Build the audiodsp wheel at the pin if: steps.audiodsp-wheel.outputs.cache-hit != 'true' run: >- python -m pip wheel --no-deps --wheel-dir .audiodsp-wheel - "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" + "git+https://github.com/PyDevices/audiodsp@${{ steps.pin.outputs.tag }}" - name: Install audiodsp at the pin shell: bash - run: python -m pip install .audiodsp-wheel/omnipython_audiodsp-*.whl + run: python -m pip install .audiodsp-wheel/*audiodsp-*.whl # Editable, so the tests exercise lib/ directly rather than a copy, and # so each package's own pyproject.toml is exercised too. @@ -126,7 +130,7 @@ jobs: - run: python -m pip install numpy pytest pytest-xdist # --no-deps is load-bearing: without it a floor raised above the pinned - # release re-resolves omnipython-audiodsp from the index and every + # release re-resolves audiodsp from the index and every # measurement is taken against a core AUDIODSP_PIN does not name -- the # failure the pin exists to prevent, arriving through packaging. Do not # drop the flag. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f2a3445a..a5dd4aad 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -32,7 +32,7 @@ the pin: `AUDIODSP_PIN` may name a commit ahead of it, and the gates use the pin ```bash python3 -m venv .venv -.venv/bin/pip install "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@v0.6.9" +.venv/bin/pip install "git+https://github.com/PyDevices/audiodsp@v0.6.9" .venv/bin/pip install -e lib/audioinstruments -e lib/audioeffects ``` diff --git a/tools/effect_probes/README.md b/tools/effect_probes/README.md index 30d274cf..ed1eb969 100644 --- a/tools/effect_probes/README.md +++ b/tools/effect_probes/README.md @@ -77,7 +77,7 @@ the one CI installs. An audiodsp that renders the instruments differently fails the check, and the message says so; install audiodsp at the pin: ``` -pip install "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@" +pip install "git+https://github.com/PyDevices/audiodsp@" ``` That failure is the point of the check: it is how a change in the way diff --git a/tools/effect_probes/make_probes.py b/tools/effect_probes/make_probes.py index f8eddb10..214f8ab0 100644 --- a/tools/effect_probes/make_probes.py +++ b/tools/effect_probes/make_probes.py @@ -757,10 +757,17 @@ def _audiodsp_pin(): def _audiodsp_installed(): try: - from importlib.metadata import version - return version("omnipython-audiodsp") - except Exception: + from importlib.metadata import PackageNotFoundError, version + except ImportError: return "not found" + # audiodsp was published as pydevices-audiodsp until it was renamed + # omnipython-audiodsp; a pin may name either side of the rename. + for dist in ("omnipython-audiodsp", "pydevices-audiodsp"): + try: + return version(dist) + except PackageNotFoundError: + pass + return "not found" def _instrument_advice(name): @@ -769,8 +776,7 @@ def _instrument_advice(name): " probes.json records them at the audiodsp release AUDIODSP_PIN" " names: install audiodsp at %s (this interpreter has %s), for" " example" - ' pip install "omnipython-audiodsp @' - ' git+https://github.com/PyDevices/audiodsp@%s".' + ' pip install "git+https://github.com/PyDevices/audiodsp@%s".' % (pin, _audiodsp_installed(), pin)) diff --git a/tools/wheel_gate.py b/tools/wheel_gate.py index b28bc494..26612979 100644 --- a/tools/wheel_gate.py +++ b/tools/wheel_gate.py @@ -145,7 +145,7 @@ def main(): help="pip requirement for audiodsp (default: the AUDIODSP_PIN commit)") args = parser.parse_args() audiodsp = args.audiodsp or ( - "omnipython-audiodsp @ git+https://github.com/PyDevices/audiodsp@" + "git+https://github.com/PyDevices/audiodsp@" + audiodsp_pin()) failures = []