You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 16:30:05