Skip to content

Latest commit

 

History

History

HackathonBot

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

黑客松小助手RFC

📄 背景

💡💡💡 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栏和完成队伍栏信息。

image-20230729121046527

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变量下的所有仓库。
  • 如果PRPaddlePaddle/community仓库下的,说明该PR与设计文档有关。继续判断是否merge,如果未merge,说明状态为提交RFC;如果已经merge,说明状态为完成设计文档
  • 如果PR不是PaddlePaddle/community仓库下的,说明该PR与提交代码有关。继续判断是否merge,如果未merge,说明状态为提交PR;如果已经merge,说明状态为完成任务
  • 每次更新后的issue内容将会保存在logs文件夹下,文件名是更新日期。

对于人工处理的赛题,可以将赛题题号加入utils.py文件的un_handle_tasks变量中,小助手不会处理这些任务。

PR格式

为了完成状态变更,只需要在PR的标题中以【Hackathon No.xxx】开头即可,程序会自动提取赛题编号并更新榜单。

对于需要多个PR的任务,如果不是该任务的最后一个PR,需要在提交PR的标题中使用-part结尾,标志此PR不是该任务最后一个PR;每个任务最后一个PR可以以-final结尾,也可以不加任何后缀。为了显示更直观,建议加上。

一个PR也可以提交多个赛题,多个赛题间以顿号横线分隔,比如No.24、26-28、30 赛题

如果PR格式不正确,也会在comment区域进行提示。

🚀 看板功能

看板功能会按照赛道类型统计每个赛道赛题的认领数、完成率等信息。 img

感谢 @AndSonder 提供看板样式的代码🍻。

🔥 代码结构

整体的代码文件分为三个:

  • utils.py:负责拉取评论和PR、根据评论更新状态、根据PR更新状态。
  • bot.py:小助手整体运行逻辑。
  • config.py:常用的配置项