2017-10-07 12 views
1

J'essaie de créer automatiquement un commentaire de demande d'extraction à chaque exécution de CI. La sortie d'une commande donnée est écrite dans un fichier (elle peut aussi simplement être stockée dans une variable d'environnement). Le problème est, je reçois habituellement la réponse suivante:Interpoler la sortie de la commande dans la requête GitHub REST

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" 
} 

Cela est généralement dû à des personnages unescpaed, comme \n, \t, " etc.

est-il un moyen facile d'y parvenir sur la ligne de commande ou dans bash, sh, avec jq ou Python? L'utilisation de la bibliothèque Octokit.rb fonctionne immédiatement, mais je ne veux pas installer Ruby dans l'environnement de construction.

Répondre

0

Vous pouvez utiliser jq pour créer votre objet JSON. Supposons que vous avez le contenu de votre commentaire dans la variable RESULT, la demande complète serait:

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" 
0

Le poste « Using curl POST with variables defined in bash script functions » propose plusieurs techniques pour faire passer un varialbe comme $ result dans un paramètre POST curl.

generate_post_data() 
{ 
    cat <<EOF 
{ 
    "body": "$RESULT" 
} 
EOF 
} 

Puis, à la suite "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