怎样让你的 GitHub 365 天都保持全绿?
共 4203字,需浏览 9分钟
·
2021-02-11 19:53
阅读本文大概需要 5 分钟。
解释
大家可能有的不明白啥意思啊,这个绿指的是就是 GitHub 的 Contribution,如果你每天都提交代码到 GitHub,至少一次 commit,那么 GitHub 就会在你当天对应的 Contribution 格子上点上绿色,比如我的就是这样子:
因为我经常在 GitHub 上提交代码,所以我的 Contribution 页面就显示为绿色,commit 多的就深,少的就浅,灰色的就是当然没有任何代码提交的。
所以这个问题问的就是,每天都在 GitHub 上提交代码是什么体验,也就是 365 天每天一天不落地撸代码是什么体验?
然后有一个回答看得我笑出声:
“曾经保持了200多天全绿,但是冷落了女朋友,一直绿到现在。
”
原回答如下:
这哥们真的是太秀了,秀到我实在忍不住给他默默点了个赞...
不过咱们还是言归正传啊,说回这个问题。
其实说实话真的保持 365 天全绿真的是一件很难的事情,每周都会有周末吧,周末得陪女朋友吧?什么,你没有女朋友,那忽略这一条。
那即使没有女朋友,一年不得有几天是过年过节的,还撸啥代码啊?即使不是逢年过节,那也总有几天状态不好或者生病的吧,强如铁人那坚持 365 天天撸代码也是够神的。
不过我还真见过几个,实打实的大神,比如 Taylor Otweel,PHP Laravel 框架的开发者,一年 8000 多次 commit,他的 Contribution 是这样的:
这个是真的强,而且人家撸的代码质量肯定也高啊,不像我们可能改了点 README 啥的。
但强如 Taylor Otweel,你也能看到有些天是没有贡献的,毕竟人家周末可能就真的不撸代码或者有其他的安排。
那怎么才能做到 365 天全绿呢?
既然人不行,那就靠机器人吧。
GitHub 不是这两年出了个 GitHub Actions 的功能吗?这就是 CI 嘛,借助于它,我们想做到 GitHub 365 天全绿,就轻而易举了。
到底怎么做?难不难。
不难,可能只需要两分钟就搞定了。
想不想知道怎么做的?想知道的接着往下看。
方案
这里介绍一个 GitHub 的库,地址为:https://github.com/justjavac/auto-green,借助它,咔咔几步就能搞定了。
先说步骤。
首先打开这个仓库,点 Use this template,注意千万不要点 Fork,不然是不生效的,如图所示:
点了之后就是提示你用这个 Template 创建一个自己的 Git 仓库,这时候就会让你填写的的仓库名称,比如我就创建了一个名字叫做 AutoGreen 的仓库,如图所示:
至此,已经成功了一半了。
现在你会观察到,在 Actions 这个选项卡自动执行了一个任务。啪!很快啊,执行完了:
执行完了你会发现这个仓库多了一次 commit,是来自 justjavac 的一次 commit:
点进去看看,commit 的信息还叫 "a commit a day keeps your girlfriend away",啥意思?
跟代码做好朋友,永远没有女朋友???Oh,No,不是这样的!
commit 如图所示:
神奇的是这次 commit 还没有任何 file change,还是个空的 commit。
行了,不管这么多了。
到现在就结束了吗?GitHub 以后就会天天绿了吗,当然不会绿啊,为啥啊?
扒一扒源码看一下,打开 .github/workflows/ci.yml
文件,结果如下:
代码:
name: ci
on:
push:
branches:
- master
schedule:
- cron: "0 0 * * *"
jobs:
autogreen:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Auto green
run: |
git config --local user.email "justjavac@gmail.com"
git config --local user.name "迷渡"
git remote set-url origin https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git pull --rebase
git commit --allow-empty -m "a commit a day keeps your girlfriend away"
git push
看看这个文件,意思就是每天执行一下下面的这几行代码,比如 git 的 config、commit、push 等,就相当于模拟了一次提交。
其中有几行代码比较有意思:
git remote set-url origin https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
这里就是指定远程仓库等地址,这里有几个占位符,github 的 actor 和 repository 对象,其实这些我们不用管,在运行的时候会被自动赋值为当前仓库的信息,另外还有 GITHUB_TOKEN 也是在该任务运行的时候自动添加的。
另外还有一行代码:
git commit --allow-empty -m "a commit a day keeps your girlfriend away"
这里的 commit 操作加上了一个 --allow-empty
选项,意思就是允许空的提交,这也就解释了上文空提交的缘由了。
OK,但这里我们再回过头来看看配置就知道为啥不算我们的提交了:
因为这里配置的是原作者的 GitHub 邮箱,所以这次提交当然就会算作原作者的了。
那怎么才能让我们的绿呢?那把邮箱改成我们自己的就好了,比如我的就修改为了这样子:
name: ci
on:
push:
branches:
- master
schedule:
- cron: "0 0 * * *"
jobs:
autogreen:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v2
- name: Auto green
run: |
git config --local user.email "cqc@cuiqingcai.com"
git config --local user.name "Germey"
git remote set-url origin https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git pull --rebase
git commit --allow-empty -m "a commit a day keeps your girlfriend away"
git push
直接在 GitHub 网页上点击修改,修改好了保存就行了。
修改完了之后我们就自动有了一次 commit,接着 Actions 还会自动触发一次 commit,最后结果如图所示:
可以看到,最后这次 commit 已经变成我自己了。
以后,我每天都可以自动绿了。
(这话怎么听着这么奇怪?
福利
最后,原作者还预留了一个定时任务,可以使得你想绿就绿,不仅可以让你每天都绿,还能让你每小时都绿,每分钟都能绿。
想绿就绿,其乐无穷。
绿的方式很简单,套用原作者的介绍了,修改 yml 文件的定时配置就好了:
计划任务语法有 5 个字段,中间用空格分隔,每个字段代表一个时间单位。
┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 日 (1 - 31)
│ │ │ ┌───────────── 月 (1 - 12 或 JAN-DEC)
│ │ │ │ ┌───────────── 星期 (0 - 6 或 SUN-SAT)
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
* * * * *
每个时间字段的含义:
符号 | 描述 | 举例 |
---|---|---|
* | 任意值 | * * * * * 每天每小时每分钟 |
, | 值分隔符 | 1,3,4,7 * * * * 每小时的 1 3 4 7 分钟 |
- | 范围 | 1-6 * * * * 每小时的 1-6 分钟 |
/ | 每 | */15 * * * * 每隔 15 分钟 |
比如修改为 0 * * * *
,你就能做到每小时都绿了,修改为 * * * * *
你就能每分钟都绿了,真舒服啊!
注:由于 GitHub Actions 的限制,如果设置为 * * * * *
实际的执行频率为每 5 分执行一次,也就是每 5 分钟绿一次,也还不错嘛~
作者:崔庆才丨静觅
隐形字
在这些地方分享自己的一些经验、想法和见解。