Follow this checklist for every release. Steps should be completed in order.
main (lint, typecheck, tests — Python 3.10–3.13)ruff check trishul_snmp tests scripts
ruff format trishul_snmp tests scripts --check
mypy trishul_snmp
pytest -q
pytest --cov=trishul_snmp --cov-report=term-missing:skip-covered --cov-fail-under=95 -q
version in pyproject.toml__version__ in trishul_snmp/__init__.pydocs/CHANGELOG.md following the Keep a Changelog format:
YYYY-MM-DD### Added / ### Changed / ### Fixed / ### Removed as applicable### Known limitations if deferred issues remain relevantdocs/architecture.md Last updated date if the architecture changeddocs/roadmap.md to mark shipped items as done and note newly deferred work if neededREADME.md if install instructions, public API examples, or docs links changedpip install -e ".[dev]"
ruff check trishul_snmp tests scripts
ruff format trishul_snmp tests scripts --check
mypy trishul_snmp
pytest --cov=trishul_snmp --cov-report=term-missing:skip-covered --cov-fail-under=95 -q
Helper:
python3 scripts/run_release_gate.py
This runs the local release gate end to end: lint, format check, mypy, pytest,
coverage, build, wheel smoke test, and temporary wheel-test venv cleanup.
Use --smoke-host 127.0.0.1 to add a live post-install tsnmp get smoke test
against a reachable local agent.
pip install hatch
hatch build
ls -lh dist/
python -m venv /tmp/tsnmp-release-test
/tmp/tsnmp-release-test/bin/pip install dist/trishul_snmp-x.y.z-py3-none-any.whl
/tmp/tsnmp-release-test/bin/tsnmp version
/tmp/tsnmp-release-test/bin/python -c "from trishul_snmp import V2cManager, load_bundle; print('import ok')"
python -c "
import zipfile, collections
z = zipfile.ZipFile('dist/trishul_snmp-x.y.z-py3-none-any.whl')
dupes = [n for n, c in collections.Counter(z.namelist()).items() if c > 1]
print('DUPLICATES:', dupes or 'none')
"
tsmi pairing:
python3 scripts/validate_ecosystem.py \
--tsmi-version 0.4.3 \
--mib-dir /var/lib/mibs/ietf \
--mib-dir /var/lib/mibs/iana \
--host 127.0.0.1 \
--keep-work-dir
This validates tsmi CLI output shapes, standalone module JSON loading, directory sidecar loading, live manager calls against a real agent, local trap/inform send/listen/decode, and local responder behavior.
/tmp/tsnmp-release-test/bin/tsnmp get --host 127.0.0.1 1.3.6.1.2.1.1.3.0
This is optional but useful for catching packaging or runtime issues that unit tests may miss.
git commit -m "chore: release vx.y.z"git tag vx.y.zgit push origin vx.y.zrelease GitHub Actions workflow completes successfully:
pip install trishul-snmp==x.y.z
tsnmp version
docs/archive/ if the release warrants them