|
91 | 91 | echo "value=$next" >> $GITHUB_OUTPUT
|
92 | 92 | echo "Next version: $next"
|
93 | 93 |
|
| 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 | +
|
94 | 125 | - name: Update pubspec.yaml version
|
95 | 126 | run: |
|
96 | 127 | next='${{ steps.next.outputs.value }}'
|
@@ -123,13 +154,20 @@ jobs:
|
123 | 154 | if ! grep -q "^## \[$next\]" CHANGELOG.md; then
|
124 | 155 | awk -v ver="$next" -v d="$date" 'BEGIN{added=0} {
|
125 | 156 | 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 |
127 | 158 | }
|
128 | 159 | print
|
129 | 160 | } END{ if(!added){ print "## [" ver "] - " d; print ""; print "- (placeholder) Describe changes here"; print "" } }' CHANGELOG.md > /tmp/_new && mv /tmp/_new CHANGELOG.md
|
130 | 161 | fi
|
131 | 162 | echo "Updated CHANGELOG.md"
|
132 | 163 |
|
| 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 | +
|
133 | 171 | - name: Show diff
|
134 | 172 | run: git --no-pager diff --name-only && git --no-pager diff | head -200
|
135 | 173 |
|
|
0 commit comments