@@ -277,16 +277,72 @@ jobs:
277277 fi
278278
279279 # Create GitHub Release
280+ - name : Prepare GitHub Release assets
281+ if : startsWith(github.ref, 'refs/tags/')
282+ shell : bash
283+ run : |
284+ # GitHub release assets must have unique filenames.
285+ # Both mac folders contain latest-mac.yml, so stage assets with
286+ # channel-specific manifest names for macOS and keep one compatibility file.
287+ rm -rf gh-release-assets
288+ mkdir -p gh-release-assets
289+
290+ copy_file() {
291+ local src_file="$1"
292+ local dst_name="$2"
293+ [ -f "$src_file" ] || return 0
294+
295+ if [ -e "gh-release-assets/$dst_name" ]; then
296+ echo "Duplicate release asset name detected: $dst_name"
297+ echo " existing: gh-release-assets/$dst_name"
298+ echo " incoming: $src_file"
299+ exit 1
300+ fi
301+
302+ cp -f "$src_file" "gh-release-assets/$dst_name"
303+ }
304+
305+ copy_assets() {
306+ local src_dir="$1"
307+ local skip_name="${2:-}"
308+ [ -d "$src_dir" ] || return 0
309+
310+ while IFS= read -r -d '' file; do
311+ local name
312+ name="$(basename "$file")"
313+
314+ if [ -n "$skip_name" ] && [ "$name" = "$skip_name" ]; then
315+ continue
316+ fi
317+
318+ copy_file "$file" "$name"
319+ done < <(find "$src_dir" -maxdepth 1 -type f -print0)
320+ }
321+
322+ # Stage all normal artifacts (exclude duplicate mac manifest names first).
323+ copy_assets "release/mac-arm64" "latest-mac.yml"
324+ copy_assets "release/mac-intel" "latest-mac.yml"
325+ copy_assets "release/win-x64"
326+ copy_assets "release/linux-x64"
327+
328+ # macOS updater channels configured in electron/main/update.ts:
329+ # arm64 -> latest-arm64-mac.yml, x64 -> latest-x64-mac.yml
330+ copy_file "release/mac-arm64/latest-mac.yml" "latest-arm64-mac.yml"
331+ copy_file "release/mac-intel/latest-mac.yml" "latest-x64-mac.yml"
332+
333+ # Compatibility manifest for clients still using default latest-mac.yml.
334+ copy_file "release/mac-intel/latest-mac.yml" "latest-mac.yml"
335+
336+ echo "Prepared GitHub release assets:"
337+ ls -1 gh-release-assets
338+
280339 - name : Create GitHub Release
281340 if : startsWith(github.ref, 'refs/tags/')
282341 uses : softprops/action-gh-release@v2
283342 with :
284343 token : ${{ secrets.GITHUB_TOKEN }}
285344 files : |
286- release/mac-arm64/*
287- release/mac-intel/*
288- release/win-x64/*
289- release/linux-x64/*
345+ gh-release-assets/*
290346
291347 # Extract version from tag (e.g., v0.0.84 -> 0.0.84)
292348 - name : Extract version
0 commit comments