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

为何在GitHub GraphQL API中无法正确传递字符串参数?

解决GitHub Actions中传递GraphQL变量更新Project V2的问题

问题核心分析

你遇到的错误是两个问题叠加导致的:

  1. GraphQL变量类型不匹配:GitHub Project V2的singleSelectOptionId要求的是ID类型,但你定义的变量是String!,类型不匹配触发了API验证错误。
  2. Shell变量传递解析问题:未正确包裹变量,导致shell可能对变量值进行意外解析,破坏了原始的选项ID。

修正后的代码

- name: Update item status to Bugs
  env:
    GITHUB_TOKEN: ${{ secrets.PAT }}
    ITEM_ID: ${{ env.ITEM_ID }}
    STATUS_FIELD_ID: ${{ env.STATUS_FIELD_ID }}
    BUGS_OPTION_ID: ${{ env.BUGS_OPTION_ID }}
    PROJECT_ID: ${{ env.PROJECT_ID }}
  run: |
    gh api graphql -f query='
      mutation($projectId: ID!, $itemId: ID!, $fieldId: ID!, $bugsOptionId: ID!) {
        updateProjectV2ItemFieldValue(
          input: {
            projectId: $projectId,
            itemId: $itemId,
            fieldId: $fieldId,
            value: {singleSelectOptionId: $bugsOptionId}
          }
        ) {
          clientMutationId
        }
      }' -f itemId="$ITEM_ID" -f projectId="$PROJECT_ID" -f fieldId="$STATUS_FIELD_ID" -f bugsOptionId="$BUGS_OPTION_ID"

关键修改点

  • 修正变量类型:将$bugsOptionId: String!改为$bugsOptionId: ID!,完全匹配GitHub GraphQL API的类型要求。
  • 包裹变量值:所有-f参数的值都用双引号"$VAR_NAME"包裹,避免shell对变量中的特殊字符(如连字符、UUID格式字符)进行错误解析,确保变量完整传递到API。

额外验证步骤

如果仍有问题,可以在该步骤前添加调试步骤,确认所有环境变量的实际值是否正确:

- name: Debug environment variables
  run: |
    echo "ITEM_ID: $ITEM_ID"
    echo "PROJECT_ID: $PROJECT_ID"
    echo "STATUS_FIELD_ID: $STATUS_FIELD_ID"
    echo "BUGS_OPTION_ID: $BUGS_OPTION_ID"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:37:39