Skip to content

Conversation

@lcawl
Copy link
Contributor

@lcawl lcawl commented Jan 7, 2026

This PR augments #2341

Summary

  • Added support for rendering all default changelog types in the docs-builder changelog render command.
  • Updated the changelog rendering logic to omit the "For more information, check" clause when there's no PR or issue value in the changelog entry.
  • Updated the docs-builder changelog render command to group breaking changes by subtype when --subsections is used and the entry has a subtype.

Examples

  1. Check out the PR and generate the binaries per README.md:
    ./build.sh clean
    ./build.sh publishbinaries
    cd .artifacts/publish/docs-builder/release
  2. Create some changelogs with various types and areas, for example:
     ./docs-builder changelog add --pr 108759 --repo elasticsearch --owner elastic \
       --products "elasticsearch" --type bug-fix --areas "autoscaling,Infra/REST API" \
       --output test-1/   --feature-id test-feature
    
    ./docs-builder changelog add  \
      --pr https://github.com/elastic/elasticsearch/pull/134365 \
      --description "There is no need to time out requests sent by the `PeerFinder` during discovery and cluster formation, and this timeout may sometimes cause spurious failures. With this change the `PeerFinder` requests will wait indefinitely for responses." \
      --impact "The `discovery.request_peers_timeout` setting no longer has any effect." \
      --action "Discontinue use of the `discovery.request_peers_timeout` setting." \
      --products "elasticsearch" \
      --type deprecation --areas "Cluster Coordination" --output test-1/
    
     ./docs-builder changelog add \
       --title "Don't enable norms for fields of type text when the index mode is LogsDB or TSDB" \
       --description "This changes the default behavior for norms on `text` fields in logsdb and tsdb indices. Prior to this change, norms were enabled by default, with the option to disable them via manual configurations. After this change, norms will be disabled by default. Note, because we do not support enabling norms from a disabled state, users will not be able to enable norms on `text` fields in logsdb and tsdb indices." \
       --impact "Text fields will no longer be normalized by default in LogsDB and TSDB indices." \
       --pr 131317 --repo elasticsearch --owner elastic \
       --products "elasticsearch" --type breaking-change --areas Mapping --output test-1/
    
     ./docs-builder changelog add --title 'Return 400 on invalid processors in Simulate API' \
       --description "In earlier versions of Elasticsearch, the Simulate API would return a 500 error when encountering invalid processors. Now, it returns a 400 Bad Request error instead." \
       --impact "Callers should expect a 400 Bad Request response when the Simulate API encounters invalid processors. This change improves error handling and provides clearer feedback on request issues." \
      --issues 120731 --pr 130325 --repo elasticsearch --owner elastic \
      --areas "Ingest Node" --products "elasticsearch" \
      --type breaking-change --subtype api --output test-1/
    
    ./docs-builder changelog add --title 'Awesome new docs were added' \
      --products "elasticsearch" --type docs --areas "search" --output test-1/ \
      --feature-id awesome
      
    ./docs-builder changelog add --title 'The bbq_disk index format was introduced in 9.2.0 without appropriate license enforcement.' \
      --products "elasticsearch 9.2.0" --type known-issue --output test-1/ \
      --description 'The bbq_disk index format, licensed under the [Enterprise subscription tier](https://www.elastic.co/subscriptions) was introduced in 9.2.0 without appropriate license enforcement.' \
      --impact 'This allowed users to create and use bbq_disk indices without an Enterprise license.' \
      --action 'This will be addressed in version 9.3.0. Upon upgrading to 9.3+ indices created on 9.2 will still be available for updates and queries, but new indices created on 9.3+ will require an Enterprise license.'
  3. Create changelog bundles:
    ./docs-builder changelog bundle --all --directory ./test-1 \
      --output-products "elasticsearch 1.2.3" \
      --output ./bundles/changelog-bundle-es.yml \
      --resolve
  4. Render the bundle:
    ./docs-builder changelog render  \
      --input "./bundles/changelog-bundle-es.yml,,elasticsearch" \
      --output ./out-es
  5. Render it with subsections:
    ./docs-builder changelog render  \
      --input "./bundles/changelog-bundle-es.yml,,elasticsearch" \
      --output ./out-es-sections \
      --subsections
  6. Use file inclusion to add these new files as snippets in the product release notes.

The new known issues page looks like this:

image

With --subsections, groupings look like this:

  • Breaking change subtypes:
    image
  • Areas:
    image

Changes Made

  • Added missing type constants to ChangelogEntryTypes:
    • Docs ("docs")
    • Regression ("regression")
    • Other ("other")
  • Created RenderKnownIssuesMarkdown method:
    • Similar to RenderBreakingChangesMarkdown and RenderDeprecationsMarkdown
    • Generates a separate known-issues.md file
    • Supports optional "impact" and "action" content
    • Uses dropdown format with proper formatting
  • Updated RenderIndexMarkdown method:
    • Added sections for docsregression, and other types
    • Fixed the known-issues link to use the correct format: [Known issues](/release-notes/known-issues.md#{repo}-{titleSlug}-known-issues) (matching breaking changes and deprecations)
    • Updated the condition to check for all entry types
    • Added call to RenderKnownIssuesMarkdown in the RenderChangelogs method
  • Updated RenderBreakingChangesMarkdown
    • Only outputs "For more information, check" when there's a PR or at least one issue
    • When --subsections is true, groups breaking changes by subtype instead of area
      • Entries without a subtype are grouped with an empty key (no subsection header)
    • When --subsections is false, keeps the existing behavior (group by area)
  • Updated RenderDeprecationsMarkdown — Same conditional logic
  • Updated RenderKnownIssuesMarkdown — Same conditional logic
  • Modified RenderBreakingChangesMarkdown method:
  • Added FormatSubtypeHeader method:
    • Formats subtype headers similar to area headers (capitalizes first letter, replaces hyphens with spaces)
    • Handles empty/null subtypes
  • Updated command help text:
    • Updated the --subsections parameter description in ChangelogCommand.cs to mention that breaking changes with subtypes are grouped by subtype
  • Updated documentation:
    • Updated docs/contribute/changelog.md to document that breaking changes with subtypes are grouped by subtype when --subsections is used

Behaviour

  • known-issue entries generate a separate known-issues.md page with optional "impact" and "action" content (like breaking changes and deprecations)
  • docsregression, and other entries are rendered as sections within index.md
  • All default changelog types from ChangelogConfiguration.cs are now supported:
    • featureenhancementbug-fixsecurity → sections in index.md
    • docsregressionother → sections in index.md
    • known-issue → separate known-issues.md page
    • breaking-change → separate breaking-changes.md page (already existed)
    • deprecation → separate deprecations.md page (already existed)

When --subsections is used:

  • Breaking changes with a subtype → grouped by subtype with subsection headers
  • Breaking changes without a subtype → grouped together without a subsection header
  • Other changelog types → continue to group by area (existing behavior)

When --subsections is not used, all entries render without subsections (existing behavior).

The build completed successfully with no errors.
The implementation:

  • follows the existing patterns and maintains consistency with how breaking changes and deprecations are handled.
  • skips the "For more information" text when there are no PRs or issues to reference.
  • handles entries without subtypes and maintains backward compatibility.

Generative AI disclosure

  1. Did you use a generative AI (GenAI) tool to assist in creating this contribution?
  • Yes
  • No
  1. If you answered "Yes" to the previous question, please specify the tool(s) and model(s) used (e.g., Google Gemini, OpenAI ChatGPT-4, etc.).

Tool(s) and model(s) used: composer-1 agent

@lcawl lcawl marked this pull request as ready for review January 7, 2026 05:10
@lcawl lcawl requested review from a team as code owners January 7, 2026 05:10
@lcawl lcawl requested a review from Mpdreamz January 7, 2026 05:10
@lcawl lcawl merged commit 0b6310e into changelog-manifest Jan 7, 2026
25 of 26 checks passed
@lcawl lcawl deleted the changelog-manifest-types branch January 7, 2026 05:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants