怎样让你的 GitHub 365 天都保持全绿?

怎样让你的 GitHub 365 天都保持全绿?

这是「进击的Coder」的第 342 篇技术分享
作者:崔庆才
来源:崔庆才丨静觅


阅读本文大概需要 5 分钟。



写这篇文章的缘由来自看到了知乎上的一个问题——在 GitHub 上保持 365 天全绿是一种怎样的体验?

解释

大家可能有的不明白啥意思啊,这个绿指的是就是 GitHub 的 Contribution,如果你每天都提交代码到 GitHub,至少一次 commit,那么 GitHub 就会在你当天对应的 Contribution 格子上点上绿色,比如我的就是这样子:

怎样让你的 GitHub 365 天都保持全绿?

因为我经常在 GitHub 上提交代码,所以我的 Contribution 页面就显示为绿色,commit 多的就深,少的就浅,灰色的就是当然没有任何代码提交的。

所以这个问题问的就是,每天都在 GitHub 上提交代码是什么体验,也就是 365 天每天一天不落地撸代码是什么体验?

然后有一个回答看得我笑出声:

曾经保持了200多天全绿,但是冷落了女朋友,一直绿到现在。

原回答如下:

怎样让你的 GitHub 365 天都保持全绿?

这哥们真的是太秀了,秀到我实在忍不住给他默默点了个赞...

不过咱们还是言归正传啊,说回这个问题。

其实说实话真的保持 365 天全绿真的是一件很难的事情,每周都会有周末吧,周末得陪女朋友吧?什么,你没有女朋友,那忽略这一条。

那即使没有女朋友,一年不得有几天是过年过节的,还撸啥代码啊?即使不是逢年过节,那也总有几天状态不好或者生病的吧,强如铁人那坚持 365 天天撸代码也是够神的。

不过我还真见过几个,实打实的大神,比如 Taylor Otweel,PHP Laravel 框架的开发者,一年 8000 多次 commit,他的 Contribution 是这样的:

怎样让你的 GitHub 365 天都保持全绿?

这个是真的强,而且人家撸的代码质量肯定也高啊,不像我们可能改了点 README 啥的。

但强如 Taylor Otweel,你也能看到有些天是没有贡献的,毕竟人家周末可能就真的不撸代码或者有其他的安排。

那怎么才能做到 365 天全绿呢?

既然人不行,那就靠机器人吧。

GitHub 不是这两年出了个 GitHub Actions 的功能吗?这就是 CI 嘛,借助于它,我们想做到 GitHub 365 天全绿,就轻而易举了。

到底怎么做?难不难。

不难,可能只需要两分钟就搞定了。

想不想知道怎么做的?想知道的接着往下看。

方案

这里介绍一个 GitHub 的库,地址为:https://github.com/justjavac/auto-green,借助它,咔咔几步就能搞定了。

先说步骤。

首先打开这个仓库,点 Use this template,注意千万不要点 Fork,不然是不生效的,如图所示:

怎样让你的 GitHub 365 天都保持全绿?

点了之后就是提示你用这个 Template 创建一个自己的 Git 仓库,这时候就会让你填写的的仓库名称,比如我就创建了一个名字叫做 AutoGreen 的仓库,如图所示:

怎样让你的 GitHub 365 天都保持全绿?

至此,已经成功了一半了。

现在你会观察到,在 Actions 这个选项卡自动执行了一个任务。啪!很快啊,执行完了:

怎样让你的 GitHub 365 天都保持全绿?

执行完了你会发现这个仓库多了一次 commit,是来自 justjavac 的一次 commit:

怎样让你的 GitHub 365 天都保持全绿?

点进去看看,commit 的信息还叫 "a commit a day keeps your girlfriend away",啥意思?

跟代码做好朋友,永远没有女朋友???Oh,No,不是这样的!

commit 如图所示:

怎样让你的 GitHub 365 天都保持全绿?

神奇的是这次 commit 还没有任何 file change,还是个空的 commit。

行了,不管这么多了。

到现在就结束了吗?GitHub 以后就会天天绿了吗,当然不会绿啊,为啥啊?

扒一扒源码看一下,打开 .github/workflows/ci.yml 文件,结果如下:

怎样让你的 GitHub 365 天都保持全绿?代码:

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 365 天都保持全绿?

因为这里配置的是原作者的 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,最后结果如图所示:

怎样让你的 GitHub 365 天都保持全绿?

可以看到,最后这次 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 分钟绿一次,也还不错嘛~





作者:崔庆才丨静觅

隐形字

在这些地方分享自己的一些经验、想法和见解。





好文和朋友一起看~

原文始发于微信公众号(进击的Coder):怎样让你的 GitHub 365 天都保持全绿?

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
怎样让你的 GitHub 365 天都保持全绿?
这是「进击的Coder」的第 342 篇技术分享 作者:崔庆才 来源:崔庆才丨静觅 “ 阅读本文大概需要 5 分钟。 ” 写这篇文章的缘由来自看到了知乎上的一……
<<上一篇
下一篇>>