Problem
Two release risks are not covered by the current CI:
- The release workflow accepts any
v* tag without checking that it matches the package version in interlock/version.py.
- The regular test suite runs from the source tree with all development dependencies and optional extras installed. An accidental import of an optional dependency from the core could therefore pass CI but make a plain
pip install interlock-cb unusable.
For example, importing a Redis integration from interlock/__init__.py would work in the development environment, where redis is installed, but fail for users who install the core package only.
Proposed change
Add two small, independent checks:
- a packaging smoke job in regular PR CI that builds the wheel, installs it without dependencies in a clean Python 3.11 environment, and imports the public package;
- a release guard that verifies the pushed tag is exactly
v{interlock.__version__} before publishing.
Acceptance criteria
- PR CI builds the wheel and installs it into a clean Python 3.11 environment without optional extras or development dependencies.
- The smoke test successfully imports
interlock and verifies interlock.__version__.
- The release workflow fails before the publish job when the tag and package version differ.
- Existing build-once/artifact reuse, trusted publishing, and least-privilege permissions remain unchanged.
- The distributed core remains dependency-free.
Non-goals
- Automating changelog policy.
- Adding a separate release checklist.
- Duplicating metadata validation already performed by the build and PyPI upload tooling.
Problem
Two release risks are not covered by the current CI:
v*tag without checking that it matches the package version ininterlock/version.py.pip install interlock-cbunusable.For example, importing a Redis integration from
interlock/__init__.pywould work in the development environment, whereredisis installed, but fail for users who install the core package only.Proposed change
Add two small, independent checks:
v{interlock.__version__}before publishing.Acceptance criteria
interlockand verifiesinterlock.__version__.Non-goals