# Legt beim Pushen eines Versions-Tags automatisch das Release an. # # Die Notizen kommen aus releases/vX.Y.Z.md — derselben Datei, die auch von # Hand für ein Release taugt. So gibt es genau eine Quelle für den Text, und # der Ablauf funktioniert mit und ohne CI. name: Release on: push: tags: - "v*.*.*" jobs: veroeffentlichen: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Release-Notizen einsammeln id: notes run: | VERSION="${GITHUB_REF_NAME#v}" FILE="releases/${GITHUB_REF_NAME}.md" if [ ! -f "$FILE" ]; then echo "Es gibt keine $FILE — bitte anlegen, bevor der Tag gepusht wird." >&2 exit 1 fi # Die Überschrift der Datei ist der Titel; alles darunter der Text. { echo "version=$VERSION" echo "body<> "$GITHUB_OUTPUT" - name: Release anlegen env: TOKEN: ${{ secrets.GITHUB_TOKEN }} BODY: ${{ steps.notes.outputs.body }} VERSION: ${{ steps.notes.outputs.version }} run: | PAYLOAD=$(jq -n \ --arg tag "$GITHUB_REF_NAME" \ --arg name "$VERSION" \ --arg body "$BODY" \ '{tag_name: $tag, name: $name, body: $body, draft: false, prerelease: false}') curl -sSf -X POST \ -H "Authorization: token $TOKEN" \ -H "Content-Type: application/json" \ -d "$PAYLOAD" \ "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases"