将命令输出插入GitHub REST请求

时间:2017-10-07 02:26:35

标签: json bash curl github escaping

我正在尝试在运行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。

2 个答案:

答案 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