Created
June 19, 2012 07:34
-
-
Save mashihua/2952814 to your computer and use it in GitHub Desktop.
Git commit hook for trello.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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?