ci: Update release workflow to include changelog and publish docs#2425
ci: Update release workflow to include changelog and publish docs#2425chtruong814 merged 6 commits intomainfrom
Conversation
Signed-off-by: Charlie Truong <chtruong@nvidia.com>
📝 WalkthroughWalkthroughIntroduces a new changelog configuration file for release automation, updates the release workflow to include changelog generation and documentation publishing options, and removes the existing CHANGELOG.md. The release workflow template is bumped to v0.73.0 to support the new configuration-driven changelog generation process. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (3)
.github/workflows/config/changelog-config.json (3)
6-6:sort: "ASC"lists oldest PRs first — consider"DESC"Ascending sort means the oldest merged PRs appear at the top of the changelog. The typical convention for release notes is newest-first (
"DESC").🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/config/changelog-config.json at line 6, Change the changelog ordering by updating the "sort" property in changelog-config.json from "ASC" to "DESC" so the generated changelog lists newest PRs first; locate the "sort" key in the file and set its value to "DESC" (ensure quotes remain consistent) to follow newest-first convention.
2-7: All auto-generated entries will be hidden in the collapsed<details>blockWith
categories: [],${{CHANGELOG}}always expands to an empty string — every PR is uncategorized and goes to${{UNCATEGORIZED}}inside the<details>block. The main body of every GitHub release will be blank unless someone manually edits it.If the intent is for the auto-generated PR list to be visible in the release body, either:
- Add a catch-all category, or
- Swap
${{CHANGELOG}}and${{UNCATEGORIZED}}in the template♻️ Proposed template with a catch-all category
- "categories": [], + "categories": [ + { + "title": "## Changes", + "labels": [] + } + ],With this, all PRs fall into the "Changes" category and render under
${{CHANGELOG}}in the main body, while the<details>block for truly uncategorized items remains empty.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/config/changelog-config.json around lines 2 - 7, The template currently hides all generated entries because "categories" is an empty array so ${{CHANGELOG}} is always empty and everything goes into ${{UNCATEGORIZED}} inside the collapsed <details>; fix by either adding a catch-all category name to the "categories" array (e.g., a "Changes" category so PRs populate ${{CHANGELOG}}) or by swapping the placeholders in the "template" value so ${{UNCATEGORIZED}} is rendered in the collapsed <details> while ${{CHANGELOG}} appears in the main body; update the "categories" or "template" JSON fields accordingly to implement one of these two options.
10-10:empty_templateoutputs raw metadata instead of a human-readable fallbackWhen no changes exist between tags, the release notes body will render the literal values of
${{OWNER}},${{REPO}},${{FROM_TAG}}, and${{TO_TAG}}as four separate lines, which looks like debug output.♻️ Suggested fix
- "empty_template": "${{OWNER}}\n${{REPO}}\n${{FROM_TAG}}\n${{TO_TAG}}", + "empty_template": "No changes between ${{FROM_TAG}} and ${{TO_TAG}}.",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/config/changelog-config.json at line 10, The current empty_template definition outputs raw metadata lines (empty_template using ${ {OWNER} }, ${ {REPO} }, ${ {FROM_TAG} }, ${ {TO_TAG} }) which appears as debug output when there are no changes; update the empty_template to a human-friendly fallback sentence that combines those variables into readable prose (for example: a single-line message like "No changes in OWNER/REPO between FROM_TAG and TO_TAG") so release notes show a clear statement instead of raw metadata; edit the empty_template key accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/release.yaml:
- Around line 69-71: The workflow currently uses the
gh-release-use-changelog-builder input but the upstream template version (
_release_library.yml@v0.73.0 ) may not expose gh-release-changelog-config;
either verify that v0.73.0 includes the gh-release-changelog-config input before
merging, or explicitly set the changelog config input when calling the template
(pass gh-release-changelog-config:
.github/workflows/config/changelog-config.json alongside
gh-release-use-changelog-builder and publish-docs) so the changelog-builder uses
your intended config file rather than template defaults.
---
Nitpick comments:
In @.github/workflows/config/changelog-config.json:
- Line 6: Change the changelog ordering by updating the "sort" property in
changelog-config.json from "ASC" to "DESC" so the generated changelog lists
newest PRs first; locate the "sort" key in the file and set its value to "DESC"
(ensure quotes remain consistent) to follow newest-first convention.
- Around line 2-7: The template currently hides all generated entries because
"categories" is an empty array so ${{CHANGELOG}} is always empty and everything
goes into ${{UNCATEGORIZED}} inside the collapsed <details>; fix by either
adding a catch-all category name to the "categories" array (e.g., a "Changes"
category so PRs populate ${{CHANGELOG}}) or by swapping the placeholders in the
"template" value so ${{UNCATEGORIZED}} is rendered in the collapsed <details>
while ${{CHANGELOG}} appears in the main body; update the "categories" or
"template" JSON fields accordingly to implement one of these two options.
- Line 10: The current empty_template definition outputs raw metadata lines
(empty_template using ${ {OWNER} }, ${ {REPO} }, ${ {FROM_TAG} }, ${ {TO_TAG} })
which appears as debug output when there are no changes; update the
empty_template to a human-friendly fallback sentence that combines those
variables into readable prose (for example: a single-line message like "No
changes in OWNER/REPO between FROM_TAG and TO_TAG") so release notes show a
clear statement instead of raw metadata; edit the empty_template key
accordingly.
| gh-release-use-changelog-builder: ${{ inputs.generate-changelog }} | ||
| publish-docs: ${{ inputs.publish-docs }} | ||
| docs-target-path: nemo/megatron-bridge |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, let's look at the full release.yaml file to understand the context
cat -n .github/workflows/release.yamlRepository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 3394
🏁 Script executed:
# Search for references to the changelog config file
rg "changelog-config" --type yaml -A 3 -B 3Repository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 53
🏁 Script executed:
# Look for other uses of _release_library.yml in the repo to see the pattern
rg "_release_library" --type yaml -A 5 -B 5Repository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 53
🏁 Script executed:
# Check what inputs/outputs are expected from the template by looking at the job definition
rg "gh-release-changelog-builder" --type yaml -A 2 -B 2Repository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 53
🏁 Script executed:
# List files in .github/workflows/config to verify the config file exists
fd . .github/workflows/config 2>/dev/null || echo "Directory may not exist"Repository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 117
🏁 Script executed:
# Check the changelog config file content
cat -n .github/workflows/config/changelog-config.jsonRepository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 968
🏁 Script executed:
# Search for any documentation about the release process or template
fd "README\|CHANGELOG\|CONTRIBUTING" .github/ --type fRepository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 53
🏁 Script executed:
# Search for any comments or references to the template or changelog in workflow files
rg -i "changelog|release.*library" .github/workflows/ -A 2 -B 2Repository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 6531
🏁 Script executed:
# Check if there are any other workflow files that might show how to use this template
ls -la .github/workflows/ | grep -E "\.(yml|yaml)$"Repository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 1267
🏁 Script executed:
# Search for any environment variables or defaults related to changelog
rg "changelog" . --type json --type yaml --type md -iRepository: NVIDIA-NeMo/Megatron-Bridge
Length of output: 894
🌐 Web query:
NVIDIA-NeMo FW-CI-templates _release_library.yml v0.73.0 changelog configuration inputs
💡 Result:
As of Feb 18, 2026, the NVIDIA-NeMo/FW-CI-templates repo’s latest published tag is v0.72.0 (Feb 15, 2026); v0.73.0 is not tagged/released yet. [1]
In the current main branch version of .github/workflows/_release_library.yml, the changelog-related workflow_call inputs are: [2]
gh-release-use-changelog-builder(boolean, default:false) — userelease-changelog-builder-actionto dynamically build the changeloggh-release-changelog-config(string, default:.github/workflows/config/changelog-config.json) — path to the changelog-builder config filegh-release-from-tag(string, default:"") — starting tag for the changelog builder (empty = auto-detect)gh-release-changelog-mode(string, default:PR) — changelog builder “mode”
Note: These inputs are not present in v0.72.0’s _release_library.yml; they appear to be changes after v0.72.0 (likely intended for the next release, e.g., v0.73.0). [3]
Sources: [1] [2] [3]
🌐 Web query:
FW-CI-templates _release_library.yml gh-release-changelog-builder inputs documentation
💡 Result:
NVIDIA-NeMo/FW-CI-templates/.github/workflows/_release_library.yml (workflow_call) inputs
This reusable workflow does not use a gh-release-changelog-builder action; instead, when create-gh-release runs it builds the GitHub release body from CHANGELOG.md (and for RCs it uses a short “Prerelease … (DATE)” message). (raw.githubusercontent.com)
Defined workflow_call inputs (name → notes/default):
release-ref(string, required) → ref (SHA/branch) to release (raw.githubusercontent.com)python-package(string) → python package name (raw.githubusercontent.com)python-version(string, default 3.10) (raw.githubusercontent.com)library-name(string) → library display name (raw.githubusercontent.com)dry-run(boolean, required) → don’t publish wheel / GH release (raw.githubusercontent.com)version-bump-branch(string, required) → target branch for version bump (raw.githubusercontent.com)packaging(string, default setuptools) → “setuptools | hatch | uv” (raw.githubusercontent.com)create-gh-release(boolean, default true) (raw.githubusercontent.com)gh-release-tag-prefix(string, default "") (raw.githubusercontent.com)has-src-dir(boolean, default false) (raw.githubusercontent.com)skip-test-wheel(boolean, default false) (raw.githubusercontent.com)custom-container(string, default "") (raw.githubusercontent.com)runner(string, default ubuntu-latest) (raw.githubusercontent.com)no-build-isolation(boolean, default false) (raw.githubusercontent.com)app-id(string, required) → GitHub App ID (raw.githubusercontent.com)root-dir(string, default "./") (raw.githubusercontent.com)submodules(string, default '') → whether to checkout submodules (raw.githubusercontent.com)
“gh-release-changelog-builder” inputs documentation (likely mikepenz/release-changelog-builder-action)
If by “gh-release-changelog-builder” you mean Release Changelog Builder (mikepenz/release-changelog-builder-action), its key workflow with: inputs include:
token(required in some form: eitherwith.tokenorenv.GITHUB_TOKEN) (github.com)configurationJson(inline JSON config) (github.com)configuration(path toconfiguration.json) (github.com)outputFile(github.com)owner,repo(github.com)fromTag,toTag(github.com)path(github.com)- (and it also documents
includeOnlyPathsfor monorepo filtering) (github.com)
If you paste the snippet where you see gh-release-changelog-builder referenced, I can tell you exactly which action it is and map every supported input to that specific version.
Citations:
- 1: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 2: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 3: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 4: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 5: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 6: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 7: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 8: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 9: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 10: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 11: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 12: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 13: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 14: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 15: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 16: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 17: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 18: https://raw.githubusercontent.com/NVIDIA-NeMo/FW-CI-templates/main/.github/workflows/_release_library.yml
- 19: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
- 20: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
- 21: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
- 22: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
- 23: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
- 24: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
- 25: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
- 26: https://github.com/mikepenz/release-changelog-builder-action?utm_source=openai
Confirm gh-release-changelog-config input is available in v0.73.0 template, or explicitly pass the config path
The template _release_library.yml@v0.73.0 is not yet released (current latest is v0.72.0 from Feb 15, 2026). While the main branch includes a new input gh-release-changelog-config (with default value .github/workflows/config/changelog-config.json), it's unclear whether this will be available in the v0.73.0 release.
Since you're relying on the changelog builder feature via gh-release-use-changelog-builder, either:
- Verify v0.73.0 includes the changelog inputs before merging, or
- Explicitly pass the config path once v0.73.0 is released:
gh-release-use-changelog-builder: ${{ inputs.generate-changelog }} +gh-release-changelog-config: .github/workflows/config/changelog-config.json
Without explicit configuration or confirmed template support, the builder may not use .github/workflows/config/changelog-config.json and will fall back to defaults.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/release.yaml around lines 69 - 71, The workflow currently
uses the gh-release-use-changelog-builder input but the upstream template
version ( _release_library.yml@v0.73.0 ) may not expose
gh-release-changelog-config; either verify that v0.73.0 includes the
gh-release-changelog-config input before merging, or explicitly set the
changelog config input when calling the template (pass
gh-release-changelog-config: .github/workflows/config/changelog-config.json
alongside gh-release-use-changelog-builder and publish-docs) so the
changelog-builder uses your intended config file rather than template defaults.
What does this PR do ?
Update release workflow to include generated changelog and publish docs
Remove CHANGELOG.md
Changelog
GitHub Actions CI
See the CI sectionin the Contributing doc for how to trigger the CI. A Nvidia developer will need to approve and trigger the CI for external contributors.
Before your PR is "Ready for review"
Pre checks:
If you haven't finished some of the above items you can still open "Draft" PR.
Additional Information
Summary by CodeRabbit