Linear的CTO给手下一个人派了个活儿,工单标题就五个字:CI成本太高。
顺带还加了一句,你顺便让它快点。这哥们打开一看,发现事情有点荒诞:AI写代码快得飞起,可每一行改动还是得老老实实排那条队,过CI。测试套件从年初到现在差不多翻了四倍,等待时间从六分钟压到五分多,单个测试占的机器时间砍了一半——听着挺猛,可你想想,四倍的量压下去,才换回不到一分钟,这仗打得多憋屈。
他们干的几件事其实都特朴素。把活儿从GitHub Actions挪到第三方跑得更快的机器上,同样的流水线,平均快了三成四,有的任务快一半。然后换编译器,TypeScript原生的那个,每周类型检查的中位时间直接掉七成三,瓶颈一下就挪走了。再往下是lint,以前有几十条自定义规则非得先建出整个类型图才能跑,内存吃得吓人,后来改成只看语法树,不碰类型信息,ESLint里那个类型检查器整个拆掉,API那部分的lint时间少了六成八。
我盯着这一段看了半天。真正卡住他们的不是哪台机器慢,是那条规矩——不管谁写的、写得多快,都得从同一个门里过一遍。
这让我想起《史记》里写禹的那几句。禹伤先人父鲧功之不成受诛,乃劳身焦思,居外十三年,过家门不敢入。左准绳,右规矩。我小时候读这段只当是夸他勤快,今天才看明白他在干嘛——他爹鲧治水为什么不成?堵。禹换了个思路,不堵了,改疏。可他手里始终攥着准绳和规矩,一寸都不敢松。快和稳这两样东西,从来就不是靠取消尺子换来的,是靠把尺子磨得更顺手。
Linear这帮人干的就是这个。他们没敢说CI可以不做,只是拼命让那条队排得短一点。
四倍的测试,一半的机器时间,快了一分钟。这数我是不太信的,总觉得哪里还藏着没说的账。