@@ -160,6 +160,62 @@ jobs:
160160 npm_config_target_arch : ${{ matrix.arch }}
161161 npm_config_platform : ${{ matrix.npm-platform }}
162162
163+ - name : Normalize Windows artifact names
164+ if : runner.os == 'Windows'
165+ env :
166+ MATRIX_ARCH : ${{ matrix.arch }}
167+ run : |
168+ set -euo pipefail
169+
170+ arch="$MATRIX_ARCH"
171+ shopt -s nullglob
172+
173+ exe_name=""
174+ for file in release/*.exe; do
175+ dir=$(dirname "$file")
176+ base=$(basename "$file")
177+ ext="${base##*.}"
178+ stem="${base%.$ext}"
179+
180+ if [[ "$arch" != "x64" ]]; then
181+ renamed="$dir/${stem}-${arch}.${ext}"
182+ mv "$file" "$renamed"
183+ file="$renamed"
184+ fi
185+
186+ exe_name=$(basename "$file")
187+ done
188+
189+ latest_file=""
190+ if [[ -f release/latest.yml ]]; then
191+ if [[ "$arch" != "x64" ]]; then
192+ latest_file="release/latest-${arch}.yml"
193+ mv release/latest.yml "$latest_file"
194+ else
195+ latest_file="release/latest.yml"
196+ fi
197+ fi
198+
199+ if [[ -n "$exe_name" && -n "$latest_file" ]]; then
200+ export WINDOWS_EXE_NAME="$exe_name"
201+ export WINDOWS_LATEST_FILE="$latest_file"
202+ python - <<'PY'
203+ import os
204+ import re
205+ from pathlib import Path
206+ from urllib.parse import quote
207+
208+ latest = Path(os.environ["WINDOWS_LATEST_FILE"])
209+ exe_name = os.environ["WINDOWS_EXE_NAME"]
210+ content = latest.read_text(encoding="utf-8")
211+
212+ content = re.sub(r"^(\s*path:\s*).+$", rf"\1{exe_name}", content, flags=re.MULTILINE)
213+ content = re.sub(r"^(\s*url:\s*).+$", rf"\1{quote(exe_name)}", content, flags=re.MULTILINE)
214+
215+ latest.write_text(content, encoding="utf-8")
216+ PY
217+ fi
218+
163219 - name : Upload release assets
164220 env :
165221 GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments