Follow this checklist for every release. Steps must be completed in order.
main (lint, typecheck, tests — Python 3.10–3.13)ruff check trishul_smi tests
ruff format trishul_smi tests --check
mypy trishul_smi
pytest
pytest --cov=trishul_smi --cov-report=term-missing
version in pyproject.tomldocs/CHANGELOG.md following the Keep a Changelog format:
YYYY-MM-DD### Added / ### Changed / ### Fixed / ### Removed as applicable### Known Limitations if any deferred issues remain[x.y.z]: https://github.com/tosumitdhaka/trishul-smi/releases/tag/vx.y.zdocs/architecture.md Last updated date if the architecture changeddocs/roadmap.md to mark shipped items as donepip install -e ".[dev]"
ruff check trishul_smi tests
ruff format trishul_smi tests --check
mypy trishul_smi
pytest --cov=trishul_smi
python -m venv /tmp/trishul-release-test
/tmp/trishul-release-test/bin/pip install dist/trishul_smi-x.y.z-py3-none-any.whl
/tmp/trishul-release-test/bin/trishul-smi version
/tmp/trishul-release-test/bin/trishul-smi compile IF-MIB IP-MIB -f json -f pysnmp --online --verbose
Both MIBs must show ✅. This catches grammar gaps that unit tests can miss because test fixtures are hand-written and may not exercise real-world MIB syntax.
0.1.0 PyPI rejection):
python -c "
import zipfile, collections
z = zipfile.ZipFile('dist/trishul_smi-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')
"
~/test/mibs/ (or any local MIB corpus) is available, compile all of them:
trishul-smi compile $(ls ~/test/mibs/*.mib ~/test/mibs/*.my 2>/dev/null | xargs -n1 basename | sed 's/\..*//' | sort -u | tr '\n' ' ') \
--mib-dir ~/test/mibs -f json -f pysnmp --verbose
Every MIB in the corpus must show ✅ before tagging.
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-smi==x.y.z