mrimann /
根据团队内Git提交自动选举“每月最佳程序员”的工具。
Requires
- typo3/flow: 2.0.*
- typo3/swiftmailer: 4.1.*
README
这最初是一个有趣的工程——现在仍然如此:有一天我们在internezzo讨论了如何为员工颁发奖项,比如“本月最佳提交者”(因此得名“CoMo”)。
CoMo会从Git仓库中获取提交的元数据,将其存储在数据库中,进行汇总,并为每个人生成一些统计数据(这部分和一些趋势功能将很快添加)。
主界面看起来是这样的
这些统计数据可以集成到办公室的辐射屏中,以公开宣传最活跃的员工。为了显示不同工具的输出并“翻页”,我们还额外构建了一个名为“radiate”的小型包装器。
但它更进一步:有一个命令控制器,可以每天运行一次,例如,从远程服务器通过Gitweb前端获取所有仓库的列表。这使得我们检测新添加的仓库变得非常容易,因为CoMo会自动检测到新添加的仓库。
关于仓库:远程仓库将首次克隆,然后仅从本地克隆中拉取更改以节省带宽和处理时间。对于位于本地(URL以file://
开头)的仓库,不会进行克隆,其日志将直接从原始仓库位置读取。
这有意义吗?
嗯,基本上,一个人可以创建大量的小提交,然后他将成为每月的赢家。这是真的,当然也是一个事实。CoMo实际上更多关于乐趣。但是如果你和你的团队在提交到主分支之前运行代码审查系统(例如Gerrit),那么“合并到主分支”的更改数量当然就更有意义(你将直接看到那些试图用小提交作弊的黑羊)
功能列表
- 自动从Gitweb前端获取仓库列表(例如,每天运行一次以检测新仓库)
- 提取每个仓库的提交元数据
- 仅提取最新的n天以节省资源(可配置)
- 仅提取尚未提取的内容(例如,自上次提取运行以来新的提交)
- 汇总提取的数据
- 根据汇总数据自动选出赢家
- 在选出新的奖项时向仪式主持人发送通知电子邮件(这样他就可以将实体奖项交给获奖者)
- 一切都可以通过cron作业自动化
- cron作业以可以定期触发且在无任务时退出的方式进行构建
- 它们有一个“安静”标志
- 显示多个大屏幕优化视图
- 上个月的获奖者
- 如果提交者的电子邮件地址有Gravatar图像,则会显示该图像——如果没有肖像,则显示备用的像素图像
配置选项
-
maxDaysToFetchFromGitLogHistory: 100
定义我们在git日志中要提取提交多远的历史(以避免提取和汇总例如10年的提交数据,然后只为最后一个月左右选出奖项)。
-
cacheBasePath: %FLOW_PATH_DATA%Temporary/
设置用于在数据提取之前本地克隆远程仓库的基本目录。
-
whoGetsCredits: author
定义了谁将获得积分,默认为作者,通常是创建变更的人,通常也是提交变更的人。整个设置都可以配置,以便在您想将积分授予提交者的情况下使用。
允许的值:“author”和“committer”
自v1.2.0版本起
-
sendNotificationMailsForCoderOfTheMonth: FALSE
是否在新选出的每月程序员选举后向仪式主持人发送邮件
-
sendNotificationMailsForTopicAwardWinner: FALSE
是否在新选出的主题奖项获得者选举后向仪式主持人发送邮件
-
ceremonyMasterEmail: mario+como@rimann.org
仪式主持人的电子邮件地址(在选出新奖项时接收通知)
-
senderEmail: como@example.org
发送者电子邮件地址
-
senderName: CoMo
邮件的发送者姓名
设置方法
当然,为了使系统正常运行,您需要有一个TYPO3 Flow设置,并将此软件包安装到其中(它位于packagist上,名称为mrimann/como。然后您需要在命令行上执行以下命令 - 或者更好的方法是使用crontab运行它们,让系统自行工作
添加新的存储库
要监控的存储库列表保存在数据库中。如果您运行一个托管您的Git存储库的服务器并且安装了Gitweb前端,那么CoMo实际上可以获取所有存储库的列表,例如每天一次自动添加新的存储库,以便它们也能得到监控。
./flow help repodetectorgitweb:fetchrepos
这将显示如何使用此命令的所有选项。
处理数据
有两个命令处理整个数据处理任务。只需执行以下两个命令即可处理数据
./flow metadataextractor:processrepositories
./flow dataaggregator:processcommits
选举每月程序员
基于现在处理过的(聚合)数据,如果执行以下命令,CoMo可以现在选举每月程序员
./flow election:electlastmonth
这将选举上个月的程序员(因为本月尚未结束,所以还不能选举)。
如何贡献?
如果您发现有问题或想提出新功能,请随时提交新问题。如果您想贡献时间和提交代码更改,我非常期待查看您的拉取请求!
如果您想与我讨论新功能,请直接给我发邮件。
想让我高兴吗?
这里有一份让我高兴的事情清单,这会让我继续做类似的事情:)
许可协议
根据宽松的MIT许可证许可 - 享受它吧!