feat: channel-compat reusable workflow — run a repo's tests on the OVOS distro release channels - #72
Merged
Merged
Conversation
Run a repo's tests against the package versions an OVOS distro release channel pins, so a change that is green on dev but breaks the fleet is caught. The constraints file is fetched live and uploaded as an artifact; the repo under test is stripped out of it so the PR checkout wins over the channel's published copy of itself.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
📝 WalkthroughWalkthroughChangesChannel compatibility testing
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant Caller
participant channel-compat.yml
participant OVOSChannel
participant PythonEnvironment
participant Pytest
Caller->>channel-compat.yml: Invoke workflow with channel inputs
channel-compat.yml->>OVOSChannel: Fetch live constraints
OVOSChannel-->>channel-compat.yml: Return constraints and channel name
channel-compat.yml->>PythonEnvironment: Remove repository constraint and install packages
PythonEnvironment-->>channel-compat.yml: Return installed stack
channel-compat.yml->>Pytest: Run tests with OVOS_CHANNEL
Pytest-->>Caller: Return test result
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This was referenced Aug 1, 2026
JarbasAl
marked this pull request as ready for review
August 1, 2026 16:14
This was referenced Aug 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds
channel-compat.yml, aworkflow_callreusable workflow that runs a repo's test suite against the package versions one OVOS distro release channel pins.Why
Every gate we have looks at the dev edge. None of them looks at what the fleet runs.
The distro publishes one constraints file per channel, and today they are a long way behind dev:
ovos-workshopovos-coreovos-bus-clientovos-padatious>=3.4.0,<3.5.0>=1.3.1,<1.4.0>=1.3.4,<1.4.0>=1.4.2,<1.5.0>=7.0.6,<8.0.0>=2.1.1,<3.0.0>=1.3.7,<2.0.0>=1.4.3,<2.0.0A change can be green on dev and still break every device on stable. Nothing catches that today.
This is one of three layers, and each is useless alone:
Together they qualify a breakage: which clause, which versions, how many devices.
The one rule
The channel wins for every package it names, except the repo under test. The PR is the thing being judged, so its own version comes from the checkout. pip has no "constrain everything except X", so the workflow reads the repo's distribution name (
pyproject.toml, falling back tosetup.py --name) and strips that line out of the fetched constraints file before installing.The constraints file is fetched live, never vendored, and uploaded as an artifact next to a
pip freeze. A run that goes red weeks later cannot be reproduced from the URL, because the URL will have moved on.Not the same as the existing check
build-tests.ymlalready has a step called the "channel compatibility check". That one reads ovos-releases metadata and asks whether the package's current version is listed in a channel file. This workflow installs and runs code. The docs note the distinction.Inputs
channel_url(required),channel_name,runner,test_path,python_version,system_deps,pre_install_pip,install_extras,pytest_args,soft_fail,timeout_minutes.pre_install_piprather thanpre_install, to match the identical input onbuild-tests.ymlandovoscope.yml— the inputs on this repo's workflows are read across files and a near-miss name is worse than a long one.One channel per call; the caller matrixes.
setuptools<81is installed unconditionally: channel-ageovos-plugin-managerstill importspkg_resources.Expect red at first
A channel is behind dev by construction, so a first run usually fails a pile of tests. That is the finding, not a broken workflow. Callers should start with
soft_fail: trueand turn it off once the baseline is understood.continue-on-erroris not an option: GitHub rejects it on a job that calls a reusable workflow, which is why the advisory mode is an input here.ovos-test-harness#16 is the fully worked version: checked-in per-channel known-gap files under
test/channel_gaps/, consumed through theOVOS_CHANNELenv var this workflow sets, that strict-xfail exactly the known failures. Known gaps stay visible and green, new breakage is red, and a gap the channel has since closed is red too, as the cue to delete the line. Seeded from real runs there: stable ends at154 passed, 209 xfailed, testing at181 passed, 110 xfailed.Also in this PR
README.mdworkflow table entry.docs/workflow-reference.md— full section with inputs, steps, and a caller example.test/test_workflow_inputs.pypasses on the new file (the two pre-existing failures on_selftest-uv.ymlandtts-intelligibility.ymlare untouched).Callers: ovos-core#838, ovos-workshop#504. Part of the compat train alongside ovos-bus-client#271.
Implemented by Claude (opus), orchestrated by Claude Fable.
🤖 Generated with Claude Code
Summary by CodeRabbit
New Features
Documentation