如何强制GitHub「Release标题」遵循指定格式规则
如何强制GitHub Release标题匹配指定格式并在无效时发送失败通知
要实现这个需求,必须借助GitHub Action——GitHub原生没有内置Release标题格式校验规则,需要通过自定义工作流来完成。以下是完整实现方案,覆盖正式版本、预发布版本和草稿的校验需求:
核心实现思路
通过监听Release相关事件触发工作流,用正则表达式校验标题格式;若格式不匹配,则在Release页面添加失败通知评论,并标记工作流为失败,让用户及时感知问题。
完整工作流示例
在仓库的.github/workflows/目录下创建release-title-validation.yml文件,内容如下:
name: 校验Release标题格式 on: release: types: [published, prereleased, created, edited] # 覆盖正式发布、预发布、草稿创建/编辑 jobs: validate-title: runs-on: ubuntu-latest permissions: issues: write # 允许在Release页面添加评论 contents: read steps: - name: 检查Release标题格式 uses: actions/github-script@v6 with: script: | # 自定义正则表达式,根据需求修改 # 示例规则:标题以v开头,后跟语义化版本号,支持预发布后缀(如v1.0.0-beta) const titleRegex = /^v\d+\.\d+\.\d+(-[a-zA-Z0-9]+)?$/; const releaseTitle = context.payload.release.name; if (!titleRegex.test(releaseTitle)) { # 在Release页面添加失败通知评论 await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.payload.release.id, body: `❌ Release标题格式无效!要求匹配示例:\`v1.0.0\` 或预发布版 \`v1.0.0-beta\`,当前标题:\`${releaseTitle}\`` }); # 抛出错误,标记工作流为失败 throw new Error(`Release标题不符合格式要求:${releaseTitle}`); }
关键细节说明
触发事件覆盖:
published:正式版本发布时触发prereleased:预发布版本发布时触发created:草稿创建时触发edited:草稿或已发布版本的标题被编辑时触发(可选添加,确保修改后重新校验)
正则自定义:
修改titleRegex变量即可适配你的格式要求,比如:- 要求标题为
Release vX.Y.Z:/^Release v\d+\.\d+\.\d+$/ - 要求包含项目代号:
/^PROJ-\d+ v\d+\.\d+\.\d+$/
- 要求标题为
失败通知方式:
示例中是在Release页面添加评论,你还可以扩展为:- 发送邮件通知:使用
actions/email-action组件 - Slack团队通知:使用
slackapi/slack-github-action组件
- 发送邮件通知:使用
权限配置:
必须添加permissions字段授予工作流写评论的权限,否则无法在Release页面添加通知。
注意事项
GitHub Action无法直接拦截Release的发布操作,但通过工作流失败标记+页面评论通知,能让用户快速发现格式问题并修改标题。如果需要更严格的管控,可以结合分支保护规则,确保只有符合格式的Release才能触发后续流程。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

