@@ -124,21 +124,79 @@ jobs:
124
124
- name : Update CHANGELOG.md
125
125
shell : bash
126
126
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
134
127
NEW_VERSION='${{ steps.determine_version.outputs.NEW_VERSION }}'
135
128
CHANGELOG=$(cat << 'EOF'
136
129
${{ steps.get_changelog.outputs.CHANGELOG }}
137
130
EOF
138
131
)
139
132
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
142
200
143
201
- name : Check if release exists
144
202
id : check_release
0 commit comments