无法通过GitHub Release工作流上传二进制文件

编程语言 2026-07-12

我希望在每次推送标签时发布一个二进制文件。这是我的发布工作流:

name: Release

on:
  push:
    tags:
      - 'v*'

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: Create GitHub Release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        permissions:
        contents: write
      with:
        tag_name: ${{ github.ref_name }}
        release_name: Release ${{ github.ref_name }}
        body: |
          Release created by GitHub Actions for tag ${{ github.ref_name }}.
        draft: false
        prerelease: false

    - name: Upload binaries to release
      uses: svenstaro/upload-release-action@v2
      with:
        repo_token: ${{ secrets.GITHUB_TOKEN }}
        file: ${{github.workspace}}\.bin\${{env.BUILD_TYPE}}\ccecho.exe
        asset_name: ccecho-${{github.ref}}.exe
        tag: ${{ github.ref }}
        overwrite: true
        body: "Releasing echo server ${{github.ref}}"

我想把发布的二进制文件作为制品的一部分上传。我给该仓库设置的GitHub细粒度权限为 "Contents: Read & write"、"Workflows: Release & write"、"Secrets: Read & write"。

以下是 日志

解决方案

说明:我不使用 actions/create-releasesoftprops/actions-gh-release 是我使用的替代方案。

你对GitHub令牌的权限设置不正确。这个需要在工作流或作业级别完成:

name: Release

on:
  push:
    tags:
      - 'v*'

env:
  BUILD_TYPE: Release

jobs:
  build-and-release:
    runs-on: windows-latest

    # set your permission here
    permissions:
      contents: write

    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: Create GitHub Release
      id: create_release
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ github.ref_name }}
        release_name: Release ${{ github.ref_name }}
        body: |
          Release created by GitHub Actions for tag ${{ github.ref_name }}.
        draft: false
        prerelease: false

    - name: Upload binaries to release
      uses: svenstaro/upload-release-action@v2
      with:
        repo_token: ${{ secrets.GITHUB_TOKEN }}
        file: ${{github.workspace}}\.bin\${{env.BUILD_TYPE}}\ccecho.exe
        asset_name: ccecho-${{github.ref}}.exe
        tag: ${{ github.ref }}
        overwrite: true
        body: "Releasing echo server ${{github.ref}}"

在env中设置只创建了两个环境变量,permissions 为空,contents=write 对权限也没有任何作用。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章