feat(changelog): configurable sections, scope grouping, commit + compare links#586
Merged
Conversation
There was a problem hiding this comment.
Benchmark
Details
| Benchmark suite | Current: be4ef01 | Previous: 0b5fe57 | Ratio |
|---|---|---|---|
commit_parsing/100 |
16895 ns/iter (± 1132) |
17091 ns/iter (± 38) |
0.99 |
commit_parsing/1000 |
171630 ns/iter (± 792) |
174058 ns/iter (± 2250) |
0.99 |
commit_parsing/10000 |
1718674 ns/iter (± 6380) |
1809492 ns/iter (± 18830) |
0.95 |
This comment was automatically generated by workflow using github-action-benchmark.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #497
Summary
Adds an opt-in
[workspace.changelog]config that enriches changelog/release rendering. Default behaviour is byte-identical to today — with no config, output is the classic three sections (Breaking Changes / Features / Bug Fixes) with flat bullets of full commit subjects, no links, no scope grouping. Everything new is gated behind config.Config shape
sections:BTreeMap<String, SectionSetting>where a value is a label string ORfalse(hidden), via an untagged serde enum. Keys are commit-type prefixes (feat/fix/perf/docs/refactor/security). Omitted -> defaults to feat -> Features, fix -> Bug Fixes (Breaking Changes always shown).group_by_scope(aliasgroupByScope),include_commit_links(includeCommitLinks),include_compare_link(includeCompareLink) — all bool, default false.ChangelogConfigderivesDefault.Conventions followed (differ from the issue intentionally)
classify_commit/determine_bump) is untouched. Order: Breaking, Features, Bug Fixes, Performance, Security, then other configured.securitytakes precedence overfixforfix(security):.- **api:** add events endpoint), sorted by scope with scopeless entries first — NOT### apisubheadings.([<hash>](<forge>/commit/<hash>))and compare footer[<ver>]: <forge>/compare/<last>...<new>only when the forge is resolvable; forge-unknown silently omits them (no error).BREAKING CHANGE:footer body when richer mode is active (subject-only under default).Tests
default_render_is_byte_identical_to_classicproves the no-config path equals the classic renderer. Added coverage for perf/security/docs/feat! sections, security precedence, inline scope grouping, commit links (present + forge-unknown omitted), compare link (present + no-last-tag omitted), custom labels, breaking-footer body, plus config parsing (TOML + camelCase, untaggedfalse). All pre-existingsrc/changelog.rstests pass unchanged.Schema
Updated
schema/ferrflow.jsonwithworkspace.changelog. The FerrFlow-Cloud mirror (public/schema/ferrflow.json) is not touched here — handled separately.