update Push Readme to Dockerhub
All checks were successful
/ release-and-build (push) Successful in 1m36s

This commit is contained in:
2026-02-17 21:53:34 +00:00
parent f94496b25b
commit 17340d8a60

View File

@@ -318,38 +318,57 @@ jobs:
- name: Push README to Docker Hub
if: steps.check_changes.outputs.should_build == 'true' && contains(steps.prep.outputs.push_targets, 'dockerhub')
run: |
# Tool Check & Install
# 1. Sicherstellen, dass jq da ist
if ! command -v jq &> /dev/null; then
echo "Installing jq..."
(apt-get update && apt-get install -y jq) || (apk add --no-cache jq) || echo "Could not install jq"
apt-get update && apt-get install -y jq || apk add --no-cache jq || true
fi
# Token holen
echo "🚀 Starte README Update auf Docker Hub..."
# 2. Login Token holen
TOKEN=$(curl -s -X POST "https://hub.docker.com/v2/users/login/" \
-H "Content-Type: application/json" \
-d "{\"username\": \"${{ secrets.DOCKERHUB_USERNAME }}\", \"password\": \"${{ secrets.DOCKERHUB_TOKEN }}\"}" | jq -r .token)
if [ "$TOKEN" != "null" ] && [ -n "$TOKEN" ]; then
REPO_PURE=${{ steps.prep.outputs.repo_pure }}
DH_USER="${{ secrets.DOCKERHUB_USERNAME }}"
# Kurzbeschreibung sicher für JSON formatieren
SHORT_DESC=$(echo -e "${{ env.DESCRIPTION }}" | head -n 1 | cut -c 1-100)
if [ "$TOKEN" == "null" ] || [ -z "$TOKEN" ]; then
echo "❌ Fehler: Konnte kein Login-Token abrufen. Prüfe die Credentials!"
exit 1
fi
echo "📤 Übertrage README und Metadata zu Docker Hub..."
# Wir nutzen jq, um das gesamte JSON-Objekt sicher zu bauen (verhindert Quotes-Fehler)
JSON_PAYLOAD=$(jq -n \
--arg desc "$SHORT_DESC" \
--arg full_desc "$(cat README.md)" \
'{description: $desc, full_description: $full_desc}')
# 3. Variablen vorbereiten
REPO_PURE="${{ steps.prep.outputs.repo_pure }}"
DH_USER="${{ secrets.DOCKERHUB_USERNAME }}"
# Kurzbeschreibung aus ENV oder Fallback
SHORT_DESC=$(echo -e "${{ env.DESCRIPTION }}" | head -n 1 | cut -c 1-100)
[ -z "$SHORT_DESC" ] && SHORT_DESC="Docker Image für $REPO_PURE"
curl -s -X PATCH "https://hub.docker.com/v2/repositories/${DH_USER}/${REPO_PURE}/" \
-H "Authorization: JWT ${TOKEN}" \
-H "Content-Type: application/json" \
-d "$JSON_PAYLOAD"
echo "✅ Docker Hub erfolgreich aktualisiert."
echo "📦 Verarbeite README.md (${REPO_PURE})..."
# 4. JSON Payload sicher bauen
# --rawfile lädt die Datei direkt in eine Variable, was Escaping-Fehler verhindert
jq -n \
--arg desc "$SHORT_DESC" \
--rawfile full_desc README.md \
'{description: $desc, full_description: $full_desc}' > payload.json
# 5. API Request mit detaillierter Ausgabe
echo "📤 Sende Daten an Docker Hub API..."
RESPONSE=$(curl -s -w "\n%{http_code}" -X PATCH \
"https://hub.docker.com/v2/repositories/${DH_USER}/${REPO_PURE}/" \
-H "Authorization: JWT ${TOKEN}" \
-H "Content-Type: application/json" \
-d @payload.json)
# Antwort auswerten
HTTP_STATUS=$(echo "$RESPONSE" | tail -n 1)
BODY=$(echo "$RESPONSE" | head -n -1)
if [ "$HTTP_STATUS" -eq 200 ]; then
echo "✅ README erfolgreich aktualisiert (HTTP 200)."
else
echo "❌ Docker Hub Login fehlgeschlagen (Token ist leer)."
echo "❌ Fehler beim Update! HTTP Status: $HTTP_STATUS"
echo "Antwort von Docker Hub: $BODY"
exit 1
fi