Spaces:
Running
Running
from github import Github | |
import os | |
import streamlit as st | |
import datetime | |
import plotly.figure_factory as ff | |
import plotly.graph_objects as go | |
import pandas as pd | |
import math | |
import copy | |
st.set_page_config(layout="wide") | |
name2repo = [("Training", "bigcode-project/Megatron-LM"), | |
("Dataset", "bigcode-project/bigcode-dataset"), | |
("Evaluation", "bigcode-project/bigcode-evaluation-harness"), | |
("Inference", "bigcode-project/bigcode-inference-benchmark"), | |
("Legal", "bigcode-project/admin") | |
] | |
name2num_milestones = dict() | |
g = Github(os.environ.get('github')) | |
df = list() | |
all_status = list() | |
for name, repo_name in name2repo: | |
repo = g.get_repo(repo_name) | |
num_milestones = 0 | |
for milestone in repo.get_milestones(): | |
num_milestones += 1 | |
desc = dict() | |
for line in milestone.description.split('\n'): | |
tmp = line.split(":") | |
if len(tmp) > 1: | |
desc[tmp[0].lower()] = tmp[1].lower().strip() | |
task_name = f"""<a href="https://www.github.com/{repo_name}/milestone/{milestone.number}", target="_black">{milestone.title}</a>""" | |
if desc['status'] not in all_status: | |
all_status.append(desc['status']) | |
df.append(dict(Task=task_name, | |
Start=desc['start date'], | |
Finish=milestone.due_on.strftime('%Y-%m-%d'), | |
Resource=desc['status'], | |
Description=desc['leader'])) | |
name2num_milestones[name] = num_milestones | |
colors = {'not started': 'rgb(217, 217, 217)', | |
'in progress': 'rgb(147, 196, 125)', | |
'high priority - on track': 'rgb(234, 153, 153)', | |
'high priority - help needed': 'rgb(255, 0, 0)', | |
'completed': 'rgb(56, 118, 29)'} | |
if len(all_status) == 0: | |
task_name = "None" | |
for key in colors.keys(): | |
if key not in all_status: | |
df.append(dict(Task=task_name, | |
Start='2023-04-02', | |
Finish='2023-04-02', | |
Resource=key)) | |
fig = ff.create_gantt(df, colors=colors, | |
index_col='Resource', | |
show_colorbar=True, | |
show_hover_fill=True, | |
group_tasks=True, | |
title="BigCode planning") | |
fig.update_xaxes(ticks= "outside", | |
ticklabelmode= "period", | |
tickformat="%b", | |
tickcolor= "black", | |
ticklen=10, | |
range=[datetime.datetime(2022, 12, 30), | |
datetime.datetime(2023, 4, 2)], | |
minor=dict( | |
ticklen=4, | |
dtick=7*24*60*60*1000, | |
tick0="2023-01-01", | |
griddash='dot', | |
gridcolor='white') | |
) | |
fig.update_layout(margin=go.layout.Margin(l=250)) | |
fig.layout.xaxis.rangeselector = None # remove range selector on top | |
fig.add_vline(x=datetime.datetime.now().strftime('%Y-%m-%d'), line_width=3, line_dash="dash", line_color="black") | |
fig.add_annotation({ | |
"x": datetime.datetime.now().strftime('%Y-%m-%d'), | |
"y": fig.layout.yaxis['range'][1], | |
"yshift": 10, | |
"text": "Today", | |
"align": "left", | |
"showarrow": False, | |
}) | |
for i, entry in enumerate(df[::-1]): | |
fig.add_annotation(x='2023-01-01', y=i, | |
text=entry['Description'], | |
showarrow=False, | |
align="left") | |
fig.add_hline(y=-0.5, line_width=1, line_color="grey") | |
height = -0.5 | |
for name, _ in name2repo[::-1]: | |
if name2num_milestones[name] > 0: | |
fig.add_annotation(x='2023-03-31', y=height + name2num_milestones[name]/2, | |
text=name, | |
showarrow=False, | |
align="center", | |
textangle=-90) | |
height += name2num_milestones[name] | |
fig.add_hline(y=height, line_width=1, line_color="grey") | |
st.plotly_chart(fig, use_container_width=True) |