Skip to content

Commit b6196ea

Browse files
feat(workflow): Integrate CHANGELOG generation into release action
- Merge changelog update logic directly into the workflow file - Remove separate update_changelog.sh script - Improve function order and variable definitions in the script - Ensure proper handling of existing changelog entries - Maintain compatibility with existing release creation/update steps
1 parent a97d369 commit b6196ea

File tree

1 file changed

+67
-9
lines changed

1 file changed

+67
-9
lines changed

.github/workflows/release.yml

Lines changed: 67 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -124,21 +124,79 @@ jobs:
124124
- name: Update CHANGELOG.md
125125
shell: bash
126126
run: |
127-
# Set execute permissions
128-
chmod +x $GITHUB_WORKSPACE/.github/scripts/update_changelog.sh
129-
130-
# Convert line endings
131-
sed -i 's/\r$//' $GITHUB_WORKSPACE/.github/scripts/update_changelog.sh
132-
133-
# Set variables
134127
NEW_VERSION='${{ steps.determine_version.outputs.NEW_VERSION }}'
135128
CHANGELOG=$(cat << 'EOF'
136129
${{ steps.get_changelog.outputs.CHANGELOG }}
137130
EOF
138131
)
139132
140-
# Run the update changelog script
141-
$GITHUB_WORKSPACE/.github/scripts/update_changelog.sh "$NEW_VERSION" "$CHANGELOG"
133+
CURRENT_DATE=$(TZ='America/Denver' date +%Y-%m-%d)
134+
REPO_URL="https://github.com/joshuadanpeterson/typewriter.nvim"
135+
136+
format_entry() {
137+
local version=$1
138+
local date=$2
139+
local content=$3
140+
local prev_version=$4
141+
echo "## [$version]($REPO_URL/tree/$version) ($date)"
142+
echo "$content"
143+
echo
144+
echo "[Full Changelog]($REPO_URL/compare/$prev_version...$version)"
145+
echo
146+
}
147+
148+
remove_duplicates() {
149+
echo "$1" | awk '!seen[$0]++'
150+
}
151+
152+
echo "# Changelog" > temp_changelog.md
153+
echo >> temp_changelog.md
154+
155+
# Add new version
156+
NEW_CHANGELOG=$(remove_duplicates "$CHANGELOG")
157+
format_entry "$NEW_VERSION" "$CURRENT_DATE" "$NEW_CHANGELOG" "${{ steps.determine_version.outputs.LATEST_TAG }}" >> temp_changelog.md
158+
159+
prev_version="$NEW_VERSION"
160+
declare -A processed_versions
161+
162+
while IFS= read -r line; do
163+
if [[ $line =~ ^##[[:space:]]+(\[v[0-9]+\.[0-9]+\.[0-9]+\])(.*)$ ]]; then
164+
version="${BASH_REMATCH[1]}"
165+
version="${version:1:-1}"
166+
if [[ -n "${processed_versions[$version]}" ]] || [[ "$version" == "$NEW_VERSION" ]]; then
167+
continue
168+
fi
169+
processed_versions[$version]=1
170+
171+
date_part="${BASH_REMATCH[2]}"
172+
date=$(echo "$date_part" | grep -oP '\(\K[0-9]{4}-[0-9]{2}-[0-9]{2}(?=\))' || echo "Unknown Date")
173+
174+
if [ "$date" != "Unknown Date" ]; then
175+
date=$(TZ='America/Denver' date -d "$date" +%Y-%m-%d)
176+
fi
177+
178+
content=$(sed -n "/^## \[$version\]/,/^## \[v[0-9]/{ /^## \[v[0-9]/d; p; }" CHANGELOG.md)
179+
content=$(echo "$content" | sed '/^\[Full Changelog\]/d' | sed '/^$/N;/^\n$/D')
180+
content=$(remove_duplicates "$content")
181+
182+
format_entry "$version" "$date" "$content" "$prev_version" >> temp_changelog.md
183+
184+
prev_version="$version"
185+
fi
186+
done < CHANGELOG.md
187+
188+
mv temp_changelog.md CHANGELOG.md
189+
190+
if ! grep -q "^# Changelog" CHANGELOG.md || ! grep -q "^## \[v[0-9]\+\.[0-9]\+\.[0-9]\+\]" CHANGELOG.md; then
191+
echo "Error: CHANGELOG.md formatting verification failed"
192+
exit 1
193+
fi
194+
195+
git config --local user.email "[email protected]"
196+
git config --local user.name "GitHub Action"
197+
git add CHANGELOG.md
198+
git commit -m "docs: update CHANGELOG.md for ${NEW_VERSION} and remove duplicate entries"
199+
git push
142200
143201
- name: Check if release exists
144202
id: check_release

0 commit comments

Comments
 (0)