# Release Management This project uses [towncrier](https://towncrier.readthedocs.io/) for automated changelog management and releases. ## Release Workflow ### 1. During Development As you make changes, create changelog fragments: ```bash # Create a feature fragment echo "Added new task type to environment" > .changelog.d/123.feature.md # Create a bug fix fragment echo "Fixed STDOUT format parsing error" > .changelog.d/124.bugfix.md # Create a documentation fragment echo "Updated README with new API documentation" > .changelog.d/125.doc.md # Create a miscellaneous fragment (no details in changelog) echo "Code cleanup and refactoring" > .changelog.d/126.misc.md ``` **Fragment format:** - File name: `.changelog.d/..md` - ``: PR number, commit hash, or any unique identifier - ``: `feature`, `bugfix`, `doc`, or `misc` - Content: One-line description of the change ### 2. Before Release When ready to release, use the GitHub Actions workflow: 1. Go to: https://github.com/SupreethRao99/veriRL/actions 2. Click "Release" workflow 3. Click "Run workflow" 4. Enter version (e.g., `0.2.1`) 5. Workflow will: - Run `towncrier build --version 0.2.1` - Update CHANGELOG.md - Update pyproject.toml version - Commit changes - Create git tag `v0.2.1` - Push to GitHub - Create GitHub Release with changelog ### 3. Manual Release (if workflow fails) ```bash # Install towncrier uv pip install towncrier # Generate changelog and update version towncrier build --version 0.2.1 # Review changes git status # Commit git add CHANGELOG.md pyproject.toml .changelog.d/ git commit -m "Release v0.2.1" # Create tag git tag -a v0.2.1 -m "Release v0.2.1" # Push git push origin main v0.2.1 # Create release on GitHub (via web UI or gh CLI) gh release create v0.2.1 --title "v0.2.1" --notes-file CHANGELOG.md ``` ## Version Numbering Uses [Semantic Versioning](https://semver.org/): - **MAJOR** (0.X.0): Breaking changes, major architecture updates - **MINOR** (0.1.X): New features, new tasks, significant enhancements - **PATCH** (0.1.1): Bug fixes, documentation updates, minor improvements Examples: - Initial release: `0.1.0` - Add new task: `0.2.0` (minor bump) - Fix bug: `0.2.1` (patch bump) - Breaking change: `1.0.0` (major bump) ## Viewing Releases - **Changelog:** https://github.com/SupreethRao99/veriRL/blob/main/CHANGELOG.md - **Releases:** https://github.com/SupreethRao99/veriRL/releases - **Tags:** https://github.com/SupreethRao99/veriRL/tags ## Fragment Types Reference ### feature New functionality, new tasks, new endpoints, new capabilities. Example: `0001.feature.md` ``` Added AXI-Stream FIFO task with 34 test assertions ``` ### bugfix Bug fixes, corrections, error handling improvements. Example: `0002.bugfix.md` ``` Fixed STDOUT format to remove extraneous validation output ``` ### doc Documentation updates, README changes, new guides. Example: `0003.doc.md` ``` Updated deployment guide with GitHub Actions instructions ``` ### misc Internal changes, refactoring, code cleanup (not shown in changelog). Example: `0004.misc.md` ``` Refactor environment initialization for clarity ``` ## Changelog Format Generated CHANGELOG.md follows this structure: ```markdown ## [0.2.0] - 2026-04-04 ### Features - Feature 1 (PR #123) - Feature 2 (PR #124) ### Bug Fixes - Fix 1 (PR #125) - Fix 2 (PR #126) ### Documentation - Doc update 1 (PR #127) - Doc update 2 (PR #128) ``` ## Tips 1. **Create fragments frequently** — one per PR or significant change 2. **Use clear descriptions** — fragments become the changelog, so be descriptive 3. **Keep it user-facing** — describe what users/judges care about 4. **Test release locally** — run `towncrier build --draft` to preview 5. **One release per version** — don't release twice for the same version ## Troubleshooting ### Fragment not appearing in changelog - Check file name format: `.changelog.d/..md` - Verify `` is one of: feature, bugfix, doc, misc - Ensure file is in `.changelog.d/` directory ### Changelog build fails - Check pyproject.toml `[tool.towncrier]` configuration - Verify all fragments have valid type - Run with `--draft` flag to preview without modifying files ### Version not updating - Check pyproject.toml has `version = "0.1.0"` field - Towncrier auto-updates this during `build` command ## References - [Towncrier Docs](https://towncrier.readthedocs.io/) - [Semantic Versioning](https://semver.org/) - [Keep a Changelog](https://keepachangelog.com/)