Skip to content

Commit 32d7a82

Browse files
authored
Handle multiple PRs and contributors in changelog generation + Simplify CR handling (#1396)
* Simplify CR characters handling in changelog generation * Support for multiple contributors and/or PRs in changelog * Prevent the generation of empty changelogs on beta release
1 parent 28f8047 commit 32d7a82

File tree

2 files changed

+35
-14
lines changed

2 files changed

+35
-14
lines changed

.github/tweak_changelogs.sh

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,56 @@ RELEASE_VERSION="$1"
44

55
# Delete until and including the first line containing "<!-- Release notes generated"
66
sed -i '1,/^<!-- Release notes generated/d' temp_change.md
7+
8+
# Check if there is more than one non-empty line (the full changelog line) before we continue
9+
if [ $(grep -c '^[[:space:]]*[^[:space:]]' temp_change.md) -le 1 ]; then
10+
echo "No changes to release $RELEASE_VERSION"
11+
rm temp_change.md
12+
exit 1
13+
fi
14+
15+
# Remove all CR characters from all changelog files
16+
sed -i 's/\r//g' temp_change.md CHANGELOG.md changelog.txt
17+
718
# Reverse the order of lines in the file (last line becomes first, etc.)
819
sed -i '1h;1d;$!H;$!d;G' temp_change.md
920
# Convert "**Full Changelog**: URL" format to markdown link format "[Full Changelog](URL)"
1021
sed -i -re 's/\*\*Full Changelog\*\*: (.*)/\[Full Changelog\]\(\1\)\n/' temp_change.md
1122
# Delete everything from "## New Contributors" line to the end of file
1223
sed -i '/## New Contributors/,$d' temp_change.md
13-
# Convert GitHub changelog entries from "* description by @username in pull/URL/number"
14-
# to "- description [#number](pull/URL/number) ([username](https://github.com/username))" format
15-
sed -i -re 's/^\*(.*)\sby\s@(.*)\sin\s(.*\/pull\/)(.*)\r?/-\1 [\\#\4](\3\4) ([\2](https:\/\/github.com\/\2))/' temp_change.md;
24+
# Convert GitHub changelog entries to markdown format
25+
# "* description by (@username1, @username2) in #1310, #1311" → "- description #1310, #1311 (@username1, @username2)"
26+
sed -i -re 's/^\*\s(.*)\sby\s\(?(@[^)]*[^) ])\)?\s+in\s+(.*)/- \1 \3 (\2)/' temp_change.md
27+
# Convert @usernames to github links
28+
# "(@username1, @username2)" → "([username1](https://github.com/username1), [username2](https://github.com/username2))"
29+
sed -i -re 's/@([a-zA-Z0-9_-]+)/[\1](https:\/\/github.com\/\1)/g' temp_change.md
30+
# Convert full PR URLs to linked format
31+
# "https://github.com/repo/pull/1310" → "[\#1310](https://github.com/repo/pull/1310)"
32+
sed -i -re 's/(https:\/\/[^) ]*\/pull\/([0-9]+))/[\\#\2](\1)/g' temp_change.md
33+
1634
# Username substitutions for preferred display names
1735
sed -i 's/\[Quotae/\[Quote_a/' temp_change.md
1836
sed -i 's/\[learn2draw/\[Lexy/' temp_change.md
1937
sed -i 's/\[Voronoff/\[Tom Clancy Is Dead/' temp_change.md
2038
sed -i 's/\[PJacek/\[TPlant/' temp_change.md
2139
sed -i 's/\[justjuangui/\[trompetin17/' temp_change.md
2240

23-
sed -i 's/\r//g' temp_change.md
24-
2541
cp temp_change.md changelog_temp.txt
2642
# Append existing CHANGELOG.md content (excluding first line) to temp_change.md
27-
cat CHANGELOG.md | tr \\r \\n | sed '1d' >> temp_change.md
43+
cat CHANGELOG.md | sed '1d' >> temp_change.md
2844
# Create new CHANGELOG.md with header containing version and date, followed by processed changes
2945
printf "# Changelog\n\n## [$RELEASE_VERSION](https://github.com/PathOfBuildingCommunity/PathOfBuilding-PoE2/tree/$RELEASE_VERSION) ($(date +'%Y/%m/%d'))\n\n" | cat - temp_change.md > CHANGELOG.md
3046
# Convert changelog entries from markdown link format to simplified "* description (username)" format
31-
sed -i -re 's/^- (.*) \[.*\) \(\[(.*)\]\(.*/* \1 (\2)/' changelog_temp.txt
47+
# First remove all PR links
48+
sed -i -re 's/( \()?\[\\#[0-9]+\]\([^)]*\),? ?\)?//g' changelog_temp.txt
49+
# Remove markdown link formatting from usernames in parentheses
50+
sed -i -re 's/\[([^]]*)\]\(https:\/\/github\.com\/[^)]*\)/\1/g' changelog_temp.txt
3251
# Create new changelog format: add version header, remove lines 2-3, format section headers, remove ## headers with following line, prepend to existing changelog
33-
echo "VERSION[${RELEASE_VERSION#v}][$(date +'%Y/%m/%d')]" | cat - changelog_temp.txt | tr -d \\r | sed '2,3d' | sed -re 's/^### (.*)/\n--- \1 ---/' | sed -e '/^##.*/,+1 d' | cat - changelog.txt > changelog_new.txt
52+
echo "VERSION[${RELEASE_VERSION#v}][$(date +'%Y/%m/%d')]" | cat - changelog_temp.txt | sed '2,3d' | sed -re 's/^### (.*)/\n--- \1 ---/' | sed -e '/^##.*/,+1 d' | cat - changelog.txt > changelog_new.txt
3453
mv changelog_new.txt changelog.txt
3554

3655
# Normalize line endings to CRLF for all output files to ensure consistent checksums with Windows
37-
sed 's/\r*$/\r/' CHANGELOG.md > CHANGELOG_normalized.md && mv CHANGELOG_normalized.md CHANGELOG.md
38-
sed 's/\r*$/\r/' changelog.txt > changelog_normalized.txt && mv changelog_normalized.txt changelog.txt
56+
sed -i 's/\r*$/\r/' CHANGELOG.md changelog.txt
3957

4058
# Clean up temporary files
4159
rm temp_change.md

.github/workflows/beta.yml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ jobs:
2020
run: |
2121
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
2222
git config --global user.name "github-actions[bot]"
23-
# The hash suffix will help identifying if the beta version is up-to-date
24-
- name: Add commit hash suffix to manifest version
25-
run: |
26-
sed -i "s/<Version number=\"\([^\"]*\)\"/<Version number=\"\1-$(git rev-parse --short HEAD)\"/g" manifest.xml
2723
- name: Generate Release notes
2824
run: |
2925
echo "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token
@@ -35,11 +31,18 @@ jobs:
3531
gh release create beta --title "Beta Release" --draft --generate-notes
3632
gh release view beta > temp_change.md
3733
- name: Tweak changelogs
34+
id: tweak-changelogs
35+
continue-on-error: true
3836
run: |
3937
# Remove carriage returns to be able to run the script
4038
sed -i 's/\r$//' .github/tweak_changelogs.sh
4139
chmod +x .github/tweak_changelogs.sh
4240
.github/tweak_changelogs.sh beta
41+
# The hash suffix will help identifying if the beta version is up-to-date
42+
- name: Add commit hash suffix to manifest version
43+
if: steps.tweak-changelogs.outcome == 'success'
44+
run: |
45+
sed -i "s/<Version number=\"\([^\"]*\)\"/<Version number=\"\1-$(git rev-parse --short HEAD)\"/g" manifest.xml
4346
- name: Update manifest.xml
4447
run: python3 update_manifest.py --quiet --in-place
4548
- name: Push to beta branch

0 commit comments

Comments
 (0)