@@ -89,37 +89,39 @@ jobs:
8989 echo "gemfile=${GEMFILE}" >> "$GITHUB_OUTPUT"
9090 ls -l "$GEMFILE"
9191
92- - name : Generate CHANGELOG for this release
92+ - name : Extract release notes from CHANGELOG
9393 id : changelog
9494 shell : bash
9595 run : |
9696 set -euo pipefail
9797 TAG="${GITHUB_REF_NAME}"
98+ VERSION="${TAG#v}"
99+
100+ # Extract release notes for this version from CHANGELOG.md
101+ awk "/^## \[${VERSION}\]/{flag=1; next} /^## \[/{flag=0} flag" CHANGELOG.md > RELEASE_NOTES.md
102+
103+ # If extraction failed or empty, generate from git log
104+ if [[ ! -s RELEASE_NOTES.md ]]; then
105+ echo "No CHANGELOG entry found for ${VERSION}, generating from git log..."
106+ PREV_TAG=$(git tag --sort=-v:refname | sed -n '2p' || true)
107+ if [[ -z "$PREV_TAG" ]]; then
108+ FIRST_COMMIT=$(git rev-list --max-parents=0 HEAD)
109+ RANGE="$FIRST_COMMIT..$TAG"
110+ else
111+ RANGE="$PREV_TAG..$TAG"
112+ fi
98113
99- # Find previous tag (semantic aware); fallback to first commit
100- PREV_TAG=$(git tag --sort=-v:refname | sed -n '2p' || true)
101- if [[ -z "$PREV_TAG" ]]; then
102- FIRST_COMMIT=$(git rev-list --max-parents=0 HEAD)
103- RANGE="$FIRST_COMMIT..$TAG"
104- else
105- RANGE="$PREV_TAG..$TAG"
114+ {
115+ echo "## Changes"
116+ git log --no-merges --format='- %s (%h)' "$RANGE" || echo "- Initial release"
117+ } > RELEASE_NOTES.md
106118 fi
107119
108- DATE=$(date -u +'%Y-%m-%d')
109- {
110- echo "## $TAG — $DATE"
111- echo
112- echo "### Changes"
113- # Exclude merge commits, show subject, short sha, author
114- if ! git log --no-merges --format='- %s (%h) — %an' "$RANGE"; then
115- echo "- Initial release"
116- fi
117- echo
118- } > CHANGELOG.md
120+ echo "Release notes for ${TAG}:"
121+ cat RELEASE_NOTES.md
119122
123+ PREV_TAG=$(git tag --sort=-v:refname | sed -n '2p' || true)
120124 echo "prev_tag=${PREV_TAG}" >> "$GITHUB_OUTPUT"
121- echo "Generated CHANGELOG for range: $RANGE"
122- sed -n '1,200p' CHANGELOG.md
123125
124126 - name : Create/Update GitHub Release and upload .gem
125127 uses : softprops/action-gh-release@v2
@@ -128,10 +130,10 @@ jobs:
128130 name : " JetstreamBridge ${{ github.ref_name }}"
129131 files : |
130132 ${{ steps.build.outputs.gemfile }}
131- CHANGELOG .md
133+ RELEASE_NOTES .md
132134 draft : false
133135 generate_release_notes : false
134- body_path : CHANGELOG .md
136+ body_path : RELEASE_NOTES .md
135137 prerelease : ${{ contains(steps.ver.outputs.version, '-') }}
136138
137139 - name : Configure RubyGems credentials with OIDC
0 commit comments