ci(DCP-2422): automate CLI release process#322
Merged
script-this merged 6 commits intomainfrom Mar 2, 2026
Merged
Conversation
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
Add git-cliff config and create-release workflow that automates the release process into a two-step flow: trigger workflow dispatch to create a release PR with auto-generated changelog, then merge to publish the release with tag, GitHub Release, binaries, and Docker.
c960cdb to
1b9908f
Compare
The inline heredoc inside gh pr create inherited YAML indentation, causing 10 leading spaces on every line of the PR body.
- Pin git-cliff-action to SHA for supply-chain security - Remove unused NOTES shell variable in changelog update step - Use awk string comparison instead of regex for version extraction - Tighten docs commit pattern from ^doc to ^docs?
- Remove dead shell variable NEW_VERSION in changelog update step - Guard CLIFF_NOTES.md read against missing file - Remove unused step IDs (manual, notes) and has_manual output - Warn on empty release notes in finalize-release job - Align cliff.toml docs pattern with commitlint (^docs)
Replace inline shell/Python in create-release.yml with a Go CLI tool at scripts/changelog/ that provides extract, merge, and update subcommands. Removes Python dependency from CI and makes changelog manipulation logic testable with go test.
f1c053d to
922c489
Compare
- Hoist regexps to package-level vars to avoid recompilation - Switch flag sets to ContinueOnError so error handling is live - Guard against duplicate ## next headings (match first only) - Quote workflow step output interpolations for safety - Add path traversal prevention with base-directory containment - Exclude scripts/changelog/ from Snyk Code (internal CI tool with hardcoded paths, taint analysis false positives)
7a69a77 to
7129605
Compare
SeanAlexanderHarris
approved these changes
Feb 27, 2026
Contributor
SeanAlexanderHarris
left a comment
There was a problem hiding this comment.
praise: nice
question (non-blocking): how does it stand up against some conventional commits in the git history if there are enough to test with?
Contributor
Author
So if I'm understanding the question correctly:
Meaning existing history regardless of commit style shouldn't matter. |
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.
Summary
Automates the release process from a multi-step manual procedure to a two-step flow: trigger a workflow dispatch → review and merge the generated release PR.
Part 1 (conventional commits enforcement) was completed in #321. This PR adds the changelog generation and release workflow (Part 2):
cliff.tomlfor git-cliff changelog generation from conventional commitscreate-release.ymlworkflow with two jobs:create-release-pr: calculates version, generates changelog, opens release PRfinalize-release: on merge, creates tag + GitHub Release, triggers binary/Docker builds## nextsection toCHANGELOG.mdfor manual release notesDEVELOPMENT.mdandREADME.mdwith new release process docsscripts/changelog/)extract: replaces awk/sed for changelog section extractionmerge: replaces bash merge logic for combining manual + generated notesupdate: replaces Python script for updating CHANGELOG.md with new version entriesTest plan
make test,make lint, git-cliff local run, manualgo run ./scripts/changelogintegration tests all passpatchfrom Actions UIrelease/v0.0.60with generated changelogv0.0.60, GitHub Release, and downstream workflows trigger