前言
某知名200斤程序员在周末给我们分享了一条沸点:
顺便发出了如下的询问:
接着我顺着思路问了下具体的需求:
于是乎,我阅读了一下 GitHub 的 API 文档,发现要阻止白嫖怪,是可以有门道的。我们可以让白嫖怪在没有 star 或者 fork 的时候,开启的 issue 被自动关闭并锁定,美汁儿汁儿。
说干就干,拒绝白嫖怪,从我做起。
(已开源在 fluttercandies/no-free-usage-action 并发布在 Actions 市场:No Free Usage Action)
开发工作
实现思路
- 从 GitHub Action 入手,通过 issue 的开启和重新开启的事件,调用我们的 action。
- 拿到事件的触发者,读取TA是否 star、是否 fork、或者两者兼具。
- 如果达到了白嫖条件,通过 action 发送引导信息,关闭并锁定 issue。
技术选型
其实最适合 GitHub Action 的语言是 js/ts,但这次我选择了老本行 Dart。你猜是为什么~猜对了我也不会告诉你。
基于 GitHub REST API 进行各种请求的调用。
开发过程
在此不再赘述开发过程,本质上只是几个 API 的调用工作。虽然其中涉及到了几个坑点,但是整体实现较为简单。
如何使用?
如果你的项目已经在 GitHub 开源了,又想使用这个便利的小工具,可以依照以下步骤来进行使用:
使用步骤
-
在你的项目的
/.github/workflows
文件夹下创建一个yml
文件,例如checker.yml
。 -
在文件中,引用 action 并使用。
name: No Free usage issue checker # Action名字。可以自定义 on: issues: types: [opened, reopened] # 在issue打开和重新打开时调用 jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: fluttercandies/no-free-usage-action@master # 使用最新版本的action - name: Check issue actor # 步骤名字。可以自定义。 with: token: ${{ secrets.GITHUB_TOKEN }} # 由GitHub提供的临时Token,必须在此处进行传递,且必须为这个值。
-
蹲一个白嫖怪。👀
实际效果
当一个白嫖怪来到你的仓库,给你开了一个 issue 时,action 开始执行。
白嫖怪立马被采取了强制措施,大快人心。
更多用法
你可以选择是否需要 fork 或者是否需要 star,但两者必选其一。
- uses: fluttercandies/no-free-usage-action@master
- name: Check issue actor
with:
token: ${{ secrets.GITHUB_TOKEN }}
forked: '--no-forked' (代表不需要fork)
starred: '--no-starred' (代表不需要star)
words: '请不要白嫖!' (任意内容。注意请将英文单引号进行转义)
后话
白嫖怪已经成为业界毒瘤。每个人曾经都或多或少都有过白嫖的行为,这并不是关键问题,关键是在白嫖的过程中,对其内容和开发者的努力没有任何的尊重,还要更进一步的白嫖。
**一个 star、一次 fork,代表着对开源开发者的内容的认可。仔细阅读项目的文档,是对内容的尊重。提出新的需求,应当是深度思考后的产出。**但是一些没有底线的开发者们,一次又一次地将这条底线不断拓展,直到信心满满的开源开发者们放弃项目,不再开源新的项目。而TA们只会转向下一家,继续TA们的白嫖活动。
所以,拒绝白嫖,从我做起。
结语
感谢这一年的开发过程中,遇到了一群支持开源并且有良好开源精神的小伙伴,并一起推动着 Flutter Candies 的成长。
欢迎加入Flutter Candies,一起生产可爱的Flutter小糖果(QQ群:181398081)