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

GitHub Release发布后自动转草稿,如何正确触发Rust发布脚本?

问题描述

我在GitHub项目中通过GitHub Action在Release时发布Rust crate。创建并“发布”新Release后,Release会先保持published状态数秒,随后自动变为draft状态。CI执行正常且已正确完成发布,但Release始终处于draft状态。再次点击“发布”会重新触发相同的Action,导致执行失败(因为同一版本无法两次推送到crates.io)。当前Workflow触发配置如下:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  release:
    types: [ published ]
  workflow_dispatch:

请问是否存在正确的方式,能在Release创建时运行发布脚本?

解决方案

调整Workflow触发事件

核心问题是published触发会和Release状态回退的行为冲突,导致重复触发。推荐改用created事件:

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  release:
    types: [ created ]  # 替换原published为created
  workflow_dispatch:

created会在Release首次创建时触发一次,不管初始是草稿还是已发布状态,彻底避免后续状态变更重复触发Workflow。

增加版本校验避免发布失败

即使误触发,也可以在发布步骤前先检查crates.io上是否已有对应版本,跳过重复发布:

# 在cargo publish前添加校验逻辑
if cargo search sqlite-compressions | grep -q "^sqlite-compressions = \"${{ github.event.release.tag_name }}\""; then
  echo "该版本已在crates.io存在,跳过发布"
  exit 0
fi
cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}

优化Release流程(可选)

如果需要更严谨的流程,可以先创建草稿Release,待CI验证通过后再自动发布Release:

- name: 完成Release发布
  uses: eregon/publish-release@v1
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  with:
    release_id: ${{ github.event.release.id }}
    draft: false

这个步骤会将草稿状态的Release自动转为已发布,无需手动操作。


内容的提问来源于stack exchange,提问作者Yuri Astrakhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:51:03