如何在GitHub Actions工作流中创建/更新含最新制品的发布草稿?
需求:在.NET项目GitHub Actions工作流末尾添加发布草稿并关联制品
我想在现有.NET项目的GitHub Actions工作流最后一步,实现创建简单的发布草稿(或更新最新的发布草稿),并包含已上传的最新制品。当前工作流文件如下:
name: .NET on: push: pull_request: jobs: build: runs-on: windows-latest name: "Build" steps: - uses: actions/checkout@master with: submodules: true - uses: actions/setup-dotnet@v1 with: dotnet-version: '8.0.x' # SDK Version to use; - name: Restore run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Publish run: dotnet publish '${{ runner.workspace }}/ERModsMerger/ERModsMerger/ERModsMerger.csproj' -p:PublishProfile=FolderProfile - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: 'ERModsMerger-SHA${{ github.sha }}' path: '${{ runner.workspace }}/ERModsMerger/ERModsMerger/bin/Publish'
解决方案:集成Release Drafter实现自动草稿发布+关联制品
1. 添加Release Drafter配置文件
在项目根目录创建.github/release-drafter.yml,用于定义发布草稿的格式、版本规则:
name-template: 'v$RESOLVED_VERSION' tag-template: 'v$RESOLVED_VERSION' release-template: | ## 变更内容 $CHANGES categories: - title: '新功能' labels: - 'feature' - title: 'Bug修复' labels: - 'bug' - title: '其他更新' labels: - 'documentation' - 'refactor' version-resolver: major: labels: - 'major' minor: labels: - 'minor' patch: labels: - 'patch' default: patch
你可以根据项目标签规则、发布需求调整上述配置。
2. 修改原工作流,集成Release Drafter
在原工作流中添加权限声明,并在上传制品步骤后加入Release Drafter及制品关联步骤:
name: .NET on: push: branches: [ main ] # 建议仅在推送到主分支时触发发布草稿 pull_request: permissions: contents: write # 授予创建/更新发布的权限 jobs: build: runs-on: windows-latest name: "Build" steps: - uses: actions/checkout@master with: submodules: true - uses: actions/setup-dotnet@v1 with: dotnet-version: '8.0.x' - name: Restore run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Publish run: dotnet publish '${{ runner.workspace }}/ERModsMerger/ERModsMerger/ERModsMerger.csproj' -p:PublishProfile=FolderProfile - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: 'ERModsMerger-SHA${{ github.sha }}' path: '${{ runner.workspace }}/ERModsMerger/ERModsMerger/bin/Publish' # 步骤1:创建/更新发布草稿 - name: Update release draft id: release-drafter uses: release-drafter/release-drafter@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 步骤2:下载已上传的制品 - name: Download artifacts uses: actions/download-artifact@v4 with: name: 'ERModsMerger-SHA${{ github.sha }}' path: ./publish-artifact # 步骤3:压缩制品(可选,根据需求调整格式) - name: Zip artifacts run: Compress-Archive -Path ./publish-artifact/* -DestinationPath ERModsMerger.zip shell: pwsh # 步骤4:将制品上传到发布草稿 - name: Upload asset to draft uses: softprops/action-gh-release@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: draft: true files: ERModsMerger.zip tag_name: ${{ steps.release-drafter.outputs.tag }} # 关联Release Drafter生成的标签
替代方案:直接用官方Action创建发布草稿
如果不需要Release Drafter的版本自动管理功能,也可以直接用GitHub官方Action实现:
在上传制品步骤后添加以下内容:
# 创建发布草稿 - name: Create Release Draft id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: draft-${{ github.sha }} # 用SHA作为草稿标签,可自定义 release_name: Draft Release - SHA${{ github.sha }} draft: true prerelease: false # 下载制品 - name: Download artifacts uses: actions/download-artifact@v4 with: name: 'ERModsMerger-SHA${{ github.sha }}' path: ./publish-artifact # 压缩制品 - name: Zip artifacts run: Compress-Archive -Path ./publish-artifact/* -DestinationPath ERModsMerger.zip shell: pwsh # 上传制品到草稿 - name: Upload Release Asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ steps.create_release.outputs.upload_url }} asset_path: ./ERModsMerger.zip asset_name: ERModsMerger.zip asset_content_type: application/zip
注意事项
- 必须声明
contents: write权限,否则工作流无法创建/修改发布。 - 建议限制触发分支(如仅
main分支),避免每次推送都生成草稿。 - 可根据需求调整制品压缩格式(如7z、tar.gz),对应修改压缩命令和
asset_content_type。
内容的提问来源于stack exchange,提问作者MadTek
相关产品推荐
相关产品推荐

