diff --git a/scripts/release-from-version.sh b/scripts/release-from-version.sh index a83fc4d..e1d17d9 100644 --- a/scripts/release-from-version.sh +++ b/scripts/release-from-version.sh @@ -1,13 +1,59 @@ #!/usr/bin/env bash set -euo pipefail +create_release() { + local -r owner="$1" repo="$2" token="$3" version="$4" body_file="$5" + local -i max_attempts=3 delay=5 attempt + local http status + + # Release-Body fรผr die JSON-Payload einlesen + local body_json + body_json=$(tail -n +2 "$body_file" | jq -Rs .) + + for (( attempt=1; attempt<=max_attempts; attempt++ )); do + echo "๐Ÿš€ Try $attempt/$max_attempts: creating release v$version โ€ฆ" + + http=$(curl -sS \ + -H "Authorization: token $token" \ + -H "Content-Type: application/json" \ + -o resp.json -w '%{http_code}' \ + -X POST "$GITHUB_API_URL/repos/$owner/$repo/releases" \ + -d @- < "$RELEASE_BODY_TMP" -# === Schritt 3: Commit updated changelog === +# === Schritt 3: Changelog committen === git add "$CHANGELOG_FILE" if git diff --cached --quiet; then echo "โœ… No changes to commit" @@ -46,7 +90,7 @@ else git push origin main fi -# === Schritt 4: Create tag if not exists === +# === Schritt 4: Tag anlegen, falls nรถtig === if git rev-parse "v$VERSION" >/dev/null 2>&1; then echo "๐Ÿ” Tag v$VERSION already exists, skipping." else @@ -57,9 +101,9 @@ else git push origin "v$VERSION" fi -# === Schritt 5: Create Gitea release === -OWNER="$(echo "$GITHUB_REPOSITORY" | cut -d/ -f1)" -REPO="$(echo "$GITHUB_REPOSITORY" | cut -d/ -f2)" +# === Schritt 5: Release anlegen (mit Retry) === +OWNER="${GITHUB_REPOSITORY%/*}" +REPO="${GITHUB_REPOSITORY#*/}" TOKEN="${RELEASE_PUBLISH_TOKEN:-$ACTIONS_RUNTIME_TOKEN}" if [[ -z "${RELEASE_PUBLISH_TOKEN:-}" ]]; then @@ -69,29 +113,6 @@ if [[ -z "${RELEASE_PUBLISH_TOKEN:-}" ]]; then echo fi -# Prรผfen, ob Release bereits existiert -if curl -sf "$GITHUB_API_URL/repos/$OWNER/$REPO/releases/tags/v$VERSION" \ - -H "Authorization: token $TOKEN" > /dev/null; then - echo "๐Ÿ” Release for tag v$VERSION already exists, skipping." - exit 0 -fi +create_release "$OWNER" "$REPO" "$TOKEN" "$VERSION" "$RELEASE_BODY_TMP" -echo "๐Ÿš€ Creating Gitea release for v$VERSION" - -RELEASE_BODY=$(tail -n +2 "$RELEASE_BODY_TMP" | jq -Rs .) - -curl -X POST "$GITHUB_API_URL/repos/$OWNER/$REPO/releases" \ - -H "Authorization: token $TOKEN" \ - -H "Content-Type: application/json" \ - -d @- <