Skip to content

Commit 8274ba5

Browse files
authored
Refactor sync-upstream-releases workflow
Updated the sync-upstream-releases workflow to improve asset handling and release creation logic.
1 parent 1bc8818 commit 8274ba5

File tree

1 file changed

+47
-44
lines changed

1 file changed

+47
-44
lines changed

.github/workflows/sync-upstream-releases.yml

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ name: Sync Upstream Releases
22

33
on:
44
schedule:
5-
# Täglich um 02:00 UTC prüfen
65
- cron: '0 2 * * *'
76
workflow_dispatch:
87
inputs:
@@ -42,9 +41,9 @@ jobs:
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"
@@ -55,7 +54,6 @@ jobs:
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

Comments
 (0)