solovyov.net

webhooker

· · go, programming, github

Когда ты хостишь репозитории сам, то можешь сделать какие угодно хуки и по push’у в свой репозиторий делать что угодно - например, рендерить свой сайт. Но когда ты перемещаешь эти репозитории на GitHub, приходится пушить изменения и туда, и себе на сервер, чтоб они там отрендерились. Хостить сайт на гитхабе мне не хочется, да и это, опять же, лишняя работа - надо будет рендерить его в ветке gh-pages, никакого фана.

В какой-то момент мне надоело (на эту фразу уже можно прямо макрос себе завести, “сделать новый пост с ‘мне надоело’” :)), и я написал вебшлюху - такую маленькую, на 250 строк, программу на Go, которая слушает себе определëнный порт, и когда ей приходит вебхук от гитхаба, исполняет заданную команду. Написал я еë потому, что в инете такой не нашëл (нашëл нерабочую на питоне с кошмарным кодом) - что довольно странно.

Работает она просто:

webhooker -p 1234 piranha/webhooker:master='echo new stuff arrived!'

Всë, что до = - это регулярное выражение, которое применяется к строке user/repo:branch пришедшего вебхука, а после = - команда, которую нужно выполнить. Таких правил можно указать сколько угодно, а когда их задолбает писать аргументами - можно перенести в любой файл (по одному правилу на строку) и использовать его как webhooker -c path/to/rules.

Работает безукоризненно, память не пожирает почëм зря (в рабочем состоянии после месяца работы - 2 Мб RSS), что еще надо? :-) Enjoy!