我正在尝试在运行CI时自动创建拉取请求注释。给定命令的输出被写入文件(也可以只存储在环境变量中)。问题是,我通常得到以下回应:
curl -XPOST -d "{'body':'$RESULT'}" https://api.github.com/repo/name/issues/number/comment
{
"message": "Problems parsing JSON",
"documentation_url": "https://developer.github.com/v3/issues/comments/#create-a-comment"
}
这通常是由于未加密码的字符,例如\n
,\t
,"
等。
有没有简单的方法可以在命令行或bash,sh,jq或Python中实现这一点?使用Octokit.rb
库可以立即使用,但我不想在构建环境中安装Ruby。
答案 0 :(得分:0)
您可以使用jq
来创建JSON对象。假设您在RESULT
变量中包含评论内容,则完整请求将为:
DATA=$(echo '{}' | jq --arg val "$RESULT" '.| {"body": $val}')
curl -s -H 'Content-Type: application/json' \
-H 'Authorization: token YOUR_TOKEN' \
-d "$DATA" \
"https://api.github.com/repos/:owner/:repo/issues/:number/comments"
答案 1 :(得分:0)
帖子“Using curl POST with variables defined in bash script functions”提出了多种技巧,可以在curl POST参数中传递类似$ RESULT的变量。
generate_post_data()
{
cat <<EOF
{
"body": "$RESULT"
}
EOF
}
然后,关注“A curl tutorial using GitHub's API ”:
curl -X POST \
-H "authToken: <yourToken" \
-H "Content-Type: application/json" \
--data "$(generate_post_data)" https://api.github.com/repo/name/issues/number/comment