fix(build): 修复 GitHub Release 上传失败问题

- 调整 artifacts 下载方式,避免文件覆盖冲突
- 手动扁平化并重命名发布资产文件
- 确保服务端可执行文件唯一性
- 排除 electron 构建产生的 unpacked 目录
- 统一上传目录内容至 GitHub Release
- 避免使用通配符导致的重复匹配问题
This commit is contained in:
coolxitech
2025-12-14 13:01:00 +08:00
parent 00853372cd
commit 61dee24933

View File

@@ -101,43 +101,42 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
# 1. 获取版本号
- name: Get Version - name: Get Version
id: get_version id: get_version
run: echo "VERSION=v$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT run: echo "VERSION=v$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
# 2. 下载所有 Artifact (注意这里会平铺所有文件) # 1. 下载时,不使用 merge-multiple防止覆盖冲突
- name: Download All Artifacts - name: Download Artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
path: ./release-dir path: ./raw-assets
merge-multiple: true # 关键:将所有构建出的 .exe, .dmg 平铺到 release-dir 根目录
# 3. 清理不需要的中间产物 (排除 unpacked 等目录) # 2. 核心步骤:手动移动文件到一个扁平目录,并强制重命名
- name: Prepare Assets - name: Flatten and Rename Assets
shell: bash
run: | run: |
cd ./release-dir mkdir -p ./final-release
# 只保留安装程序后缀,删除所有文件夹和杂质文件
# 这样能确保不上传 electron 产生的 win-unpacked 等目录
find . -maxdepth 1 -type d -not -path '.' -exec rm -rf {} +
# 查看一下最终要上传的文件列表,方便调试
ls -R
# 4. 上传到 GitHub Release # 移动 Server 文件并确保名字唯一
- name: Create and Upload Release # 注意根据你之前的附件Artifact 名字是 server-windows-amd64
cp ./raw-assets/server-windows-amd64/ogame-server-win.exe ./final-release/ogame-server-win.exe || cp ./raw-assets/server-windows-amd64/server-windows-amd64.exe ./final-release/ogame-server-win.exe || true
cp ./raw-assets/server-linux-amd64/ogame-server-linux ./final-release/ogame-server-linux || true
cp ./raw-assets/server-linux-arm64/ogame-server-linux-arm64 ./final-release/ogame-server-linux-arm64 || true
# 移动 Electron 安装包 (排除 unpacked 目录)
find ./raw-assets/electron-* -type f \( -name "*.exe" -o -name "*.dmg" -o -name "*.AppImage" -o -name "*.zip" \) -exec cp {} ./final-release/ \;
# 检查结果
echo "Final assets to upload:"
ls -R ./final-release
# 3. 一次性上传,禁止重复匹配
- name: Create GitHub Release
uses: softprops/action-gh-release@v1 uses: softprops/action-gh-release@v1
with: with:
tag_name: ${{ steps.get_version.outputs.VERSION }} tag_name: ${{ steps.get_version.outputs.VERSION }}
name: Release ${{ steps.get_version.outputs.VERSION }} name: Release ${{ steps.get_version.outputs.VERSION }}
# 核心修复:直接上传目录下的所有安装包,不再手动写死文件名避免 404 # 重点:只上传这个干净目录下的所有文件,不要再写具体的通配符防止重复
files: | files: ./final-release/*
./release-dir/*.exe
./release-dir/*.dmg
./release-dir/*.AppImage
./release-dir/*.zip
./release-dir/server-*
./release-dir/ogame-*
generate_release_notes: true generate_release_notes: true
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}