Skip to content

ci(clients): Group client changelog by Python and Rust client - #711

Merged
lcian merged 5 commits into
mainfrom
ci/client-changelog-headings
Oct 22, 2026
Merged

lcian merged 5 commits into
mainfrom
ci/client-changelog-headings

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

The client changelog will now have exactly two sections, Python Client and Rust Client, chosen by the PR title scope. PRs that touch the clients also get a changelog preview comment.

Requires craft 3.0.0 or newer, which includes getsentry/craft#919. Older versions add a stray #### Other subheading under a client section with 2+ entries.

What changes for you

PR titles decide the changelog. For a client change, scope the title:

  • feat(py-client): Add automatic resumable uploads is listed under Python Client
  • fix(rs-client): Drain discarded response bodies is listed under Rust Client

Craft drops the feat(...) prefix, so the entry reads "Add automatic resumable uploads by @you in #123".

Example output, generated from our real history since 0.2.5 with this config and the craft fix:

### Python Client

- Add automatic resumable uploads by @lcian in #667
- Honor zero retries by @lcian in #679
- Add private resumable upload API by @lcian in #665

### Rust Client

- Mark Error as non-exhaustive by @lcian in #706

Changelog preview. When a PR touches clients/**, a bot comments with how the PR will look in the changelog and what bump it implies. The comment updates when you edit the title, description or labels. It's informational only: it never fails or blocks the PR. PRs that don't touch clients/ get no comment.

Custom wording. If the title isn't a good user-facing description, add this to the PR description:

### Changelog Entry

Add `Client::foo` for doing X.

That text replaces the title in the changelog. Each top-level bullet becomes a separate entry, all under the section picked by the title's scope.

Leaving a PR out. Add the skip-changelog label, or put #skip-changelog anywhere in the PR description.

Things to be careful of

  • Use exactly py-client or rs-client. Older variants (python-client, rust-client, rust, clients, no scope) aren't matched. A PR that touches clients/ without a matching scope still goes into the changelog, under a trailing ### Other section. The preview shows this, so check it.
  • Split PRs that change both clients. Craft puts each PR in one section only, so a combined PR can't appear under both.
  • Changes only in objectstore-types don't get a preview and aren't in the changelog. Craft runs from clients/ and only collects commits that touch clients/. If a types-only change matters to users, also touch a client in the PR.

Changes

  • clients/.craft.yml: changelogPolicy: auto becomes changelog.policy: auto, which removes the deprecation warning every release logged. Also sets scopeGrouping: false.
  • clients/.github/release.yml (new): the Python Client / Rust Client categories. Each title is listed several times so that breaking, feat and other changes still produce major, minor and patch bumps.
  • .github/workflows/changelog-preview.yml (new): calls craft's reusable preview workflow, pinned to the v3 commit, with working-directory: clients and a path filter on clients/**. It doesn't pass repo secrets (secrets: inherit); the called workflow gets GITHUB_TOKEN automatically and needs nothing else.
  • AGENTS.md: short PR guidance covering the scopes, splitting PRs, and ### Changelog Entry.

Alternative considered: type sections with client subheadings

Craft can also keep the usual type sections and put a client subheading inside each:

### New Features ✨

#### Python Client

- ...

### Bug Fixes 🐛

#### Rust Client

- ...

That uses the default categories with scopeGrouping: true. I didn't use it, for two reasons:

  • The scope has to be the full name. Craft builds the subheading from the title scope by replacing hyphens with spaces and title-casing it, and the label can't be configured. So py-client would show up as "Py Client"; to get "Python Client", PR titles would need python-client / rust-client.
  • A single entry gets no subheading. Craft only adds a scope subheading when that scope has 2+ entries in a section. A lone entry is listed inline as (python-client) Foo, and sometimes under a #### Other. So the layout would change from release to release.

The nesting the other way round (Python Client → Features / Fixes) isn't possible without a craft change: craft always nests type category first, then scope.

via @lcian.

--

View Junior Session [Sentry]

@codecov

codecov Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 91.90%. Comparing base (60adc25) to head (1d907da).
⚠️ Report is 12 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #711      +/-   ##
==========================================
+ Coverage   91.81%   91.90%   +0.08%     
==========================================
  Files         116      117       +1     
  Lines       24065    24124      +59     
==========================================
+ Hits        22095    22170      +75     
+ Misses       1970     1954      -16     
Components Coverage Δ
Rust Backend 94.91% <ø> (+0.04%) ⬆️
Rust Client 82.86% <ø> (+0.48%) ⬆️
Python Client 93.73% <ø> (+0.22%) ⬆️

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread AGENTS.md Outdated
Comment thread AGENTS.md Outdated
@lcian
lcian marked this pull request as ready for review October 22, 2026 09:41
@lcian
lcian requested a review from a team as a code owner October 22, 2026 09:41
@lcian
lcian enabled auto-merge (squash) October 22, 2026 14:41
@lcian
lcian merged commit 586e76a into main Oct 22, 2026
25 checks passed
@lcian
lcian deleted the ci/client-changelog-headings branch October 22, 2026 14:50
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.

2 participants