Github admite ganchos post-recepción para la notificación de cambios de código, documentados aquí . Ahora, para probar un server hook necesito publicar un poco de json y me gustaría usar curl para hacerlo. Ya he hecho esto antes, pero es tan infrecuente que tiendo a olvidar mi solución.
Según recuerdo, ha sido tedioso cada vez.
La gente de Github proporciona este documento JSON como un ejemplo de los datos que se PUBLICARÁN en la payload
parámetro:
{ "before": "5aef35982fb2d34e9d9d4502f6ede1072793222d", "repository": { "url": "http://github.com/defunkt/github", "name": "github", "description": "You're lookin' at it.", "watchers": 5, "forks": 2, "private": 1, "owner": { "email": "chris@ozmm.org", "name": "defunkt" } }, "commits": [ { "id": "41a212ee83ca127e3c8cf465891ab7216a705f59", "url": "http://github.com/defunkt/github/commit/41a212ee83ca127e3c8cf465891ab7216a705f59", "author": { "email": "chris@ozmm.org", "name": "Chris Wanstrath" }, "message": "okay i give in", "timestamp": "2008-02-15T14:57:17-08:00", "added": ["filepath.rb"] }, { "id": "de8251ff97ee194a289832576287d6f8ad74e3d0", "url": "http://github.com/defunkt/github/commit/de8251ff97ee194a289832576287d6f8ad74e3d0", "author": { "email": "chris@ozmm.org", "name": "Chris Wanstrath" }, "message": "update pricing a tad", "timestamp": "2008-02-15T14:36:34-08:00" } ], "after": "de8251ff97ee194a289832576287d6f8ad74e3d0", "ref": "refs/heads/master" }
Guardando eso como /tmp/example.json
, pensé que
$ curl -XPOST -F "payload=@/tmp/example.json" http://localhost:3000/
habría sido la invocación correcta de curl, pero no estaba en lo cierto. El uso de mi proyecto de ejemplo engancha los resultados anteriores en:
127.0.0.1 - - [17/Nov/2011 22:20:51] "POST HTTP/1.1" 200 - 0.0295 {:filename=>"example.json", :type=>"application/octet-stream", :name=>"payload", :tempfile=>#<File:/tmp/RackMultipart20111117-11639-1ecu4i1>, :head=>"Content-Disposition: form-data; name=\"payload\"; filename=\"example.json\"\r\nContent-Type: application/octet-stream\r\n"}
que, dada la definición de la acción para ese punto final:
class HomeAction < Cramp::Action def start puts params[:payload] render 'thanks' finish end end
no es del todo esperado. Entonces, ¿cómo puedo usar la versión de línea de command de curl para publicar un poco de JSON como datos, en la payload
parameters?
Me las arreglé para hacer que esto funcione con lo siguiente:
:%s/\n//g
) curl --data-urlencode payload@json_data.txt [URL]
Parecía proporcionar resultados idénticos al publicar en Postbin a través de GitHub & Curl.