Skip to content

Instantly share code, notes, and snippets.

@prakashpp
Created March 28, 2016 07:49
Show Gist options
  • Save prakashpp/02ee9bc08dad2321c2dd to your computer and use it in GitHub Desktop.
Save prakashpp/02ee9bc08dad2321c2dd to your computer and use it in GitHub Desktop.
Script to push github commit stats to slack
import os
from datetime import datetime
from slacker import Slacker
from dateutil.relativedelta import relativedelta
import requests
from requests.auth import HTTPBasicAuth
USERNAME = "prakashpp"
GITHUB_TOKEN = os.environ['GITHUB_ACCESS_TOKEN']
ICON_URL = "http://graph.facebook.com/v2.4/fulfil.io/picture"
SLACK_TOKEN = os.environ['SLACK_TOKEN']
IGNORED_REPOS = []
def get_number_of_commits_by_user(repo_names):
commit_by_user = {}
for repo in repo_names:
if repo in IGNORED_REPOS:
continue
resource_url = "https://api.github.com/repos/fulfilio/%s/commits" % (
repo,
)
while True:
commits = requests.get(
resource_url,
auth=HTTPBasicAuth(USERNAME, GITHUB_TOKEN),
params={
'since': (
datetime.utcnow() - relativedelta(day=1)
).isoformat()
}
)
for commit in commits.json():
if not commit['author']:
print commit
continue
user = commit['author']['login']
commit_by_user.setdefault(user, []).append((
repo, commit['commit']['message'], commit['html_url']
))
if commits.links.get('next'):
resource_url = commits.links['next']['url']
else:
break
return commit_by_user
def get_all_repo_names(org='fulfilio'):
repo_names = []
resource_url = "https://api.github.com/orgs/%s/repos" % (org, )
while True:
repos = requests.get(resource_url, auth=HTTPBasicAuth(USERNAME, GITHUB_TOKEN)) # noqa
for repo in repos.json():
if repo['fork']:
continue
repo_names.append(repo['name'])
if repos.links.get('next'):
resource_url = repos.links['next']['url']
else:
break
return repo_names
if __name__ == "__main__":
commits_by_user = get_number_of_commits_by_user(get_all_repo_names())
total_commits = 0
repos = set([])
slack_client = Slacker(SLACK_TOKEN)
for user, commits in commits_by_user.iteritems():
attachments = []
total_commits += len(commits)
for commit in commits:
repos.add(commit[0])
slack_client.chat.post_message(
'dev',
"*Engineering Last Day*",
username="Fulfil BOT",
icon_url=ICON_URL,
attachments=[
{
"title": "Total Number of Commits",
"text": "%s" % (total_commits),
"color": "#7CD197"
}, {
"title": "Repository Updated",
"text": " \n".join(repos),
"color": "#7CD197"
}
]
)
for user, commits in commits_by_user.iteritems():
attachments = []
for commit in commits:
attachments.append({
"title": commit[1],
"title_link": commit[2],
"text": "Repostiory: %s" % (commit[0]),
"color": "#7CD197"
})
slack_client.chat.post_message(
'dev',
"*Commits by %s : %s*" % (user, len(commits)),
username="Fulfil BOT",
icon_url=ICON_URL,
attachments=attachments
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment