Skip to content

Instantly share code, notes, and snippets.

@janv
Last active July 21, 2022 10:58
Show Gist options
  • Save janv/c2836143653d065575b34781c5b88369 to your computer and use it in GitHub Desktop.
Save janv/c2836143653d065575b34781c5b88369 to your computer and use it in GitHub Desktop.
function cleanupGithub() {
const githubThreads = GmailApp.getUserLabelByName('Github Notifications').getThreads();
githubThreads.forEach(thread => {
const messages = thread.getMessages();
let threadDone = false;
const threadOld = isOld(thread.getLastMessageDate())
for (let message of messages) {
if (isDeploymentMessage(message)) {
console.log(`Deployment message (trashing message) ${message.getSubject()} (${message.getThread().getPermalink()})`)
message.moveToTrash();
} else if (isAssignmentMessage(message)) {
console.log(`Assignment message (trashing message) ${message.getSubject()} (${message.getThread().getPermalink()})`)
message.moveToTrash();
} else if (isRunFailedMessage(message)) {
console.log(`Run failed message (trashing thread ) ${message.getSubject()} (${message.getThread().getPermalink()})`)
thread.moveToTrash();
break;
} else if (isMergeConfirmation(message)) {
console.log(`Merge confirmation (thread DONE) ${message.getSubject()} (${message.getThread().getPermalink()})`)
threadDone = true;
} else {
console.log(`Nothing to do for message ${message.getSubject()} (${message.getThread().getPermalink()})`)
}
}
if (threadDone && threadOld) {
console.log(`Delete Thread ${thread.getFirstMessageSubject()} (${thread.getPermalink()}) because done and old`)
thread.moveToTrash()
}
})
/**
* @param {GmailApp.GmailMessage} message
*/
function isDeploymentMessage(message) {
const body = message.getPlainBody()
return message.getFrom().match(/\[bot\]/) && body.match(/Deployments|Open deployed CreativeEditor SDK Guides/)
}
/**
* @param {GmailApp.GmailMessage} message
*/
function isAssignmentMessage(message) {
const body = message.getPlainBody()
return message.getFrom().match(/\[bot\]/) && body.match(/Assigned/)
}
/**
* @param {GmailApp.GmailMessage} message
*/
function isRunFailedMessage(message) {
return message.getSubject().match(/\] (PR r|R)un (failed|cancelled)/)
}
/**
* @param {GmailApp.GmailMessage} message
*/
function isMergeConfirmation(message) {
return message.getPlainBody().match(/Merged #\d+ into \D+./)
}
/**
* @param {Date} date
*/
function isOld(date) {
const now = new Date().valueOf()
const then = date.valueOf();
const twoDays = 2 * 24 * 60 * 60 * 1000
return (now - then) > twoDays;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment