@@ -100,19 +100,43 @@ jobs:
100100 needs : build-release-package
101101
102102 steps :
103+ - name : Check out repository
104+ uses : actions/checkout@v4
105+
103106 - name : Download release assets
104107 uses : actions/download-artifact@v4
105108 with :
106109 path : dist
107110 merge-multiple : true
108111
112+ - name : Extract release notes from changelog
113+ run : |
114+ version="${GITHUB_REF_NAME#v}"
115+ raw_notes="$RUNNER_TEMP/release-notes.raw.md"
116+ notes_file="$RUNNER_TEMP/release-notes.md"
117+
118+ awk -v version="$version" '
119+ BEGIN { target = "## [" version "] - " }
120+ index($0, target) == 1 { in_section = 1; next }
121+ in_section && index($0, "## [") == 1 { exit }
122+ in_section { print }
123+ ' CHANGELOG.md > "$raw_notes"
124+
125+ sed '/./,$!d' "$raw_notes" | tac | sed '/./,$!d' | tac > "$notes_file"
126+
127+ if [ ! -s "$notes_file" ]; then
128+ printf 'Could not extract release notes for version %s from CHANGELOG.md\n' "$version" >&2
129+ exit 1
130+ fi
131+
109132 - name : Create or update GitHub release
110133 env :
111134 GH_TOKEN : ${{ github.token }}
112135 GH_REPO : ${{ github.repository }}
113136 run : |
114137 if gh release view "${GITHUB_REF_NAME}" --repo "${GH_REPO}" >/dev/null 2>&1; then
115138 gh release upload "${GITHUB_REF_NAME}" dist/* --repo "${GH_REPO}" --clobber
139+ gh release edit "${GITHUB_REF_NAME}" --repo "${GH_REPO}" --title "${GITHUB_REF_NAME}" --notes-file "$RUNNER_TEMP/release-notes.md"
116140 else
117- gh release create "${GITHUB_REF_NAME}" dist/* --repo "${GH_REPO}" --title "${GITHUB_REF_NAME}" --generate- notes
141+ gh release create "${GITHUB_REF_NAME}" dist/* --repo "${GH_REPO}" --title "${GITHUB_REF_NAME}" --notes-file "$RUNNER_TEMP/release- notes.md"
118142 fi
0 commit comments