Files
releases-sync/scripts/upsert-github-release.sh
Max P. fb70bee551 refactor(scripts): remove redundant verbose flag handling
- Eliminate unused VERBOSE flag exports in action workflows
- Adjust curl commands to consistently output responses instead of suppressing
- Simplify script logic by removing unnecessary verbosity checks
2025-05-26 17:02:07 +02:00

107 lines
3.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# Voraussetzungen:
# - GITHUB_TOKEN
# - GITHUB_OWNER
# - GITHUB_REPO
# - TAG
# - WORKDIR (z. B. /tmp/gitea_release_v0.1.0)
VERBOSE="${VERBOSE:-false}"
CURL_BASE="curl -s"
# Funktion zur bedingten curl-Ausgabe
curl_exec() {
if [[ "$VERBOSE" == "true" ]]; then
curl -v "$@"
else
curl -s "$@"
fi
}
if [[ -z "${TAG:-}" ]]; then
echo "❌ TAG is not set."
exit 1
fi
GITHUB_API_URL="https://api.github.com"
RELEASE_JSON="$WORKDIR/release.json"
ASSETS_DIR="$WORKDIR/assets"
if [[ ! -f "$RELEASE_JSON" ]]; then
echo "$RELEASE_JSON nicht gefunden."
exit 1
fi
RELEASE_NAME=$(jq -r '.name' "$RELEASE_JSON")
RELEASE_BODY=$(jq -r '.body' "$RELEASE_JSON")
RELEASE_DRAFT=$(jq -r '.draft' "$RELEASE_JSON")
RELEASE_PRERELEASE=$(jq -r '.prerelease' "$RELEASE_JSON")
RESPONSE_FILE=$(mktemp)
HTTP_CODE=$(curl -s -w "%{http_code}" -o "$RESPONSE_FILE" \
-H "Authorization: token $GITHUB_TOKEN" \
"$GITHUB_API_URL/repos/$GITHUB_OWNER/$GITHUB_REPO/releases/tags/$TAG" || true)
if [[ "$HTTP_CODE" == "200" ]]; then
EXISTING_RELEASE=$(cat "$RESPONSE_FILE")
RELEASE_ID=$(echo "$EXISTING_RELEASE" | jq -r '.id')
echo "📝 Release $TAG existiert bereits (ID: $RELEASE_ID), wird aktualisiert."
echo "$EXISTING_RELEASE" | jq -c '.assets[]?' | while read -r asset; do
ASSET_ID=$(echo "$asset" | jq -r '.id')
NAME=$(echo "$asset" | jq -r '.name')
echo "❌ Lösche bestehendes Asset: $NAME ($ASSET_ID)"
curl_exec -X DELETE \
-H "Authorization: token $GITHUB_TOKEN" \
"$GITHUB_API_URL/repos/$GITHUB_OWNER/$GITHUB_REPO/releases/assets/$ASSET_ID"
done
echo "🔄 Aktualisiere Release-Metadaten ..."
curl_exec -X PATCH \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg name "$RELEASE_NAME" \
--arg body "$RELEASE_BODY" \
--arg tag "$TAG" \
--argjson draft "$RELEASE_DRAFT" \
--argjson prerelease "$RELEASE_PRERELEASE" \
'{name: $name, body: $body, draft: $draft, prerelease: $prerelease, tag_name: $tag}')" \
"$GITHUB_API_URL/repos/$GITHUB_OWNER/$GITHUB_REPO/releases/$RELEASE_ID"
else
echo "📦 Release $TAG existiert nicht – wird erstellt (HTTP $HTTP_CODE)."
echo "Antwort: $(cat "$RESPONSE_FILE")"
echo "🚀 Erstelle neuen Release ..."
CREATE_RESPONSE=$(curl_exec -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg tag "$TAG" \
--arg name "$RELEASE_NAME" \
--arg body "$RELEASE_BODY" \
--argjson draft "$RELEASE_DRAFT" \
--argjson prerelease "$RELEASE_PRERELEASE" \
'{tag_name: $tag, name: $name, body: $body, draft: $draft, prerelease: $prerelease}')" \
"$GITHUB_API_URL/repos/$GITHUB_OWNER/$GITHUB_REPO/releases")
RELEASE_ID=$(echo "$CREATE_RESPONSE" | jq -r '.id')
fi
UPLOAD_URL="https://uploads.github.com/repos/$GITHUB_OWNER/$GITHUB_REPO/releases/$RELEASE_ID/assets"
for file in "$ASSETS_DIR"/*; do
FILENAME=$(basename "$file")
echo "⬆ Lade Asset $FILENAME hoch ..."
curl_exec -X POST \
-H "Authorization: token $GITHUB_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary "@$file" \
"$UPLOAD_URL?name=$FILENAME"
done
echo "✅ Release $TAG ist nun auf GitHub aktuell."