关闭未合并PR时GitHub Workflow未触发,需删除指定前缀分支
修复未触发的PR关闭自动删分支Workflow
你的Workflow未触发,核心问题大概率是语法错误,再加上一些冗余配置,以下是问题分析和修复方案:
问题点拆解
- HTML转义字符导致语法错误:原配置中
if条件里的&&是HTML转义后的符号,实际YAML文件里必须直接写&&,否则GitHub会解析失败,直接跳过Workflow执行。 - 冗余条件判断:
on字段已经限定了触发事件为pull_request closed,所以job的if里不需要重复判断github.event_name和github.event.action,完全多余。 - 分支提取步骤冗余:在
pull_request事件上下文里,github.head_ref直接就是PR的源分支,不需要额外写脚本提取。
修复后的完整配置
name: Delete branch when PR not merged permissions: contents: write # 仅保留删除分支必需的权限,id-token无需设置 on: pull_request: types: [closed] jobs: delete-unmerged-branch: if: github.event.pull_request.merged == false runs-on: ubuntu-latest steps: - name: Delete branch with ID- prefix uses: dawidd6/action-delete-branch@v3 if: contains(github.head_ref, 'ID-') || contains(github.head_ref, 'id-') with: github_token: ${{ github.token }} branches: ${{ github.head_ref }}
额外注意事项
- 要删除的分支不能有分支保护规则(比如设置了禁止删除),否则Action执行会失败。
- 测试时必须关闭未合并的PR,合并后关闭的PR不会触发这个job。
- 确保仓库允许GitHub Actions修改分支权限,
contents: write权限已经满足删除分支的要求。
内容的提问来源于stack exchange,提问作者user26336051
相关产品推荐
相关产品推荐

