- 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
107 lines
3.3 KiB
Bash
Executable File
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." |