This document is the maintainer runbook for publishing webdriver-manager releases.
- Use
patchfor bugfixes, metadata/docs cleanup, and non-breaking maintenance changes. - Use
minorfor new backward-compatible features. - Use
majorfor breaking changes.
- Maintainer access to:
- repository push/tag permissions;
- GitHub Releases;
- PyPI token (
__token__user) when publishing manually.
- Local environment:
- Python 3.12+ is recommended for release tooling;
.venvwithbuild,twine, andbump2version.
Install tooling:
./.venv/bin/pip install -U build twine bump2versionRelease version must stay aligned in:
pyproject.toml([project].version);webdriver_manager/__init__.py(__version__);setup.cfg([bumpversion].current_version).
setup.py is a compatibility shim. Packaging metadata is sourced from pyproject.toml.
- Ensure branch is up to date and tests are green.
- Update
CHANGELOG.mdfor the target version. - Bump version:
./.venv/bin/bump2version patch
# or: minor / major- Build and validate artifacts:
find . -maxdepth 1 -name '*.egg-info' -exec rm -rf {} +
rm -rf dist build
./.venv/bin/python -m build
./.venv/bin/twine check dist/*- Push commit and tag:
git push
git push --tags- Create and publish a GitHub Release for the new tag.
- Verify deploy workflow completed successfully:
.github/workflows/deploy.ymlruns onrelease.published;- artifacts are uploaded to PyPI.
Use this only when GitHub release creation is blocked.
- Run steps 1-5 from the standard flow.
- Publish directly to PyPI from local artifacts:
./.venv/bin/twine upload dist/*- When GitHub recovers, create the GitHub Release for the same tag and include notes.
Important:
- The deploy workflow may fail later on re-upload because the same version already exists on PyPI.
- That failure is expected in this fallback path; do not republish with the same version.
- PyPI page shows correct:
- version;
- summary;
Requires-Python;- supported Python classifiers.
- README badges resolve to
webdriver-managerpackage. - Install smoke test:
python -m venv /tmp/wdm-smoke
source /tmp/wdm-smoke/bin/activate
pip install webdriver-manager==X.Y.Z
python -c "import webdriver_manager; print(webdriver_manager.__version__)"- Keep
4.xmaintenance releases small and focused. - Do not yank a release unless it is functionally unsafe (install/runtime/security/API breakage).