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

如何在Github Actions中基于文件内目标标题列表触发任务?

在GitHub Actions中实现从文件读取目标标题并匹配Issue标题的需求

可以实现这个需求,核心思路是通过一个前置任务读取存储目标标题的文件,判断Issue标题是否包含列表中任一关键词,将匹配结果作为输出传递给后续任务,后续任务根据该结果决定是否执行。以下是两种具体实现方式:

方法一:使用Python脚本实现

1. 准备目标标题文件

在项目根目录创建target-titles.csv文件,每行存放一个目标关键词(也可以用逗号分隔同一行,后续脚本对应修改处理逻辑):

Target Title1
Target Title2
Target Title3

2. 编写Python判断脚本

创建check_title.py脚本,读取目标列表并判断Issue标题是否匹配:

import os

def main():
    # 获取GitHub Actions传递的Issue标题
    issue_title = os.environ.get('ISSUE_TITLE', '')
    # 读取目标标题列表,过滤空行
    with open('target-titles.csv', 'r') as f:
        target_titles = [line.strip() for line in f if line.strip()]
    
    # 判断Issue标题是否包含任一目标关键词
    matches = any(target in issue_title for target in target_titles)
    # 输出GitHub Actions可识别的结果,供后续任务使用
    print(f"::set-output name=title_matched::{str(matches).lower()}")

if __name__ == "__main__":
    main()

3. 编写GitHub Actions工作流

创建.github/workflows/issue-trigger-job.yml文件:

name: Trigger Job on Matched Issue Title

on:
  issues:
    types: [opened]

jobs:
  # 前置任务:检查Issue标题是否匹配
  check-title:
    runs-on: ubuntu-latest
    # 定义输出结果,供后续任务调用
    outputs:
      title_matched: ${{ steps.check.outputs.title_matched }}
    steps:
      - name: 拉取代码仓库
        uses: actions/checkout@v4
      
      - name: 配置Python环境
        uses: actions/setup-python@v5
        with:
          python-version: '3.x'
      
      - name: 检查标题匹配情况
        id: check
        env:
          # 将当前Issue的标题传入环境变量
          ISSUE_TITLE: ${{ github.event.issue.title }}
        run: python check_title.py

  # 目标任务:仅当标题匹配时运行
  my_job:
    name: My Target Job
    runs-on: ubuntu-latest
    # 依赖前置任务的结果
    needs: check-title
    # 根据前置任务的输出判断是否执行
    if: needs.check-title.outputs.title_matched == 'true'
    steps:
      - name: 执行自定义任务
        run: echo "任务已启动:Issue标题匹配到目标关键词!"

方法二:使用Shell脚本实现(无需Python环境)

1. 准备目标标题文件

同样创建target-titles.txt文件,每行一个目标关键词:

Target Title1
Target Title2
Target Title3

2. 编写Shell判断脚本

创建check_title.sh脚本:

#!/bin/bash

# 接收传入的Issue标题参数
ISSUE_TITLE="$1"
MATCHED="false"

# 逐行读取目标关键词并匹配
while read -r TARGET; do
  if [[ -n "$TARGET" && "$ISSUE_TITLE" == *"$TARGET"* ]]; then
    MATCHED="true"
    break
  fi
done < target-titles.txt

# 输出匹配结果
echo "::set-output name=title_matched::$MATCHED"

3. 编写GitHub Actions工作流

创建.github/workflows/issue-trigger-job-shell.yml文件:

name: Trigger Job on Matched Issue Title (Shell)

on:
  issues:
    types: [opened]

jobs:
  check-title:
    runs-on: ubuntu-latest
    outputs:
      title_matched: ${{ steps.check.outputs.title_matched }}
    steps:
      - name: 拉取代码仓库
        uses: actions/checkout@v4
      
      - name: 赋予脚本执行权限
        run: chmod +x check_title.sh
      
      - name: 检查标题匹配情况
        id: check
        run: ./check_title.sh "${{ github.event.issue.title }}"

  my_job:
    name: My Target Job
    runs-on: ubuntu-latest
    needs: check-title
    if: needs.check-title.outputs.title_matched == 'true'
    steps:
      - name: 执行自定义任务
        run: echo "任务已启动:Issue标题匹配到目标关键词!"

关键说明

  • 两种方式都通过前置任务完成匹配判断,将结果通过GitHub Actions的输出机制传递给目标任务,避免了冗长的contains串联写法。
  • 目标关键词列表只需维护对应的文件即可,无需修改工作流代码,可读性和可维护性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:03:17