make install # uv sync, all extras
make hooks # pre-push hook that runs make check-all
make check # lint, typecheck, test: the fast loop
make check-all # everything CI runsThe checks live in the Makefile. CI and the pre-push hook only call make targets,
so add new checks there rather than in either of them.
The version lives in exactly one place: __version__ in
src/configdirector/_version.py. Hatch reads the package version
from it, and the SDK reports it in the User-Agent and telemetry.
- In CHANGELOG.md, rename
## [Unreleased]to## [X.Y.Z] - YYYY-MM-DDand open a fresh, empty## [Unreleased]above it. - Bump
__version__to match and merge both tomain. - Run the Release workflow against
main. It is manual (workflow_dispatch) by design. It builds the distribution withmake dist-check, publishes it to TestPyPI, and then to PyPI, using trusted publishing rather than stored tokens. - Tag the released commit
vX.Y.Zby hand. The workflow does not tag.
PyPI never accepts the same version twice, so a rerun after a successful publish fails. Bump the version and go again instead.
The samples pin configdirector-server-sdk>=1.0 from PyPI, so they pick up a new release on their
own. Raise that floor only when a sample starts using an API the older release lacks, and only once
that release resolves on PyPI.