Skip to content

Commit fb7090f

Browse files
committed
document release process w/o zest.releaser
1 parent 233d76e commit fb7090f

File tree

1 file changed

+85
-25
lines changed

1 file changed

+85
-25
lines changed

RELEASE.md

Lines changed: 85 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
6478
Commit the changes:
6579

6680
```bash
6781
git add CHANGES.md
68-
git commit -m "Prepare release 4.2.0"
82+
git commit -m "Prepare release 4.1.1"
6983
git push origin main
7084
```
7185

@@ -89,17 +103,26 @@ git push origin main
89103
2. Verify tests pass (usually ~5-10 minutes)
90104
3. 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
192215
Use 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

274334
For emergency situations where GitHub Actions is unavailable:

0 commit comments

Comments
 (0)