Skip to content

Commit 59dd1d6

Browse files
docs: Update RELEASE_MEMO with current process
- Add branch structure section (master for 2.1, maint/2.0 for maintenance) - Add documentation release process section - Update conda-forge section with dependency notes - Remove @drewyangdev and @guzman-raphael from maintainers - Add links to datajoint-docs and docs.datajoint.com Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent f9ee1fc commit 59dd1d6

File tree

1 file changed

+83
-36
lines changed

1 file changed

+83
-36
lines changed

RELEASE_MEMO.md

Lines changed: 83 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# DataJoint Release Memo
22

3+
## Branch Structure
4+
5+
| Branch | Purpose | Version |
6+
|--------|---------|---------|
7+
| `master` | Main development | 2.1.x |
8+
| `maint/2.0` | Maintenance releases | 2.0.x |
9+
10+
For 2.0.x bugfixes:
11+
1. Commit to `maint/2.0`
12+
2. Tag and release as v2.0.x
13+
3. Cherry-pick to master if applicable
14+
15+
---
16+
317
## Writing Release Notes
418

519
Good release notes help users understand what changed and whether they need to take action.
@@ -37,7 +51,7 @@ Organize changes into these categories (in order):
3751
- Fixed incorrect NULL handling in aggregations (#234)
3852

3953
### Full Changelog
40-
https://github.com/datajoint/datajoint-python/compare/v0.14.3...v2.0.0
54+
https://github.com/datajoint/datajoint-python/compare/v2.0.0...v2.1.0
4155
```
4256

4357
### Guidelines
@@ -67,21 +81,23 @@ Ensure PRs have appropriate labels before merging.
6781

6882
### Steps
6983

70-
1. **Run "Manual Draft Release" workflow** on GitHub Actions
71-
2. **Edit the draft release**:
72-
- Change release name to `Release 2.0.0`
73-
- Change tag to `v2.0.0`
74-
3. **Publish the release**
75-
4. Automation will:
76-
- Update `version.py` to `2.0.0`
84+
1. **Add labels to merged PRs** for release-drafter categorization
85+
2. **Run "Manual Draft Release" workflow** on GitHub Actions
86+
3. **Edit the draft release**:
87+
- Set release name to `Release X.Y.Z`
88+
- Set tag to `vX.Y.Z`
89+
- Review and edit release notes
90+
4. **Publish the release**
91+
5. Automation will:
92+
- Update `version.py` to `X.Y.Z`
7793
- Build and publish to PyPI
7894
- Create PR to merge version update back to master
7995

8096
### Version Note
8197

82-
The release drafter computes version from the previous tag (`v0.14.6`), so it would generate `0.14.7` or `0.15.0`. You must **manually edit** the release name to include `2.0.0`.
98+
The release drafter computes version from the previous tag. You may need to **manually edit** the release name for major version changes.
8399

84-
The regex on line 42 of `post_draft_release_published.yaml` extracts version from the release name:
100+
The regex in `post_draft_release_published.yaml` extracts version from the release name:
85101
```bash
86102
VERSION=$(echo "${{ github.event.release.name }}" | grep -oP '\d+\.\d+\.\d+')
87103
```
@@ -99,7 +115,7 @@ Conda-forge has **automated bots** that detect new PyPI releases and create PRs
99115
1. **You publish to PyPI** (via the GitHub release workflow)
100116
2. **regro-cf-autotick-bot** detects the new version within ~24 hours
101117
3. **Bot creates a PR** to the feedstock with updated version and hash
102-
4. **Maintainers review and merge** (you're listed as a maintainer)
118+
4. **Maintainers review and merge**
103119
5. **Package builds automatically** for all platforms
104120

105121
### Manual Update (if bot doesn't trigger)
@@ -110,7 +126,7 @@ If the bot doesn't create a PR, manually update the feedstock:
110126

111127
2. **Edit `recipe/meta.yaml`**:
112128
```yaml
113-
{% set version = "2.0.0" %}
129+
{% set version = "2.1.0" %}
114130

115131
package:
116132
name: datajoint
@@ -126,55 +142,86 @@ If the bot doesn't create a PR, manually update the feedstock:
126142
127143
3. **Get the SHA256 hash**:
128144
```bash
129-
curl -sL https://pypi.org/pypi/datajoint/2.0.0/json | jq -r '.urls[] | select(.packagetype=="sdist") | .digests.sha256'
145+
curl -sL https://pypi.org/pypi/datajoint/2.1.0/json | jq -r '.urls[] | select(.packagetype=="sdist") | .digests.sha256'
130146
```
131147

132-
4. **Update license** (important for 2.0!):
148+
4. **Check dependencies** match `pyproject.toml`:
133149
```yaml
134-
about:
135-
license: Apache-2.0 # Changed from LGPL-2.1-only
136-
license_file: LICENSE
150+
requirements:
151+
host:
152+
- python {{ python_min }}
153+
- pip
154+
- setuptools >=62.0
155+
run:
156+
- python >={{ python_min }}
157+
- numpy
158+
- pandas
159+
- pymysql >=1.0
160+
- minio
161+
- packaging
162+
# ... etc
137163
```
138164

139165
5. **Submit PR** to the feedstock
140166

141-
### Action Items for 2.0 Release
167+
### Verification
142168

143-
1. **First**: Publish to PyPI via GitHub release (name it "Release 2.0.0")
144-
2. **Wait**: ~24 hours for conda-forge bot to detect
145-
3. **Check**: [datajoint-feedstock PRs](https://github.com/conda-forge/datajoint-feedstock/pulls) for auto-PR
146-
4. **Review**: Ensure license changed from LGPL to Apache-2.0
147-
5. **Merge**: As maintainer, approve and merge the PR
169+
After release:
170+
```bash
171+
conda search datajoint -c conda-forge
172+
```
148173

149-
### Timeline
174+
---
150175

151-
| Step | When |
152-
|------|------|
153-
| PyPI release | Day 0 |
154-
| Bot detects & creates PR | Day 0-1 |
155-
| Review & merge PR | Day 1-2 |
156-
| Conda-forge package available | Day 1-2 |
176+
## Documentation Release Process
157177

158-
### Verification
178+
Documentation is hosted at [docs.datajoint.com](https://docs.datajoint.com) and built from [datajoint-docs](https://github.com/datajoint/datajoint-docs).
159179

160-
After release:
180+
### How Documentation Builds Work
181+
182+
The documentation build:
183+
1. Checks out `datajoint-python` from the `master` branch
184+
2. Uses mkdocstrings to generate API docs from source docstrings
185+
3. Builds static site with MkDocs
186+
4. Deploys to `gh-pages` branch
187+
188+
### Triggering a Documentation Build
189+
190+
Documentation rebuilds automatically when:
191+
- Changes are pushed to `datajoint-docs` main branch
192+
193+
To manually trigger a rebuild (e.g., after updating docstrings in datajoint-python):
161194
```bash
162-
conda search datajoint -c conda-forge
163-
# Should show 2.0.0
195+
gh workflow run development.yml --repo datajoint/datajoint-docs
164196
```
165197

198+
Or use the "Run workflow" button in GitHub Actions.
199+
200+
### Updating Documentation
201+
202+
1. **For docstring changes**: Update docstrings in `datajoint-python`, then trigger a docs rebuild
203+
2. **For content changes**: Edit files in `datajoint-docs/src/`, push to main
204+
3. **Docstring style**: Use NumPy-style docstrings (see CONTRIBUTING.md)
205+
206+
### Verification
207+
208+
After build completes:
209+
- Check [docs.datajoint.com](https://docs.datajoint.com)
210+
- Verify API reference pages show updated content
211+
166212
---
167213

168214
## Maintainers
169215

170216
- @datajointbot
171217
- @dimitri-yatsenko
172-
- @drewyangdev
173-
- @guzman-raphael
174218
- @ttngu207
175219

176220
## Links
177221

222+
- [datajoint-python on GitHub](https://github.com/datajoint/datajoint-python)
223+
- [datajoint-docs on GitHub](https://github.com/datajoint/datajoint-docs)
178224
- [datajoint-feedstock on GitHub](https://github.com/conda-forge/datajoint-feedstock)
179225
- [datajoint on Anaconda.org](https://anaconda.org/conda-forge/datajoint)
180226
- [datajoint on PyPI](https://pypi.org/project/datajoint/)
227+
- [docs.datajoint.com](https://docs.datajoint.com)

0 commit comments

Comments
 (0)