Skip to content

Instantly share code, notes, and snippets.

@mashihua
Created June 19, 2012 07:34
Show Gist options
  • Star 17 You must be signed in to star a gist
  • Fork 9 You must be signed in to fork a gist
  • Save mashihua/2952814 to your computer and use it in GitHub Desktop.
Save mashihua/2952814 to your computer and use it in GitHub Desktop.
Git commit hook for trello.com
#!/usr/bin/env node
//please requist your app token from
//https://trello.com/1/connect?key=yourkey&name=git-hook&expiration=never&response_type=token&scope=read,write
var key = "your key";
var token = "your token";
//https://trello.com/board/-/4e9003324a517dad44465056
var board_id = "4e9003324a517dad44465056";
var Trello = require("node-trello");
var t = new Trello(key, token);
var spawn = require('child_process').spawn;
var git = spawn('git', ['log' , '-1' , 'HEAD']);
var data = "";
git.stdout.on('data',function(d){
data += d;
});
git.on('exit', function(){
var m = data.match(/(card|close|archive|fix)e?s? \D?([0-9]+)\s+:?\s+(.+)/i);
if(m){
var commit = data.match(/commit\s+(.+)/i)[1];
var author = data.match(/author:\s+([^<]+)/i)[1];
var date = data.match(/date:\s+(.+)/i)[1];
var msg = m[3];
//get card
get_card(board_id, m[2],function(err, data){
if(err) wran("[ERROR] Cannot find card matching ID " + m[2]);
else{
if(m[1].toLowerCase() === 'close'){
update_card(data['id'], {closed:true}, function(err, data){
if(err) throw err;
if(data.closed){
info('Congratulation! Close card:' + m[2] + "\n" + data.name);
}else{
warn('Close does not worked correct.');
}
});
}
if(/^fix/i.exec(m[1])){
var text = 'Commit by : '+ author + '\nDate : ' + date + '\nCommit : '+ commit + '\nMessage : ' + msg
add_comment(data['id'], text, function (err,data){
if(err) throw err;
else info('Submit message for ' + m[2] + " : \n" + data.data.text);
});
}
}
});
}else{
warn('Do you work for production?');
}
});
var partition = "***************************************************************************";
function info(msg){
console.log(partition);
console.log(meg);
console.log(partition);
}
function warn(msg){
console.warn(partition);
console.warn(meg);
console.warn(partition);
}
function logfun(err, data){
if(err) throw err;
console.log(data);
}
function get_card(board_id, card_id, fun){
fun = fun || logfun;
t.get("/1/boards/"+ board_id +"/cards/"+card_id, fun);
}
function update_card(card_id, params, fun){
fun = fun || logfun;
t.put("/1/cards/"+card_id, params, fun);
}
function add_comment(card_id, comment, fun ){
fun = fun || logfun;
t.post("/1/card/"+card_id+ "/actions/comments", {text: comment}, fun);
}
function get_cards(list_id, fun){
fun = fun || logfun;
t.get("/1/lists/"+list_id+"/cards", {fields: "idList,closed,name"}, fun)
}
@goldan
Copy link

goldan commented Oct 14, 2015

@mashihua, thank you for the script and @geraldvillorente for installation instructions!
Could you please give instruction how to use it?
The regexp seems to expect the card ID as an integer number. But currently trello cards have alphanumeric IDs (e.g. https://trello.com/c/rYgiTbGG/).

@goldan
Copy link

goldan commented Oct 28, 2015

The script works great, thank you!
But quite often the data is empty string (though the commit message is not empty). If I try to commit & undo several times, finally it works. Has this happened to anybody?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment