Skip to content

[codex] Drive changelog releases from towncrier#3017

Merged
adamtheturtle merged 1 commit into
mainfrom
codex/towncrier-changelog
May 20, 2026
Merged

[codex] Drive changelog releases from towncrier#3017
adamtheturtle merged 1 commit into
mainfrom
codex/towncrier-changelog

Conversation

@adamtheturtle
Copy link
Copy Markdown
Member

@adamtheturtle adamtheturtle commented May 20, 2026

Summary

This switches release changelog handling to the same towncrier-based flow used by literalizer:

  • replace the manual Next changelog section update with towncrier build
  • generate GitHub release notes from the same news fragments
  • add the towncrier config, template, and newsfragments/ directory
  • render unreleased fragments in docs where the project has Sphinx docs
  • migrate any existing Next entries into initial news fragments

Validation

  • uv run --extra=release towncrier build --draft --version 2099.01.01
  • uvx --from actionlint-py actionlint .github/workflows/release.yml
  • uv run --extra=dev pyproject-fmt --check --no-print-diff pyproject.toml where the repo has a dev extra
  • repo pre-commit / pre-push hooks run by git commit and git push

Note

Medium Risk
Updates the release pipeline to build both CHANGELOG.rst and GitHub release bodies from towncrier fragments, which could affect tagging/release automation if the workflow or towncrier config is mis-specified. Also changes doc builds to render unreleased notes, adding new dependencies and potential CI/doc gate failures.

Overview
Switches release automation from a manually-edited Next section to towncrier-driven release notes. The GitHub Actions release workflow now runs towncrier build to (1) emit curated GitHub release notes (release-notes.md) and (2) update CHANGELOG.rst, committing both the changelog update and consumed newsfragments/.

Adds towncrier support across the repo: a newsfragments/ directory, a custom docs/towncrier_template.rst.jinja, and [tool.towncrier] config in pyproject.toml (plus new towncrier/sphinxcontrib-towncrier dev deps). Docs now include an Unreleased changes page (docs/source/unreleased.rst) rendered from draft fragments during Sphinx builds, and CHANGELOG.rst is anchored with .. towncrier release notes start for insertion.

Reviewed by Cursor Bugbot for commit a573f07. Bugbot is set up for automated code reviews on this repo. Configure here.

@adamtheturtle adamtheturtle marked this pull request as ready for review May 20, 2026 11:30
@adamtheturtle adamtheturtle merged commit cb2775c into main May 20, 2026
15 checks passed
@adamtheturtle adamtheturtle deleted the codex/towncrier-changelog branch May 20, 2026 11:30
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a573f07. Configure here.

exit 1
fi
RELEASE: ${{ steps.calver.outputs.release }}
run: uv run --extra=release towncrier build --yes --version "$RELEASE"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Towncrier missing from release extra

High Severity

The release workflow runs towncrier via uv run --extra=release, but towncrier is only declared under optional-dependencies.dev, not optional-dependencies.release. The release job environment therefore will not install towncrier, so changelog and release-notes steps should fail before tagging or publishing.

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a573f07. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant