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

如何通过名称获取GitHub Project V2的项目项ID

解决GitHub Project V2通过名称获取项目项ID的问题

核心问题分析

  • GraphQL查询结构错误:GitHub Project V2的API字段与经典版完全不同,原代码使用的repository.project是经典项目字段,且V2不存在itemByName方法,需通过项目项搜索匹配名称。
  • 步骤输出引用错误:同一Job内的步骤引用输出应使用steps.步骤ID.outputs.输出名,而非needs(needs用于跨Job依赖)。
  • 权限不足:默认GITHUB_TOKEN无Project V2访问权限,需显式配置权限。

修正后的工作流代码

name: Get Card ID on Issue Close

on:
  issues:
    types:
      - closed

permissions:
  contents: read
  project: read  # 必须添加该权限才能访问Project V2

jobs:
  getCardId:
    runs-on: ubuntu-latest

    steps:
      - name: Fetch Card ID
        id: fetchCardId
        run: |
          # Project V2需用projectV2字段,通过items搜索匹配名称
          QUERY='query {
            repository(owner: "owner-name", name: "repo-name") {
              projectV2(number: 2) {
                items(query: "name:\"Play music through the AUX jack\"", first: 1) {
                  nodes {
                    id
                  }
                }
              }
            }
          }'
          # 构造标准JSON请求体
          PAYLOAD=$(jq -n --arg query "$QUERY" '{query: $query}')
          # 发送请求并提取第一个匹配项的ID
          ITEM_ID=$(curl -s -H "Authorization: bearer ${{ secrets.GITHUB_TOKEN }}" \
            -H "Content-Type: application/json" \
            -X POST -d "$PAYLOAD" https://api.github.com/graphql | \
            jq -r '.data.repository.projectV2.items.nodes[0].id')
          # 设置输出变量(推荐用GITHUB_OUTPUT替代旧命令)
          echo "item_id=$ITEM_ID" >> "$GITHUB_OUTPUT"

      - name: Print Card Name and ID
        run: |
          CARD_NAME="Play music through the AUX jack"
          CARD_ID="${{ steps.fetchCardId.outputs.item_id }}"
          echo "Card name: $CARD_NAME --> ID: $CARD_ID"

关键修正点说明

  • GraphQL查询调整:用projectV2替代project,通过items(query: "...")搜索项目项,query参数支持用双引号包裹名称实现精确匹配,first:1仅返回首个匹配结果。
  • 请求体优化:用jq构造标准JSON请求体,避免原代码可能出现的格式错误。
  • 输出方式更新:使用GitHub Actions官方推荐的GITHUB_OUTPUT设置输出,替代已弃用的::set-output命令。
  • 权限配置:在工作流顶部添加permissions字段,授予project: read权限,确保GITHUB_TOKEN能访问Project V2数据。
  • 输出引用修正:将needs.fetchCardId.outputs.item_id改为steps.fetchCardId.outputs.item_id,适配同一Job内的步骤引用规则。

额外注意事项

  • 若为组织级Project V2,需调整查询结构:
    query {
      organization(login: "org-name") {
        projectV2(number: 2) {
          items(query: "name:\"你的项目项名称\"", first: 1) {
            nodes {
              id
            }
          }
        }
      }
    }
    
  • 项目项名称需完全匹配,搜索区分大小写;如需模糊匹配可去掉名称外的双引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:02:09