Skip to content

Commit 485c8a5

Browse files
committed
feat: CHANGELOG.mdに自動生成された変更点を注入する機能を追加
1 parent 1f56a37 commit 485c8a5

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

.github/workflows/prepare-release.yml

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,37 @@ jobs:
9191
echo "value=$next" >> $GITHUB_OUTPUT
9292
echo "Next version: $next"
9393
94+
- name: Collect merged commit / PR titles since last release
95+
id: changes
96+
run: |
97+
set -e
98+
LAST_TAG=$(git describe --tags --abbrev=0 --match 'v[0-9]*' 2>/dev/null || echo '')
99+
echo "Last tag: $LAST_TAG"
100+
RANGE=""
101+
if [ -n "$LAST_TAG" ]; then RANGE="$LAST_TAG..HEAD"; fi
102+
RAW=$(git log --pretty=format:%s $RANGE)
103+
echo "Raw subjects:\n$RAW" | head -40
104+
FILTERED=$(echo "$RAW" | grep -v -E '^chore\(release\):' | grep -v -E '^Merge pull request' || true)
105+
if [ -z "$FILTERED" ]; then
106+
CHANGES='- (変更点なし / No notable changes)'
107+
else
108+
CHANGES=$(echo "$FILTERED" | awk 'function map(line){
109+
if(line ~ /^feat/){return "- ✨ " line}
110+
if(line ~ /^fix/){return "- 🐛 " line}
111+
if(line ~ /^perf/){return "- 🚀 " line}
112+
if(line ~ /^docs/){return "- 📝 " line}
113+
if(line ~ /^refactor/){return "- ♻️ " line}
114+
if(line ~ /^test/){return "- ✅ " line}
115+
if(line ~ /^build/){return "- 🧱 " line}
116+
if(line ~ /^chore/){return "- 🔧 " line}
117+
return "- " line }
118+
{ print map($0) }')
119+
fi
120+
echo "--- Generated list ---"
121+
echo "$CHANGES" | head -40
122+
esc=$(printf "%s" "$CHANGES" | sed 's/%/%25/g; s/\r/%0D/g; s/\n/%0A/g')
123+
echo "list=$esc" >> $GITHUB_OUTPUT
124+
94125
- name: Update pubspec.yaml version
95126
run: |
96127
next='${{ steps.next.outputs.value }}'
@@ -123,13 +154,20 @@ jobs:
123154
if ! grep -q "^## \[$next\]" CHANGELOG.md; then
124155
awk -v ver="$next" -v d="$date" 'BEGIN{added=0} {
125156
if(!added && /^## \[Unreleased\]/){
126-
print $0; print ""; print "## [" ver "] - " d; print ""; print "- (placeholder) Describe changes here"; print ""; added=1; next
157+
print $0; print ""; print "## [" ver "] - " d; print ""; print "__AUTO_CHANGELOG_PLACEHOLDER__"; print ""; added=1; next
127158
}
128159
print
129160
} END{ if(!added){ print "## [" ver "] - " d; print ""; print "- (placeholder) Describe changes here"; print "" } }' CHANGELOG.md > /tmp/_new && mv /tmp/_new CHANGELOG.md
130161
fi
131162
echo "Updated CHANGELOG.md"
132163
164+
- name: Inject generated changes into CHANGELOG
165+
run: |
166+
list='${{ steps.changes.outputs.list }}'
167+
if [ -z "$list" ]; then echo "No list to inject"; exit 0; fi
168+
perl -0777 -pe 's/__AUTO_CHANGELOG_PLACEHOLDER__/'"$list"'/g' CHANGELOG.md > /tmp/_chg && mv /tmp/_chg CHANGELOG.md
169+
echo "Injected generated changes into CHANGELOG.md"
170+
133171
- name: Show diff
134172
run: git --no-pager diff --name-only && git --no-pager diff | head -200
135173

0 commit comments

Comments
 (0)