如何仅在使用特定Issue模板创建Issue时触发GitHub Action?
仅在特定Issue模板触发GitHub Action的实现方法
你可以通过两种方式实现这个需求,具体如下:
方法一:通过Issue标题/正文的固定标识判断
GitHub Issue创建事件的payload里没有直接返回模板名称,但大多数Issue模板会在标题或正文中留下固定标识(比如模板自带的标题前缀、特定段落标题),你可以基于这些标识用if条件过滤。
比如你的bug.md模板创建的Issue标题默认包含「Bug 报告」,可以这样写Action的条件:
jobs: process-bug-issue: name: 处理Bug类型Issue if: contains(github.event.issue.title, 'Bug 报告') runs-on: ubuntu-latest steps: - run: | echo "处理编号为${{ github.event.issue.number }}的Bug Issue"
如果模板在正文开头有固定的标记(比如### 问题描述),也可以基于正文判断:
if: contains(github.event.issue.body, '### 问题描述')
这种方法的优点是简单直接,不需要额外API调用;缺点是依赖模板内容的固定性,如果模板后续修改了标识,需要同步更新Action的条件。
方法二:通过GitHub API获取模板名称
当用户使用模板创建Issue时,GitHub会在Issue的创建事件记录中保存模板名称,你可以通过GitHub API获取这个信息,再进行判断:
jobs: check-template-and-run: runs-on: ubuntu-latest steps: - name: 获取Issue使用的模板 id: get-template run: | # 调用API获取Issue的第一个事件(即创建事件),提取模板名称 TEMPLATE_NAME=$(gh api issues/${{ github.event.issue.number }}/events --jq '.[0].payload.template') echo "template=$TEMPLATE_NAME" >> $GITHUB_OUTPUT env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: 仅在bug.md模板触发时执行 if: steps.get-template.outputs.template == 'bug.md' run: | echo "该Issue使用bug.md模板创建,执行后续逻辑"
说明:
ubuntu-latest环境默认预装了GitHub CLI(gh),可以直接调用APIsecrets.GITHUB_TOKEN是GitHub自动提供的令牌,拥有当前仓库的Issue读取权限,无需额外配置- 这种方法更准确,不受模板内容修改的影响,但需要额外的API调用步骤
内容的提问来源于stack exchange,提问作者Cobra915
相关产品推荐
相关产品推荐

