ci: Workflows für Gitea Actions

CI prüft bei jedem Push Typen, Tests und den Produktionsbuild — die Tests
laufen gegen eine echte PostgreSQL-Instanz, weil sie Abfragen und
Fortschrittsberechnungen prüfen, nicht Attrappen.

Der Release-Workflow zieht die Notizen aus releases/vX.Y.Z.md, derselben
Datei, die auch von Hand für ein Release taugt. So gibt es eine Quelle für
den Text, und der Ablauf funktioniert mit und ohne CI.
This commit is contained in:
Florian Wilde
2026-09-01 20:50:17 +02:00
parent 96a42594a9
commit d8239441aa
2 changed files with 119 additions and 0 deletions
+56
View File
@@ -0,0 +1,56 @@
# 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<<FLIMMER_EOF"
tail -n +2 "$FILE"
echo "FLIMMER_EOF"
} >> "$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"