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

如何在非经典GitHub项目中通过卡片移动触发Action关闭Issue?

临时解决方案:基于Project V2事件实现自动关闭Issue

针对GitHub非经典项目无法使用project_card触发器的问题,你可以改用project_v2_item事件来实现「Issue移至Done列自动关闭」的需求,具体操作如下:

  • 创建Workflow配置文件:在仓库的.github/workflows/目录下新建close-issue-on-done.yml文件
  • 配置触发器:监听project_v2_item的edited事件(Issue在项目列间移动时会触发该事件)
  • 添加检测与关闭逻辑:通过脚本获取项目项关联的Issue及当前所在列,判断是否为「Done」列后执行关闭操作

以下是完整的Workflow示例:

name: Close Issue when moved to Done
on:
  project_v2_item:
    types: [edited]

jobs:
  close-issue:
    runs-on: ubuntu-latest
    steps:
      - name: Check if item is in Done column
        id: check-status
        uses: actions/github-script@v7
        with:
          script: |
            // 获取项目项详情
            const item = await github.rest.projects.getProjectV2Item({
              project_id: context.payload.project_v2_item.project_id,
              item_id: context.payload.project_v2_item.id
            });

            // 过滤非Issue类型的项目项
            if (item.data.content_type !== 'Issue') {
              console.log('Not an Issue, skip');
              return;
            }

            // 找到状态字段(替换成你项目中状态字段的名称,比如"Status")
            const statusField = item.data.field_values.nodes.find(f => f.name === 'Status');
            if (!statusField) {
              console.log('No status field found, skip');
              return;
            }

            // 替换为你Done列的选项ID
            const doneOptionId = 'YOUR_DONE_OPTION_ID';
            if (statusField.value.id !== doneOptionId) {
              console.log('Not in Done column, skip');
              return;
            }

            // 返回Issue编号供后续步骤使用
            return item.data.content.number;

      - name: Close the Issue
        if: steps.check-status.outputs.result != ''
        uses: actions/github-script@v7
        with:
          script: |
            await github.rest.issues.update({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: ${{ steps.check-status.outputs.result }},
              state: 'closed'
            });
  • 获取Done列的选项ID:用GitHub CLI执行gh project field-value list --project 你的项目编号 --field "状态"(替换成你项目的实际编号和状态字段名),在输出结果中找到「Done」对应的ID,替换到示例中的doneOptionId
  • 权限配置:进入仓库「Settings」→「Actions」→「General」,将「Workflow permissions」设置为「Read and write permissions」,确保Workflow有权限修改Issue状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:25:11