Skip to content

Instantly share code, notes, and snippets.

@mrpoptart
Last active April 30, 2024 17:39
Show Gist options
  • Save mrpoptart/174e065f3a231b3a418c237c389ddd60 to your computer and use it in GitHub Desktop.
Save mrpoptart/174e065f3a231b3a418c237c389ddd60 to your computer and use it in GitHub Desktop.
A node script using the gh cli to pull a list of PRs since a date.
#!/usr/bin/env node
const util = require('util');
const exec = util.promisify(require('child_process').exec);
printTable([
'your_usernames_here',
], '2023-10-01').catch(console.error)
async function printTable(users, prDate) {
const metrics = {};
const promises = []
for (const userName of users) {
metrics[userName] = {}
promises.push(getMetric('author', prDate, userName, 'hawaiian-ice').then(result=>metrics[userName].hiCommits = result));
promises.push(getMetric('author', prDate, userName, 'zenpayroll').then(result=>metrics[userName].zpCommits = result));
promises.push(getMetric('commenter', prDate, userName, 'hawaiian-ice').then(result=>metrics[userName].hiReviews = result));
promises.push(getMetric('commenter', prDate, userName, 'zenpayroll').then(result=>metrics[userName].zpReviews = result));
}
await Promise.all(promises)
for(const userName in metrics) {
metrics[userName].totalCommits =metrics[userName].hiCommits + metrics[userName].zpCommits
metrics[userName].totalReviews =metrics[userName].hiReviews + metrics[userName].zpReviews
}
console.table(metrics, [
'totalCommits',
'totalReviews',
'hiCommits',
'hiReviews',
'zpCommits',
'zpReviews',
])
}
/**
*
* @param {'author'|'commenter'} metric
* @param prDate
* @param userName
* @param repo
* @returns {Promise<number>}
*/
async function getMetric(metric, prDate, userName, repo) {
let result = await exec(`cd ~/workspace/${repo} && gh pr list -S "is:pr merged:>${prDate} ${metric}:${userName}" --json "title" -L 50000 | jq 'length'`)
return parseInt(result.stdout.toString().trim());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment