Skip to content

Commit 50539e7

Browse files
feat(release): generate structured changelogs for all release types (gptme#1550)
* feat(release): generate structured changelogs for all release types The scheduled-release CI workflow and Makefile release targets now use build_changelog.py to produce categorized changelogs (Features, Fixes, Contributors) instead of GitHub's flat auto-generated notes. Range selection: dev releases use since-last-tag (incremental), stable releases use since-last-stable (cumulative). Closes gptme#1532 * fix(release): use stable-only range for stable release changelogs in Makefile When generating changelogs for patch/minor releases, skip dev tags when finding the previous version. This ensures stable release changelogs are cumulative (e.g. v0.32.0 shows all changes since v0.31.0, not just since the last dev release like v0.31.1.dev20260227). Dev releases continue to use the immediately preceding tag (incremental behavior). Addresses Greptile review finding on PR gptme#1550. --------- Co-authored-by: TimeToBuildBob <TimeToBuildBob@users.noreply.github.com>
1 parent 3fe1da7 commit 50539e7

2 files changed

Lines changed: 46 additions & 6 deletions

File tree

.github/workflows/scheduled-release.yml

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ name: Scheduled Release
44
# - Runs twice weekly (Mon + Thu at noon UTC) to create dev pre-releases
55
# - Can be manually triggered for dev, patch, or minor releases
66
# - Dev releases use `.devYYYYMMDD` suffix and are marked as pre-releases
7-
# - Stable releases (patch/minor) get full changelogs since last stable
7+
# - All releases get structured changelogs via build_changelog.py
8+
# (dev: since last tag, stable: since last stable release)
89
#
910
# Scripts shared with `make release` / `make release-dev`:
1011
# - scripts/bump_version.sh — version bump, commit, tag
@@ -137,9 +138,39 @@ jobs:
137138
TYPE="${{ github.event.inputs.release_type || 'dev' }}"
138139
bash scripts/bump_version.sh --type "$TYPE"
139140
141+
- name: Generate changelog
142+
run: |
143+
# Download the shared changelog generator (same as `make dist/CHANGELOG.md`)
144+
wget -q -O scripts/build_changelog.py \
145+
https://raw.githubusercontent.com/ActivityWatch/activitywatch/master/scripts/build_changelog.py
146+
chmod +x scripts/build_changelog.py
147+
pip install -q requests
148+
149+
TAG="${{ steps.version.outputs.tag }}"
150+
PRERELEASE="${{ steps.version.outputs.prerelease }}"
151+
152+
# Use appropriate range: dev→since last tag, stable→since last stable
153+
if [ "$PRERELEASE" = "true" ]; then
154+
SINCE="${{ steps.version.outputs.last_tag }}"
155+
else
156+
SINCE="${{ steps.version.outputs.last_stable }}"
157+
fi
158+
159+
echo "Generating changelog: ${SINCE}...${TAG}"
160+
python3 scripts/build_changelog.py \
161+
--range "${SINCE}...${TAG}" \
162+
--project-title gptme \
163+
--org gptme \
164+
--repo gptme \
165+
--output /tmp/changelog.md \
166+
--add-version-header
167+
168+
echo "--- Generated changelog preview ---"
169+
head -50 /tmp/changelog.md
170+
140171
- name: Publish release
141172
env:
142173
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
143174
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
144175
run: |
145-
bash scripts/publish_release.sh --publish-pypi
176+
bash scripts/publish_release.sh --publish-pypi --notes-file /tmp/changelog.md

Makefile

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,18 @@ version-auto: ## Non-interactive version bump (TYPE=dev|patch|minor)
141141

142142
release-dev: ## Create a dev pre-release (.devYYYYMMDD) — same as CI scheduled release
143143
@./scripts/bump_version.sh --type dev
144-
@./scripts/publish_release.sh
144+
@make dist/CHANGELOG.md
145+
@./scripts/publish_release.sh --notes-file dist/CHANGELOG.md
145146

146147
release-patch: ## Create a stable patch release (x.y.Z+1)
147148
@./scripts/bump_version.sh --type patch
148-
@./scripts/publish_release.sh --publish-pypi
149+
@make dist/CHANGELOG.md
150+
@./scripts/publish_release.sh --publish-pypi --notes-file dist/CHANGELOG.md
149151

150152
release-minor: ## Create a stable minor release (x.Y+1.0)
151153
@./scripts/bump_version.sh --type minor
152-
@./scripts/publish_release.sh --publish-pypi
154+
@make dist/CHANGELOG.md
155+
@./scripts/publish_release.sh --publish-pypi --notes-file dist/CHANGELOG.md
153156

154157
./scripts/build_changelog.py:
155158
wget -O $@ https://raw.githubusercontent.com/ActivityWatch/activitywatch/master/scripts/build_changelog.py
@@ -171,8 +174,14 @@ dist/CHANGELOG.md: ./scripts/build_changelog.py
171174
docs/releases/%.md: ./scripts/build_changelog.py
172175
@mkdir -p docs/changelog
173176
# version is the % in the target
177+
# For stable releases (no .dev suffix), find the previous stable tag to get a cumulative changelog.
178+
# For dev releases, use the immediately preceding tag (incremental).
174179
VERSION=$* && \
175-
PREV_VERSION=$$(./scripts/get-last-version.sh $${VERSION}) && \
180+
if echo "$$VERSION" | grep -qE '\.dev[0-9]+'; then \
181+
PREV_VERSION=$$(./scripts/get-last-version.sh $${VERSION}); \
182+
else \
183+
PREV_VERSION=$$(git tag --sort=-version:refname | grep -v '\.dev' | grep -A 1 "$$VERSION" | tail -n 1); \
184+
fi && \
176185
./scripts/build_changelog.py --range $${PREV_VERSION}...$${VERSION} --project-title gptme --org gptme --repo gptme --output $@ --add-version-header
177186

178187
release: version dist/CHANGELOG.md ## Release new version (interactive)

0 commit comments

Comments
 (0)