You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/cli/changelog/bundle.md
+57Lines changed: 57 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -78,6 +78,13 @@ You must choose one method for determining what's in the bundle (`--all`, `--inp
78
78
: Optional: The directory that contains the changelog YAML files.
79
79
: When not specified, falls back to `bundle.directory` from the changelog configuration, then the current working directory. See [Output files](#output-files) for the full resolution order.
80
80
81
+
`--description <string?>`
82
+
: Optional: Bundle description text with placeholder support.
83
+
: Supports `{version}`, `{lifecycle}`, `{owner}`, and `{repo}` placeholders. Overrides `bundle.description` from config.
84
+
: When using `{version}` or `{lifecycle}` placeholders, predictable substitution values are required:
85
+
: - **Option-based mode**: Requires `--output-products` to be explicitly specified
86
+
: - **Profile-based mode**: Requires either a version argument OR `output_products` in the profile configuration
87
+
81
88
`--hide-features <string[]?>`
82
89
: Optional: A list of feature IDs (comma-separated), or a path to a newline-delimited file containing feature IDs.
By default all changelogs that match PRs in the GitHub release notes are included in the bundle.
355
362
To apply additional filtering by the changelog type, areas, or products, add `rules.bundle` [filters](#changelog-bundle-rules).
356
363
364
+
### Bundle with description
365
+
366
+
You can add a description to bundles using the `--description` option. For simple descriptions, use regular quotes:
367
+
368
+
```sh
369
+
docs-builder changelog bundle \
370
+
--all \
371
+
--description "This release includes new features and bug fixes."
372
+
```
373
+
374
+
For multiline descriptions with multiple paragraphs, lists, and links, use ANSI-C quoting (`$'...'`) with `\n` for line breaks:
375
+
376
+
```sh
377
+
docs-builder changelog bundle \
378
+
--all \
379
+
--description $'This release includes significant improvements:\n\n- Enhanced performance\n- Bug fixes and stability improvements\n\nFor security updates, go to [security announcements](https://example.com/docs).'
380
+
```
381
+
382
+
When using placeholders in option-based mode, you must explicitly specify `--output-products` for predictable substitution:
383
+
384
+
```sh
385
+
docs-builder changelog bundle \
386
+
--all \
387
+
--output-products "elasticsearch 9.1.0 ga" \
388
+
--description "Elasticsearch {version} includes performance improvements. Download: https://github.com/{owner}/{repo}/releases/tag/v{version}"
389
+
```
390
+
357
391
## Profile-based examples
358
392
359
393
When the changelog configuration file defines `bundle.profiles`, you can use those profiles with the `changelog bundle` command.
**Placeholder validation**: If your profile uses `{version}` or `{lifecycle}` placeholders in the description, you must ensure predictable substitution values:
481
+
482
+
```sh
483
+
# ✅ Good: Version provided for placeholder substitution
You can create profiles that are equivalent to the `--input-products` filter option, that is to say the bundle will contain only changelogs with matching `products`.
: Optional: Path to the changelog.yml configuration file. Defaults to `docs/changelog.yml`.
33
33
34
+
`--description <string?>`
35
+
: Optional: Bundle description text with placeholder support.
36
+
: Supports `{version}`, `{lifecycle}`, `{owner}`, and `{repo}` placeholders. Overrides `bundle.description` from config.
37
+
34
38
`--output <string?>`
35
39
: Optional: Output directory for the generated changelog files. Falls back to `bundle.directory` in `changelog.yml` when not specified. Defaults to `./changelogs`.
Download the release binaries: https://github.com/{owner}/{repo}/releases/tag/v{version}
754
766
hide_features:
755
767
- feature:experimental-api
756
768
serverless-release:
@@ -800,6 +812,63 @@ The `{version}` placeholder is substituted with the clean base version extracted
800
812
801
813
This differs from standard profiles, where `{lifecycle}` is inferred from the version string you type at the command line.
802
814
815
+
#### Bundle descriptions
816
+
817
+
You can add introductory text to bundles using the `description` field. This text appears at the top of rendered changelogs, after the release heading but before the entry sections.
818
+
819
+
**Configuration locations:**
820
+
821
+
- `bundle.description`: Default description for all profiles
822
+
- `bundle.profiles.<name>.description`: Profile-specific description (overrides the default)
823
+
824
+
**Placeholder support:**
825
+
826
+
Bundle descriptions support these placeholders:
827
+
828
+
- `{version}`: The resolved version string
829
+
- `{lifecycle}`: The resolved lifecycle (ga, beta, preview, etc.)
830
+
- `{owner}`: The GitHub repository owner
831
+
- `{repo}`: The GitHub repository name
832
+
833
+
**Important**: When using `{version}` or `{lifecycle}` placeholders, you must ensure predictable substitution values:
834
+
835
+
- **Option-based mode**: Requires `--output-products` when using placeholders
836
+
- **Profile-based mode**: Requires either a version argument (e.g., `bundle profile 9.2.0`) OR an `output_products` pattern in the profile configuration when using placeholders. If you invoke a profile with only a promotion report (e.g., `bundle profile ./report.html`), placeholders will fail unless `output_products` is configured.
837
+
838
+
**Multiline descriptions in YAML:**
839
+
840
+
For complex descriptions with multiple paragraphs, lists, and links, use YAML literal block scalars with the `|` (pipe) syntax:
841
+
842
+
```yaml
843
+
bundle:
844
+
description: |
845
+
This release includes significant improvements:
846
+
847
+
- Enhanced performance
848
+
- Bug fixes and stability improvements
849
+
- New features for better user experience
850
+
851
+
For security updates, go to [security announcements](https://example.com/docs).
852
+
853
+
Download the release binaries: https://github.com/{owner}/{repo}/releases/tag/v{version}
854
+
```
855
+
856
+
The `|` (pipe) preserves line breaks and is ideal for Markdown-formatted text. Avoid using `>` (greater than) for descriptions as it folds line breaks into spaces, making lists and paragraphs difficult to format correctly.
857
+
858
+
**Command line usage:**
859
+
860
+
For simple descriptions, use the `--description` option with regular quotes:
861
+
862
+
```sh
863
+
docs-builder changelog bundle --all --description "This release includes new features."
864
+
```
865
+
866
+
For multiline descriptions on the command line, use ANSI-C quoting (`$'...'`) with `\n` for line breaks:
`output_products` is optional. When omitted, the bundle products array is derived from the matched changelog files' own `products` fields — the same fallback used by all other profile types. Set `output_products` when you want a single clean product entry that reflects the release identity rather than the diverse metadata across individual changelog files, or to hardcode a lifecycle that cannot be inferred from the tag format:
Copy file name to clipboardExpand all lines: docs/syntax/changelog.md
+13-2Lines changed: 13 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -142,10 +142,14 @@ For full syntax, refer to the [rules for filtered bundles](/cli/changelog/bundle
142
142
When bundles contain a `hide-features` field, entries with matching `feature-id` values are automatically filtered out from the rendered output. This allows you to hide unreleased or experimental features without modifying the bundle at render time.
143
143
144
144
```yaml
145
-
# Example bundle with hide-features
145
+
# Example bundle with description and hide-features
146
146
products:
147
147
- product: elasticsearch
148
148
target: 9.3.0
149
+
description: |
150
+
This release includes new features and bug fixes.
151
+
152
+
For more information, see the [release notes](https://example.com/docs).
149
153
hide-features:
150
154
- feature:hidden-api
151
155
- feature:experimental
@@ -223,10 +227,15 @@ The version is extracted from the first product's `target` field in each bundle
223
227
224
228
## Rendered output
225
229
226
-
Each bundle renders as a `## {version}` section with subsections beneath:
230
+
Each bundle renders as a `## {version}` section with optional description and subsections beneath:
227
231
228
232
```markdown
229
233
## 0.100.0
234
+
235
+
This release includes new features and bug fixes.
236
+
237
+
Download the release binaries: https://github.com/elastic/elasticsearch/releases/tag/v0.100.0
238
+
230
239
### Features and enhancements
231
240
...
232
241
### Fixes
@@ -237,6 +246,8 @@ Each bundle renders as a `## {version}` section with subsections beneath:
237
246
...
238
247
```
239
248
249
+
Bundle descriptions are rendered when present in the bundle YAML file. The description appears immediately after the version heading but before any entry sections. Descriptions support Markdown formatting including links, lists, and multiple paragraphs.
0 commit comments