Description
The version is declared twice — pyproject.toml (version = "0.1.0") and ragframework/__init__.py (__version__ = "0.1.0") — and will drift. There is also no release automation; the README says "Once published to PyPI, installation will simplify to pip install ragframework", so publishing is the goal.
Acceptance criteria
Files to touch
ragframework/__init__.py
.github/workflows/release.yml — new
RELEASING.md — new (or a section in CONTRIBUTING.md)
tests/test_version.py — new
Resources
Estimated effort: Medium (half day)
Description
The version is declared twice —
pyproject.toml(version = "0.1.0") andragframework/__init__.py(__version__ = "0.1.0") — and will drift. There is also no release automation; the README says "Once published to PyPI, installation will simplify topip install ragframework", so publishing is the goal.Acceptance criteria
ragframework/__init__.pyderives__version__fromimportlib.metadata.version("ragframework")(with aPackageNotFoundErrorfallback of"0.0.0+unknown"for source checkouts that aren't installed);pyproject.tomlremains the single source of truthragframework.__version__matches the installed metadata.github/workflows/release.ymltriggered onv*tags: builds sdist + wheel withpython -m build, runstwine check, publishes with PyPI Trusted Publishing (pypa/gh-action-pypi-publish,permissions: id-token: write, no long-lived secrets), and creates a GitHub Release with notes extracted from the matchingCHANGELOG.mdsectionCONTRIBUTING.md/ a shortRELEASING.md: bump version inpyproject.toml→ move[Unreleased]to a dated section → tag → pushFiles to touch
ragframework/__init__.py.github/workflows/release.yml— newRELEASING.md— new (or a section inCONTRIBUTING.md)tests/test_version.py— newResources
importlib.metadataEstimated effort: Medium (half day)