🔒 Robuster Release-Workflow mit Validierung

This commit is contained in:
Oliver 2025-07-07 17:04:15 +02:00
parent 1210b40d58
commit 0df9633439

View file

@ -1,4 +1,4 @@
name: 🚀 GitHub Release name: 🚀 GitHub Release (Full Changelog)
on: on:
push: push:
@ -7,45 +7,30 @@ on:
jobs: jobs:
create_release: create_release:
name: 📦 GitHub Release erstellen name: 📦 Release mit gesamtem CHANGELOG
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: 📥 Repository klonen - name: 📥 Repository klonen
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: 📝 Release Notes aus CHANGELOG extrahieren - name: 🔧 Lade gesamten Changelog-Inhalt
id: changelog id: changelog
run: | run: |
VERSION=${GITHUB_REF#refs/tags/} CONTENT=$(cat CHANGELOG.md)
echo "📌 Version: $VERSION"
BODY=$(awk -v version="$VERSION" ' # Escape für GitHub-Aktionen
BEGIN { found = 0 } CONTENT="${CONTENT//'%'/'%25'}"
$0 ~ "## \\[v"version"\\]" { found = 1; next } CONTENT="${CONTENT//$'\n'/'%0A'}"
$0 ~ /^## \[v[0-9]+\.[0-9]+\.[0-9]+\]/ && found { exit } CONTENT="${CONTENT//$'\r'/'%0D'}"
found { print }
' CHANGELOG.md)
echo "$BODY" > extracted_changelog.md echo "body=$CONTENT" >> $GITHUB_OUTPUT
# Prüfen, ob Text extrahiert wurde - name: 🚀 Release erstellen mit komplettem CHANGELOG
if [ ! -s extracted_changelog.md ]; then
echo "❌ Kein gültiger CHANGELOG-Eintrag für Version $VERSION gefunden. Abbruch."
exit 1
fi
BODY_ESCAPED="${BODY//'%'/'%25'}"
BODY_ESCAPED="${BODY_ESCAPED//$'\n'/'%0A'}"
BODY_ESCAPED="${BODY_ESCAPED//$'\r'/'%0D'}"
echo "body=$BODY_ESCAPED" >> $GITHUB_OUTPUT
- name: 🚀 GitHub Release veröffentlichen
uses: softprops/action-gh-release@v2 uses: softprops/action-gh-release@v2
with: with:
name: ${{ github.ref_name }} name: ${{ github.ref_name }}
body: ${{ steps.changelog.outputs.body }} body: ${{ steps.changelog.outputs.body }}
files: extracted_changelog.md files: CHANGELOG.md
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}