为何在GitHub GraphQL API中无法正确传递字符串参数?
解决GitHub Actions中传递GraphQL变量更新Project V2的问题
问题核心分析
你遇到的错误是两个问题叠加导致的:
- GraphQL变量类型不匹配:GitHub Project V2的
singleSelectOptionId要求的是ID类型,但你定义的变量是String!,类型不匹配触发了API验证错误。 - 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
相关产品推荐
相关产品推荐

