构建完成后,向GitHub Release上传文件时应使用什么asset_path?
问题分析
你遇到的核心问题是:release 作业没有先下载之前 linux 作业上传的构建产物(artifact),直接尝试访问本地不存在的文件导致报错。
linux 作业通过 actions/upload-artifact@v4 上传的是 dist 目录下的所有wheel文件,artifact名称为 wheels-linux-${{ matrix.platform.target }}——GitHub Actions不会自动将artifact下载到后续作业,必须显式执行下载操作。
修复方案
方案1:下载产物后直接上传(推荐)
修改 release 作业,先下载对应平台的artifact,再将wheel文件上传到Release。同时注意 actions/upload-release-asset@v1 已废弃,改用更易用的 softprops/action-gh-release:
release: name: Release runs-on: ubuntu-latest if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} needs: [linux, windows, macos] steps: # 下载Linux aarch64平台的artifact - name: Download Linux aarch64 wheels uses: actions/download-artifact@v4 with: name: wheels-linux-aarch64 path: dist-linux-aarch64 # 下载Linux x86_64平台的artifact(按需添加) - name: Download Linux x86_64 wheels uses: actions/download-artifact@v4 with: name: wheels-linux-x86_64 path: dist-linux-x86_64 # 批量上传所有wheel到Release - name: Upload to Release uses: softprops/action-gh-release@v1 with: files: | dist-linux-aarch64/*.whl dist-linux-x86_64/*.whl env: GITHUB_TOKEN: ${{ github.token }}
方案2:下载后打包成zip再上传
如果确实需要上传zip包,可在下载后添加打包步骤:
release: name: Release runs-on: ubuntu-latest if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} needs: [linux, windows, macos] steps: - name: Download Linux aarch64 wheels uses: actions/download-artifact@v4 with: name: wheels-linux-aarch64 path: wheels-linux-aarch64 # 将wheel文件打包成zip - name: Zip Linux aarch64 wheels run: zip -r wheels-linux-aarch64.zip wheels-linux-aarch64/ # 上传zip包到Release - name: Upload zip to Release uses: softprops/action-gh-release@v1 with: files: wheels-linux-aarch64.zip env: GITHUB_TOKEN: ${{ github.token }}
关键注意点
- 必须通过
actions/download-artifact显式下载之前作业上传的artifact,否则release作业的运行环境中没有这些文件。 actions/upload-release-asset@v1已被GitHub标记为废弃,softprops/action-gh-release支持批量上传,配置更简洁。- 下载artifact时,
path参数指定的是下载后文件存放的本地目录,后续操作要基于这个路径访问文件。
内容的提问来源于stack exchange,提问作者Frank C.
相关产品推荐
相关产品推荐

