@@ -2,7 +2,6 @@ name: Sync Upstream Releases
22
33on :
44 schedule :
5- # Täglich um 02:00 UTC prüfen
65 - cron : ' 0 2 * * *'
76 workflow_dispatch :
87 inputs :
4241 run : |
4342 echo "Fetching releases from $UPSTREAM_REPO..."
4443
45- # Alle Releases vom upstream Repository abrufen
44+ # Nur verfügbare Felder verwenden
4645 gh release list -R "$UPSTREAM_REPO" \
47- --json tagName,name,body,draft,prerelease, publishedAt,assets \
46+ --json tagName,name,isDraft,isPrerelease, publishedAt,createdAt \
4847 --limit 50 > upstream_releases.json
4948
5049 echo "Found $(jq length upstream_releases.json) upstream releases"
5554 run : |
5655 echo "Fetching existing releases from fork..."
5756
58- # Existierende Releases im Fork abrufen
5957 gh release list -R "$FORK_REPO" \
6058 --json tagName \
6159 --limit 50 > fork_releases.json || echo "[]" > fork_releases.json
@@ -65,18 +63,14 @@ jobs:
6563 - name : Determine Releases to Sync
6664 id : sync_plan
6765 run : |
68- # Releases identifizieren, die synchronisiert werden müssen
6966 if [ "${{ github.event.inputs.specific_tag }}" != "" ]; then
70- # Nur spezifischen Tag synchronisieren
7167 echo "Syncing specific tag: ${{ github.event.inputs.specific_tag }}"
7268 jq --arg tag "${{ github.event.inputs.specific_tag }}" \
7369 '[.[] | select(.tagName == $tag)]' upstream_releases.json > releases_to_sync.json
7470 elif [ "${{ github.event.inputs.force_sync }}" == "true" ]; then
75- # Alle Releases synchronisieren (force)
7671 echo "Force syncing all releases"
7772 cp upstream_releases.json releases_to_sync.json
7873 else
79- # Nur neue Releases synchronisieren
8074 echo "Syncing new releases only"
8175 jq --slurpfile fork fork_releases.json \
8276 '[.[] | select(.tagName as $tag | $fork[0] | map(.tagName) | index($tag) | not)]' \
@@ -95,71 +89,80 @@ jobs:
9589 - name : Create Workspace
9690 if : steps.sync_plan.outputs.releases_count > 0
9791 run : |
98- mkdir -p release_assets
9992 mkdir -p temp_downloads
10093
10194 - name : Sync Releases
10295 if : steps.sync_plan.outputs.releases_count > 0
10396 run : |
104- # Jedes Release verarbeiten
10597 jq -c '.[]' releases_to_sync.json | while read -r release; do
10698 TAG_NAME=$(echo "$release" | jq -r '.tagName')
10799 RELEASE_NAME=$(echo "$release" | jq -r '.name')
108- RELEASE_BODY=$(echo "$release" | jq -r '.body // ""')
109- IS_DRAFT=$(echo "$release" | jq -r '.draft')
110- IS_PRERELEASE=$(echo "$release" | jq -r '.prerelease')
111- ASSETS=$(echo "$release" | jq -c '.assets')
112- ASSETS_COUNT=$(echo "$ASSETS" | jq length)
100+ IS_DRAFT=$(echo "$release" | jq -r '.isDraft')
101+ IS_PRERELEASE=$(echo "$release" | jq -r '.isPrerelease')
113102
114103 echo "=== Syncing Release: $TAG_NAME ==="
115- echo "Assets count: $ASSETS_COUNT"
116104
117- # Release im Fork erstellen (falls nicht existiert)
105+ # Release Notes separat abrufen (falls verfügbar)
106+ RELEASE_BODY=""
107+ if gh release view "$TAG_NAME" -R "$UPSTREAM_REPO" --json body >/dev/null 2>&1; then
108+ RELEASE_BODY=$(gh release view "$TAG_NAME" -R "$UPSTREAM_REPO" --json body --jq '.body // ""')
109+ fi
110+
111+ # Release-Flags setzen
118112 DRAFT_FLAG=""
119113 PRERELEASE_FLAG=""
120114 [ "$IS_DRAFT" == "true" ] && DRAFT_FLAG="--draft"
121115 [ "$IS_PRERELEASE" == "true" ] && PRERELEASE_FLAG="--prerelease"
122116
123- # Prüfen ob Release bereits existiert
117+ # Existierendes Release löschen falls vorhanden
124118 if gh release view "$TAG_NAME" -R "$FORK_REPO" >/dev/null 2>&1; then
125119 echo "Release $TAG_NAME already exists, deleting first..."
126120 gh release delete "$TAG_NAME" -R "$FORK_REPO" --yes || true
127121 fi
128122
129123 # Release erstellen
130124 echo "Creating release $TAG_NAME..."
131- echo "$RELEASE_BODY" > temp_body.md
132- gh release create "$TAG_NAME" \
133- -R "$FORK_REPO" \
134- --title "$RELEASE_NAME" \
135- --notes-file temp_body.md \
136- $DRAFT_FLAG $PRERELEASE_FLAG
125+ if [ -n "$RELEASE_BODY" ]; then
126+ echo "$RELEASE_BODY" > temp_body.md
127+ gh release create "$TAG_NAME" \
128+ -R "$FORK_REPO" \
129+ --title "$RELEASE_NAME" \
130+ --notes-file temp_body.md \
131+ $DRAFT_FLAG $PRERELEASE_FLAG
132+ else
133+ gh release create "$TAG_NAME" \
134+ -R "$FORK_REPO" \
135+ --title "$RELEASE_NAME" \
136+ --notes "Synced from upstream: $UPSTREAM_REPO" \
137+ $DRAFT_FLAG $PRERELEASE_FLAG
138+ fi
137139
138140 # Assets herunterladen und hochladen
139- if [ "$ASSETS_COUNT" -gt 0 ]; then
140- echo "Downloading and uploading $ASSETS_COUNT assets..."
141-
142- # Assets vom upstream herunterladen
143- cd temp_downloads
144- gh release download "$TAG_NAME" -R "$UPSTREAM_REPO" || {
145- echo "Failed to download assets for $TAG_NAME"
146- cd ..
147- continue
148- }
149-
150- # Alle heruntergeladenen Dateien zum Fork-Release hochladen
151- if ls ./* >/dev/null 2>&1; then
152- echo "Uploading assets to fork release..."
153- gh release upload "$TAG_NAME" -R "$FORK_REPO" ./* || {
154- echo "Failed to upload some assets for $TAG_NAME"
155- }
141+ echo "Downloading assets for $TAG_NAME..."
142+ cd temp_downloads
143+
144+ # Prüfen ob Assets existieren
145+ if gh release view "$TAG_NAME" -R "$UPSTREAM_REPO" --json assets --jq '.assets | length' | grep -q '^[1-9]'; then
146+ echo "Assets found, downloading..."
147+ if gh release download "$TAG_NAME" -R "$UPSTREAM_REPO"; then
148+ # Assets hochladen falls vorhanden
149+ if ls ./* >/dev/null 2>&1; then
150+ echo "Uploading assets to fork release..."
151+ gh release upload "$TAG_NAME" -R "$FORK_REPO" ./* || {
152+ echo "Warning: Failed to upload some assets for $TAG_NAME"
153+ }
154+ fi
155+ else
156+ echo "Warning: Failed to download assets for $TAG_NAME"
156157 fi
157158
158159 # Cleanup
159- rm -f ./*
160- cd ..
160+ rm -f ./* 2>/dev/null || true
161+ else
162+ echo "No assets found for $TAG_NAME"
161163 fi
162164
165+ cd ..
163166 echo "✅ Successfully synced release: $TAG_NAME"
164167 echo ""
165168 done
@@ -179,5 +182,5 @@ jobs:
179182 - name : Cleanup
180183 if : always()
181184 run : |
182- rm -rf temp_downloads release_assets
185+ rm -rf temp_downloads
183186 rm -f upstream_releases.json fork_releases.json releases_to_sync.json temp_body.md
0 commit comments