Skip to content

Commit 7427b38

Browse files
committed
Update release workflow to use existing CHANGELOG
- Extract release notes from CHANGELOG.md instead of generating - Use RELEASE_NOTES.md for GitHub release body - Fall back to git log if CHANGELOG entry not found - Preserve hand-crafted release notes
1 parent b9f8c84 commit 7427b38

File tree

1 file changed

+25
-23
lines changed

1 file changed

+25
-23
lines changed

.github/workflows/release.yml

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)