我如何简化开源项目的工作流程


在本文中,我将告诉您我如何尝试参与某个大型开源项目的开发,我讨厌自己,然后使例行程序自动化并学会了享受生​​活。 详细信息-下切。


为什么还要这样做?


通常,出于多种原因,开发人员希望加入开源社区。 以下是其中的一些(可能不是全部):


  • 感谢有机会免费使用此程序和其他程序
  • 获得新的经验
  • 抽出简历

总是有机会学习新知识,吸收软件开发的最佳实践,这一直是我的主要兴趣所在,但是在此过程中,其他所有内容同样令人愉快。


好的,我在做生意,从哪里开始?


首先要做的是找到要处理的任务。 如果您需要根据工作需要修改一些库,那么您真是个幸运儿–启动任务,与所有者讨论并开始实施! 否则,您可以参考项目页面上未完成任务的列表,自己动手做一些事情。 找到合适的解决方案与其实现同样重要,而且在这里并不是那么简单。 即使您是一位经验丰富的工程师,也可能从更简单的任务开始,熟悉代码库,接受开发流程,然后再承担更大的功能。


如何为初学者找到任务?


不久前,github开始向初学者展示合适的任务。


您可以从问题页面标题中的公告中查看它们


这是我们的珍贵页面


有了这些“工具”,我的平常日子就开始像这样-我打开了要处理的项目列表(为方便起见,我用小星星标记了它们),转到了上面的部分,或者搜索了所需的搜索标签,同时进行了搜索在此特定项目中使用的那些。 不用说,大约40-60个存储库需要花费大量精力,并且很快让我感到无聊。 在此过程中,我变得烦躁,失去耐心并放弃了这东西。 在这些日子之一中,我意识到我可以使搜索过程自动化,并着手编写TOR。


要求条件


  • 任务必须打开
  • 任务未分配给任何人
  • 该任务应标明对社区的简单性和开放性。
  • 任务不应该太老

之后,我开始分析所使用标签的不同存储库。 原来,有很多不同的标签,其中某些标签是特定存储库/组织所独有的。 区分大小写,我整理了〜60个标签列表


解决方案开发


作为一种工具,我决定使用我已经很熟悉的Kotlin,并实现了以下算法:浏览所有标有星号的存储库,获取所有符合要求的任务,按更改日期排序,丢弃过旧的任务并显示它们。 结果列表按时间戳划分-今天,昨天,过去一周,一个月以及其他所有内容-有了它,定期使用该程序变得更加方便。 我决定在第一阶段,该应用程序将是控制台实用程序,因此输出仅输出到stdout。


我将结果包装在docker映像中,期望一个人比JRE更可能安装docker。 该实用程序不存储任何状态,因此每次启动都将执行整个算法,并且可以将用完的容器安全地从系统中删除。


该程序的工作方式如下:


图片


要求限制


调用第三方API是io密集型任务的经典示例,因此自然而然地决定将数据加载到多个流中。 通过反复试验,我达到了Github API的局限性。 首先,对于大量线程,在Github端进行了反滥用检查,默认情况下,我必须在10个线程处停止,并可以通过输入参数进行配置。


其次,请求数有限制-每小时的请求数不能超过5000。 有了这个限制,一切都变得更加复杂,因为当将多个标签传递给搜索查询时,Github在它们之间放置了一个逻辑“与”,并且,鉴于列表中标签的数量,它将几乎没有100%的概率找到任何东西。 面对对API的大量调用,我开始对项目中的所有标签提出额外的请求,将清单的交集和针对这些标签的逐项请求任务相提并论。 通过向每个存储库添加1个请求,我摆脱了针对存储库不存在的标签上的任务的50-55个额外请求(程序支持的标签越多,额外的请求就越多)。


但是,对于某些用户而言,这种优化可能还不够。 根据肤浅的评估,当前的解决方案允许您绕过1000个存储库(代码中也有严格的限制),期望每个存储库中平均有4个简单标签。 到目前为止,还没有人遇到过这样的限制,但是解决方案的想法是积压的。 这里的一切都很简单-存储状态,缓存响应(在特别困难的情况下)在后台缓慢地绕开。


如何找到存储库?


如果您还不是活跃的Github用户,或者您不使用stars功能,请参考以下提示,以找到合适的存储库:


  • 浏览您在项目中使用的技术,也许其中一些会在Github上介绍
  • 使用流行趋势部分
  • 使用真棒列表存储库来查找您感兴趣的主题。

发射


首先,您需要:


  • 在计算机上安装了docker
  • 写出一个API令牌,您可以在相应的Github设置页面上完成
  • 通过将其访问令牌传递给参数来启动容器

    docker pull igorperikov/mighty-watcher:latest docker run -e TOKEN={} --rm igorperikov/mighty-watcher:latest 

其他设置(按语言过滤,并行度,存储库黑名单)可在项目页面上找到。 链接到项目


如果您在项目中缺少某些标签-创建PR或写信给我,我会添加。

Source: https://habr.com/ru/post/zh-CN473208/


All Articles