无法通过GitHub Release工作流上传二进制文件求助
排查GitHub Actions推送标签时无法上传二进制文件的问题
1. 权限配置位置错误
你在Create GitHub Release步骤的env块中定义permissions是无效的,权限需要配置在workflow全局级别或job级别,而非环境变量里。
修复示例(全局配置权限):
name: Release on: push: tags: - 'v*' # 全局配置Release操作所需权限 permissions: contents: write env: BUILD_TYPE: Release jobs: build-and-release: runs-on: windows-latest # 也可在此处配置job级别的权限 # permissions: # contents: write
2. 使用已废弃的Action
actions/create-release@v1是GitHub官方已废弃的Action,推荐使用softprops/action-gh-release@v1,它可同时完成Release创建与资产上传,简化配置流程。
3. 二进制文件路径可能错误
你指定的上传路径是${{github.workspace}}\.bin\${{env.BUILD_TYPE}}\ccecho.exe,但CMake默认在Windows环境下执行构建后,二进制文件会生成在build/${BUILD_TYPE}目录下(如build/Release/ccecho.exe),若未在CMakeLists.txt中自定义输出路径,需修正路径:
file: ${{github.workspace}}/build/${{env.BUILD_TYPE}}/ccecho.exe
4. 资产名称包含无效字符
${{github.ref}}的返回值格式为refs/tags/vx.x.x,直接用于asset_name会导致文件名包含斜杠(/),属于非法字符。应改用${{github.ref_name}},它仅返回纯标签名(如v1.0.0):
asset_name: ccecho-${{github.ref_name}}.exe
修复后的完整工作流示例
name: Release on: push: tags: - 'v*' permissions: contents: write env: BUILD_TYPE: Release jobs: build-and-release: runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Configure CMake run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - name: Build run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} # 新增验证步骤,确认二进制文件生成成功 - name: Verify binary exists run: | if (Test-Path "${{github.workspace}}/build/${{env.BUILD_TYPE}}/ccecho.exe") { Write-Host "Binary file found" } else { Write-Error "Binary file not found in expected path" exit 1 } - name: Create Release & Upload Asset uses: softprops/action-gh-release@v1 with: tag_name: ${{ github.ref_name }} name: Release ${{ github.ref_name }} body: | Release created by GitHub Actions for tag ${{ github.ref_name }}. draft: false prerelease: false files: ${{github.workspace}}/build/${{env.BUILD_TYPE}}/ccecho.exe
额外验证点
- 你已配置的仓库细粒度权限(
Contents: Read & write等)符合要求,无需调整。
内容的提问来源于stack exchange,提问作者srdg
相关产品推荐
相关产品推荐

