@@ -45,22 +45,35 @@ jobs:
4545 - name : Create release notes
4646 id : release_notes
4747 if : steps.check_release.outputs.exists == 'false'
48+ env :
49+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
4850 run : |
4951 PREVIOUS_TAG=$(git describe --tags --abbrev=0 ${{ steps.get_version.outputs.VERSION }}^ 2>/dev/null || git rev-list --max-parents=0 HEAD)
50-
52+
5153 CHANGELOG=""
54+ declare -A SEEN_PRS
55+
5256 while IFS= read -r line; do
5357 commit_hash=$(echo "$line" | cut -d' ' -f1)
5458 commit_msg=$(echo "$line" | cut -d' ' -f2-)
55- author_login=$(gh api repos/${{ github.repository }}/commits/$commit_hash --jq '.author.login' 2>/dev/null || echo "unknown")
56- if [ "$author_login" != "null" ] && [ "$author_login" != "unknown" ]; then
57- CHANGELOG="$CHANGELOG* $commit_msg (@$author_login)"$'\n'
59+
60+ # Prefer author login from associated PR
61+ pr_json=$(gh api repos/${{ github.repository }}/commits/$commit_hash/pulls -H "Accept: application/vnd.github+json" 2>/dev/null || true)
62+ pr_number=$(echo "$pr_json" | jq -r '.[0].number // empty')
63+ if [ -n "$pr_number" ] && [ -z "${SEEN_PRS[$pr_number]+x}" ]; then
64+ pr_title=$(echo "$pr_json" | jq -r '.[0].title // empty')
65+ pr_author=$(echo "$pr_json" | jq -r '.[0].user.login // empty')
66+ if [ -z "$pr_author" ] || [ "$pr_author" = "null" ]; then
67+ pr_author="unknown"
68+ fi
69+ CHANGELOG="$CHANGELOG* ${pr_title:-$commit_msg} (#$pr_number) (@$pr_author)"$'\n'
70+ SEEN_PRS[$pr_number]=1
5871 else
59- author_name=$(git show --pretty=format:"%an" -s $commit_hash)
60- CHANGELOG="$CHANGELOG* $commit_msg (@$author_name) "$'\n'
72+ # No PR associated: include commit message without PR info
73+ CHANGELOG="$CHANGELOG* $commit_msg"$'\n'
6174 fi
6275 done < <(git log --pretty=format:"%H %s" ${PREVIOUS_TAG}..${{ steps.get_version.outputs.VERSION }})
63-
76+
6477 cat > release_notes.md << EOF
6578 ## Changes
6679 ${CHANGELOG}
7083 if : steps.check_release.outputs.exists == 'false'
7184 uses : softprops/action-gh-release@v2
7285 with :
73- name : Release ${{ steps.get_version.outputs.VERSION }}
86+ name : ${{ steps.get_version.outputs.VERSION }}
7487 body_path : release_notes.md
7588 draft : true
7689 prerelease : false
0 commit comments