feat: implement release notes generation with categorized changes since last tag

This commit is contained in:
Manuel Weiser 2025-02-22 20:00:42 +01:00
parent 1b059c35f1
commit deb7abd102
2 changed files with 54 additions and 16 deletions

View File

@ -66,14 +66,33 @@ jobs:
VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2) VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- name: Read CHANGELOG.md - name: Generate Release Notes
id: changelog id: release_notes
run: | run: |
VERSION=${{ steps.get_version.outputs.VERSION }} LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
CHANGELOG=$(awk "/## \\[$VERSION\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md)
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT if [ -n "$LAST_TAG" ]; then
echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT echo "Changes since $LAST_TAG:" >> $GITHUB_OUTPUT
echo "" >> $GITHUB_OUTPUT
# Get commits since last tag and categorize them
echo "### Added" >> $GITHUB_OUTPUT
git log $LAST_TAG..HEAD --pretty=format:%s | grep -iE '^(feat|add|new)' | sed 's/^feat: /- /' >> $GITHUB_OUTPUT || true
echo "" >> $GITHUB_OUTPUT
echo "### Fixed" >> $GITHUB_OUTPUT
git log $LAST_TAG..HEAD --pretty=format:%s | grep -iE '^fix' | sed 's/^fix: /- /' >> $GITHUB_OUTPUT || true
echo "" >> $GITHUB_OUTPUT
echo "### Changed" >> $GITHUB_OUTPUT
git log $LAST_TAG..HEAD --pretty=format:%s | grep -ivE '^(feat|fix|add|new)' | sed 's/^/- /' >> $GITHUB_OUTPUT || true
echo "EOF" >> $GITHUB_OUTPUT
else
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
echo "Initial Release" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
fi
- name: Determine Gitea URL - name: Determine Gitea URL
id: gitea_url id: gitea_url
@ -122,7 +141,7 @@ jobs:
# Erstelle zuerst den Release ohne Dateien # Erstelle zuerst den Release ohne Dateien
echo "Debug: Creating release..." echo "Debug: Creating release..."
RELEASE_DATA="{\"tag_name\":\"v${VERSION}\",\"name\":\"v${VERSION}\",\"body\":\"${{ steps.changelog.outputs.CHANGES }}\"}" RELEASE_DATA="{\"tag_name\":\"v${VERSION}\",\"name\":\"v${VERSION}\",\"body\":\"${{ steps.release_notes.outputs.CHANGES }}\"}"
RELEASE_RESPONSE=$(curl -s -w "\n%{http_code}" \ RELEASE_RESPONSE=$(curl -s -w "\n%{http_code}" \
-X POST \ -X POST \

View File

@ -73,14 +73,33 @@ jobs:
VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2) VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2)
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
- name: Read CHANGELOG.md - name: Generate Release Notes
id: changelog id: release_notes
run: | run: |
VERSION=${{ steps.get_version.outputs.VERSION }} LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
CHANGELOG=$(awk "/## \\[$VERSION\\]/{p=1;print;next} /## \\[/{p=0} p" CHANGELOG.md)
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT if [ -n "$LAST_TAG" ]; then
echo "$CHANGELOG" >> $GITHUB_OUTPUT echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT echo "Changes since $LAST_TAG:" >> $GITHUB_OUTPUT
echo "" >> $GITHUB_OUTPUT
# Get commits since last tag and categorize them
echo "### Added" >> $GITHUB_OUTPUT
git log $LAST_TAG..HEAD --pretty=format:%s | grep -iE '^(feat|add|new)' | sed 's/^feat: /- /' >> $GITHUB_OUTPUT || true
echo "" >> $GITHUB_OUTPUT
echo "### Fixed" >> $GITHUB_OUTPUT
git log $LAST_TAG..HEAD --pretty=format:%s | grep -iE '^fix' | sed 's/^fix: /- /' >> $GITHUB_OUTPUT || true
echo "" >> $GITHUB_OUTPUT
echo "### Changed" >> $GITHUB_OUTPUT
git log $LAST_TAG..HEAD --pretty=format:%s | grep -ivE '^(feat|fix|add|new)' | sed 's/^/- /' >> $GITHUB_OUTPUT || true
echo "EOF" >> $GITHUB_OUTPUT
else
echo "CHANGES<<EOF" >> $GITHUB_OUTPUT
echo "Initial Release" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
fi
- name: Create GitHub Release - name: Create GitHub Release
env: env:
@ -110,7 +129,7 @@ jobs:
if [ -n "$FILES_TO_UPLOAD" ]; then if [ -n "$FILES_TO_UPLOAD" ]; then
gh release create "v${VERSION}" \ gh release create "v${VERSION}" \
--title "Release ${VERSION}" \ --title "Release ${VERSION}" \
--notes "${{ steps.changelog.outputs.CHANGES }}" \ --notes "${{ steps.release_notes.outputs.CHANGES }}" \
$FILES_TO_UPLOAD $FILES_TO_UPLOAD
else else
echo "Error: No files found to upload" echo "Error: No files found to upload"