💡💡💡 Hackathon5
开赛在即,本次大赛会有上百个赛题等着大家攻克,但统计这些赛题的报名信息和当前进度是一项繁重的工作。
如果有一个小助手💡可以帮助我们自动统计和展示赛题进度,那自然是极好的,所以黑客松小助手
它来了!🎉🎉🎉
黑客松小助手
目前的主要功能如下,欢迎补充:
- 根据issue回复自动填写报名信息,完成任务认领。
- 根据提交的PR状态,自动更新issue中表单信息,完成状态变更。
- 汇总所有的赛题,形成总体任务看板。
- 统计参赛者完成赛题个数。
1、修改配置文件,其中每个配置的含义如下:
- access_token:账号token
- proxies:代理地址
- issue_url:黑客松 issue页面 url 地址, 注意结尾不要有斜杠
- repo_urls:监控的仓库列表
- task_num:总的任务数量
- start_time:黑客松开始时间,只会统计黑客松开始时间之后的PR(注意时间中的字母T和Z不能缺少)
- un_handle_tasks: 忽略不处理的题号,这部分留给人工处理
- removed_tasks:已删除的赛题
- type_names: 赛道名
- task_types:每个赛题所属的赛道,每个赛道是一个数组
- hackathon: 为True时代表黑客松任务。 为False时代表框架计划,此时 repo_urls 要设为 []
2、执行如下命令,代码会每两小时更新一次issue,每次更新后的issue内容会保存在logs
文件夹下;
cd HackathonBot
python bot.py
- issue 中任务表格的题号前后必须只能有一个空格,如
| 1 |
。 - issue 中必须有
看板信息
这几个字,并且表格后面接上#####
这个特殊标志。
示例
| 序号 | 难度 | 任务 ISSUE | 队伍名称/状态/PR | 完成队伍 |
| :--: | :--: |:--: | :--: |:--: |
| 1 | ⭐ | [新增星星任务](https://github.com/Tomoko-hjf/paddleviz/issues/1) | | |
| 2 | ⭐⭐ | [保护星星](https://github.com/Tomoko-hjf/paddleviz/issues/1) | | |
| 3 | ⭐⭐⭐ | [收集星星](https://github.com/Tomoko-hjf/paddleviz/issues/1) | | |
| 4 | ⭐⭐⭐⭐ | [飞桨之星](https://github.com/Tomoko-hjf/paddleviz/issues/1) | | |
## 看板信息
#####
在比赛期间,我们为参加比赛的大佬们设置了六种状态
(如下),整体状态的变更顺序为:报名状态
-> 提交RFC
-> 完成设计文档
-> 提交PR
-> 部分完成(仅针对需要多个PR的任务)
-> 完成任务
。
状态名称 | 状态标志 | 状态说明 |
---|---|---|
报名状态 | 表明通过issue评论区进行报名 | |
提交RFC状态 | 表明已经提交设计方案RFC | |
完成设计文档状态 | 表明已经完成设计文档 | |
提交PR状态 | 表明已经提交PR | |
部分完成状态 | 表明已经完成部分任务(仅针对需要多个PR的任务) | |
完成任务状态 | 表明已经完成任务 |
为了更好地展示赛题进度,我们设计了榜单。整体的榜单设计如下,比赛进行期间,小助手会自动更新Github ID/状态/PR
栏和完成队伍
栏信息。
Github ID/状态/PR
栏内容的格式为Github ID + 状态 + Pr
,其中PR
可以有多个,赛题参加人数
也可以有多个,以回车<br>
分隔。
考虑到报名赛题不会产生任何PR
,所以通过评论
来实现此功能,其他状态均可以通过监控PR
实现。
通过监控issue
下的评论完成报名信息监控,实现逻辑如下:
- 获取
issue
下评论。 - 从评论中抽取报名信息,比如
Github ID
、报名赛题编号
等信息。 - 更新
issue
中个人报名信息,将个人状态更新为报名状态
。
为了自动填写报名信息,需要在issue
下回复报名信息,如果报名格式不正确,则会在comment区提示报名不正确,格式如下:
【报名】: 2、3
其中
【报名】:
后直接是报名的赛题序号,多个赛题之间需要用
中文顿号、分隔,多个连续赛题可以用横线表示,如【报名】2-5、6、10
。
除报名状态
外,剩下五种状态
的变更可以通过监控PR
的状态来完成, 具体的实现逻辑如下:
- 获取指定仓库下黑客松
开始之后
标题中包含Hackathon No.
字样的所有PR
,具体是bot.py
文件的repo_urls
变量下的所有仓库。 - 如果
PR
是PaddlePaddle/community
仓库下的,说明该PR与设计文档有关。继续判断是否merge
,如果未merge
,说明状态为提交RFC
;如果已经merge
,说明状态为完成设计文档
。 - 如果
PR
不是PaddlePaddle/community
仓库下的,说明该PR
与提交代码有关。继续判断是否merge
,如果未merge
,说明状态为提交PR
;如果已经merge
,说明状态为完成任务
。 - 每次更新后的issue内容将会保存在
logs
文件夹下,文件名是更新日期。
对于人工处理的赛题,可以将赛题题号加入
utils.py
文件的un_handle_tasks
变量中,小助手不会处理这些任务。
为了完成状态变更,只需要在PR
的标题中以【Hackathon No.xxx】
开头即可,程序会自动提取赛题编号并更新榜单。
对于需要多个PR
的任务,如果不是该任务的最后一个PR
,需要在提交PR
的标题中使用-part
结尾,标志此PR
不是该任务最后一个PR
;每个任务最后一个PR
可以以-final
结尾,也可以不加任何后缀。为了显示更直观,建议加上。
一个PR也可以提交多个赛题,多个赛题间以顿号
或横线
分隔,比如No.24、26-28、30 赛题
。
如果PR格式不正确,也会在comment
区域进行提示。
看板功能会按照赛道类型统计每个赛道赛题的认领数、完成率等信息。
感谢 @AndSonder 提供看板样式的代码🍻。
整体的代码文件分为三个:
utils.py
:负责拉取评论和PR、根据评论更新状态、根据PR更新状态。bot.py
:小助手整体运行逻辑。config.py
:常用的配置项