前言
十月除了是中秋節以外,還有另外一個盛大的節慶,那就是由 DigitalOcean 所主辦的 Hacktoberfest,這個活動的立意是希望大家能夠投入 open source 的社群,一起讓它變得更好,所以只要你在十月份送了 4 個 PR,就可以得到一件免費的 t-shirt。
這活動其實已經有一陣子了,至少我在四年前就已經參加過,也寫了篇文章稍微介紹一下這個活動:Hacktoberfest:一起踏入 open source 的世界吧!。
當時覺得這活動還滿不錯的,鼓勵新手加入 open source 的領域,讓大家知道其實要貢獻不是一件難事,修一點小 bug 或者是幫忙寫文件都是一種貢獻,不一定要寫 code 其實也可以,都是對 project 的一種幫助。
可是今年卻變了調。
怎麼個變法?我們看下去就知道。
Amazing project!
這是 PyCon TW 官網的 repo,然後底下這是 PR 的截圖:
一大堆被標註 invalid 的 PR,我們隨便找一個點進去看:
wow,真的 amazing!
今年的 Hacktoberfest,從 10/1 一開始就出現了一堆這種 spam 的 PR,到底有多少呢?多到你可以在 GitHub 上面搜尋 amazing project,然後就會被結果嚇到:
20000 多筆!接著我們一樣隨便點一個進去看,看看 PR 的內容是什麼:
有許多 GitHub 上面的開源專案都受到了祝福,被稱讚為是 amazing project,而那些貢獻者自己覺得 amazing 還不夠,一定要發一個 PR 幫你改 README,在文件上面加上 amazing project,讓全世界都知道才行。
除了這種 amazing project 式的 PR spam 攻擊之外,還有一些比較有創意的,例如說幫你加上跑馬燈:
或是幫你在 requirements.txt 裡面加空格:
又或者是貼心地幫你改 margin,好達到 pixel perfect:
各個開源專案的 maintainer 都被這一大堆的 spam PR 給惹火了,在 twitter 上面頻頻抱怨。還有人開了一個推特帳號叫做 shitoberfest,專門搜集這些低品質的 PR。
這個活動的立意良好,但是在今年卻變了調,有一些人因為想要拿免費的衣服不擇手段,以為發發幾個毫無意義的 PR 就可以收到獎品,而累的卻是 maintainer 們,要去 close 這些 PR 並且標註為 invalid 或是 spam。
可是這活動也不是第一次辦了,為什麼今年突然變這樣呢?
有些人把矛頭指向了這個影片:How to Earn Free T-Shirt, Swag & Goodies Online!:
說他在影片裡面教大家怎麼樣發 PR 來賺取免費 t-shirt,而我去找了影片中示範的 repo,確實有很多人在練習怎麼樣發 PR:https://github.com/xraymemory/micromtn/pulls
不過本人在影片的底下有出來做澄清,因為影片中講的是 hindi 所以可能很多人聽不懂,但他在影片中有強調你應該要送一個合格的 PR,做出合理的貢獻,他影片的目的只是教大家怎麼發 PR 然後示範給大家看整個流程,沒有要鼓勵大家 spam。
後續發展
活動的主辦方在台灣時間 10/1 晚上九點馬上發布了公告:Shared commitment to reducing spam with Hacktoberfest,文中有提到規則上面會做一些改動,例如說不想參與的專案可以寫信給他們,在那些專案發的 PR 就不會被列入計算。
對於那些濫竽充數的 PR,第一點是審核期會變長,第二點是如果你都發這種 PR,那可能會被 Hacktoberfest 永 ban,永遠不得參與這個活動。活動的 onboarding flow 也會強制參與者看完發 PR 的規則,確保大家知道只有真的有貢獻的 PR 才算數。
而 GitHub 也發了一則推特,告訴大家在 repo 的設定裡面有個選項可以設置,能夠針對不同的帳號做出限制,例如說最近才創的帳號沒辦法發 PR,或者是只有以前有貢獻過的帳號可以發 PR 之類的:
有了這些措施之後,希望這些 spam 的 PR 可以有效地減少。
結語
要拿 t-shirt 可以,但是請憑本事,那些獎品是給真的對開源社群有貢獻的人拿的,要修改文件可以,但是要修改的有意義,像是上面截圖那些,一看就知道只是為了發 PR 而發 PR。
我也有幫一些專案送過 PR,其實每次送的時候都戰戰兢兢的,深怕造成 maintainer 們的困擾。首先看 CONTRIBUTING.md 是一定要的,裡面有寫清楚想貢獻專案的步驟或是注意事項,接著就在 issue 裡面找到自己能力可以解掉的問題,然後在 local 把專案建起來,開始修 bug 或是加新功能,確認 ok 沒問題,測試也跑過之後才送 PR,然後在 PR 裡面詳細描述解法。
像是底下這兩個就是我前陣子幫 Insomnia 送的 PR:
第一個只是簡單修 UI 上的文字而已,第二個比較複雜一點,是把其中一個 UI 的顯示方式換掉。而且送 PR 的時候要有一個心理準備,就是你的 PR 可能不會即時被 review,這很正常。我上面送的那兩個是因為有公司在維護,所以 review 的速度出乎意料的快(覺得感人),但並不是每個專案都這樣。
像是我之前寫 styled components 那篇送的 PR,就等了兩個月才被 merge。
這是正常的,畢竟 maintainer 們也有自己的事情要忙。
總之呢,還是鼓勵大家去參與 Hacktoberfest 的活動,但請記住必須要真的有貢獻才算數,請確保自己送出的是有品質的 PR,而不是濫竽充數,只為了發 PR 而發 PR。