@@ -42,30 +42,44 @@ git log $(git describe --tags --abbrev=0)..HEAD --oneline
4242
4343#### 3. Update CHANGES.md
4444
45- Edit [ CHANGES.md] ( CHANGES.md ) to document the changes in this release:
45+ Edit [ CHANGES.md] ( CHANGES.md ) to finalize the release notes :
4646
47+ ** Before release:**
4748``` markdown
48- ## 4.2.0 (2025-10-20 )
49+ ## 4.1.1 (unreleased )
4950
50- ### Features
51+ - Modernize release method with hatchling. See RELEASE.md [jensens]
52+ - Modernize tox setup. [jensens]
53+ - Modernize Github workflows. [jensens]
54+ ```
55+
56+ ** After editing (change ` unreleased ` to release date and add new unreleased section):**
57+ ``` markdown
58+ ## Changes
5159
52- - Added new feature X
53- - Improved Y performance
60+ ## 4.1.2 (unreleased)
5461
55- ### Bug Fixes
62+ <!-- Add future changes here -->
5663
57- - Fixed issue with Z
5864
59- ### Internal
65+ ## 4.1.1 (2025-10-20)
6066
61- - Migrated to hatchling build backend
67+ - Modernize release method with hatchling. See RELEASE.md [jensens]
68+ - Modernize tox setup. [jensens]
69+ - Modernize Github workflows. [jensens]
6270```
6371
72+ ** Important notes:**
73+ - The version number in CHANGES.md is ** manual** (you edit it)
74+ - The package version comes ** automatically** from the git tag via hatch-vcs
75+ - Keep the format: ` ## X.Y.Z (YYYY-MM-DD) ` for released versions
76+ - Add ` [author] ` at the end of each change entry
77+
6478Commit the changes:
6579
6680``` bash
6781git add CHANGES.md
68- git commit -m " Prepare release 4.2.0 "
82+ git commit -m " Prepare release 4.1.1 "
6983git push origin main
7084```
7185
@@ -89,17 +103,26 @@ git push origin main
891032 . Verify tests pass (usually ~ 5-10 minutes)
901043 . Check PyPI once published: https://pypi.org/project/mxdev/
91105
92- #### 6. Post-release steps
106+ #### 6. Post-release steps (Optional)
93107
94- The workflow automatically runs ` make postrelease ` which handles:
95- - Creating post-release version bump commit
96- - Any other zest.releaser configured tasks
108+ After the release is published on PyPI, you may want to:
97109
98- Verify and pull the changes:
110+ 1 . ** Update CHANGES.md** to add a new unreleased section for future changes (if not done in step 3):
111+ ``` bash
112+ # Edit CHANGES.md to add:
113+ # ## X.Y.Z (unreleased)
114+ #
115+ # <!-- Add future changes here -->
116+
117+ git add CHANGES.md
118+ git commit -m " Start development of next version"
119+ git push origin main
120+ ```
99121
100- ``` bash
101- git pull origin main
102- ```
122+ 2 . ** Announce the release** (optional):
123+ - Post on relevant mailing lists or forums
124+ - Update documentation if needed
125+ - Notify users of significant changes
103126
104127## Version Numbering
105128
@@ -192,12 +215,12 @@ pip install --index-url https://test.pypi.org/simple/ mxdev
192215Use this checklist for each release:
193216
194217- [ ] All tests passing on main branch
195- - [ ] CHANGES.md updated with release notes
218+ - [ ] CHANGES.md updated with release date (changed from ` unreleased ` )
219+ - [ ] New unreleased section added to CHANGES.md (for next version)
196220- [ ] Changes committed and pushed to main
197221- [ ] GitHub release created with correct tag (format: ` vX.Y.Z ` )
198222- [ ] GitHub Actions workflow completed successfully
199223- [ ] Package visible on PyPI with correct version
200- - [ ] Post-release changes pulled from main
201224- [ ] Release announced (if applicable)
202225
203226## Troubleshooting
@@ -260,15 +283,52 @@ The `release` environment in GitHub requires:
260283- Approval from maintainers (optional, can be configured)
261284- Runs only on release events
262285
263- ### Makefile Integration
286+ ## Changelog Management
287+
288+ mxdev uses a ** manual changelog** approach where version numbers and dates in CHANGES.md are updated by hand.
289+
290+ ### Format
291+
292+ The changelog follows this simple format:
264293
265- The release workflow uses ` make postrelease ` which calls zest.releaser.
294+ ``` markdown
295+ ## Changes
296+
297+ ## X.Y.Z (unreleased)
298+
299+ - Description of change [author]
266300
267- To customize behavior, edit the Makefile variables:
268- ``` makefile
269- ZEST_RELEASER_POSTRELEASE_OPTIONS =--no-input
301+
302+ ## X.Y.Z (YYYY-MM-DD)
303+
304+ - Description of change [author]
305+ - Another change [author]
270306```
271307
308+ ### Key Points
309+
310+ - ** Version in CHANGES.md** : Manual - you edit the version number and date
311+ - ** Package version** : Automatic - comes from git tag via hatch-vcs
312+ - ** During development** : Changes are added under ` (unreleased) `
313+ - ** Before release** : Change ` (unreleased) ` to the actual date
314+ - ** After release** : Add new ` (unreleased) ` section for next version
315+
316+ ### Why This Works
317+
318+ With hatch-vcs, the package version is determined by git tags at build time. This means:
319+ - You maintain a human-readable changelog in CHANGES.md
320+ - The build system automatically gets the correct version from tags
321+ - No need to keep version numbers in sync between files
322+
323+ ### Alternative Tools
324+
325+ For larger teams or to avoid merge conflicts, consider using:
326+ - ** Scriv** : Fragment-based changelog management
327+ - ** Towncrier** : Popular in the Python ecosystem
328+ - ** git-cliff** : Generate from commit messages
329+
330+ See the project's issue tracker or maintainers if you'd like to adopt automated changelog tools.
331+
272332## Alternative: Manual Release (Not Recommended)
273333
274334For emergency situations where GitHub Actions is unavailable:
0 commit comments