Github 最近推出了一个 Profile 功能,大体上就是用户层面的 Readme。如果你新建一个和你的用户名一样名字的仓库,这个仓库的 Readme 就会展示在你的个人主页上。
虽然仅仅是一 Markdown 形式的 Readme,但是可玩性也很多了。
比如有一个服务,将这个服务 URL 的参数改成用户名,就可以用一个图片显示个人的开源贡献信息等,原理和项目上的 badge 差不多。
还有展示自己的睡眠数据的:
还有展示年度进度的:
还有在主页交换链接的,并且把这些链接做成了很漂亮的卡片:
我一直很喜欢看维基百科的 Picture of the Day,甚至有一段时间写周报的时候,每周都会贴一张 Picture of the Day 的图片在周报的末尾。一个原因是这些图片都非常精美,是由一个小组挑选出来的,普通用户也可以贡献,你可以发现这个世界上还有这么漂亮的地方。另一个原因是阅读维基百科可以学到知识。
所以我就做了一个每天更新 Picture of the Day 的 Github Profile。基本的原理就是使用 Github 的 Action 功能,每天跑一个脚本,去维基百科查到今天的 Picture 地址,然后更新 Readme 中 Picture 的 URL,这个 Readme 就会展示在我的首页上。
实现非常简单,所有的东西都在这个仓库里面。如果你想制作定时更新的 Profile, 可以参考一下这些脚本:https://github.com/laixintao/laixintao
有几个可以少走的弯路,分享一下:
- 让 Action 的机器人 push commit 是一个比较 tricky 的事情,好在可以直接用别人写好的 Action,这就是 Github Action 的设计精妙之处吧。像 checkout, setup-python 这种东西,都有现成的 Action 了,不同的用户之间可以组合 Action 实现自己的 CI。git push 使用的 Action 是这个:https://github.com/ad-m/github-push-action 使用方法可以参考这里,可以说非常简单,甚至 Github 的 Action 运行的时候默认就会设置环境变量 secrets.GITHUB_TOKEN,连你手动给机器人设置 Write 权限的 Token 都省去了。
- 使用 Action 更新 commit 是一种方法,应该也是简单的方法。一开始我是想用 clock.sh ,不需要 clone 下来仓库,直接使用 Github 的 API 去创建 block,然后创建 tree 和 commit,但是这样操作太复杂了,就放弃了。有想法的用户可以研究一下 Github 的这套 API。
- 放弃了 clock.sh 的代价就是…… Github Action 的
schedule
功能感觉有 bug. 如果 workflow.yml 写的有问题,Github 不会告诉你哪里有问题,直接就不会运行,对于调试来说还是挺不方便的;使用schedule
会有一些坑。比如一你开始写了一个 crontab15 * * * *
,调来调去最后发现无论如何改都生效不了了。而且 Github 这边就是不运行,没有调试方法。比较直接的方法就是直接将 workflow 换一个名字,push 过去,这样相当于在 Github 那边新建了一个 workflow,重新 schedule. 所以遇到此类问题不要怀疑是不是你的 crontab 写错了,直接换一个 filename 吧。 schedule
功能最短的运行时间是 5min 1次,所以写* * * * *
是没有意义的;
最后,我发现维基百科有时候会更新出来很恶心的图片,比如今天的…… (恶心,慎点 https://en.wikipedia.org/wiki/Template:POTD/2020-10-08 )
我发现一个相对比较简单的调试方法,用issue的comment触发,在yml顶上增减 issue_comment, 可以触发调试。不用动代码。
可以参考这个
https://github.com/yihong0618/gitblog/blob/master/.github/workflows/generate_kb.yml
嗯,也是一个好办法。不过 crontab 的 Action 难调试的地方不是触发,是你不知道它会不会按照你写的 crontab 去跑。实际测试下来延迟比较大, 可能会有 ~20min.
是的,哈哈。我也遇到过干脆不跑的时候。等了一天好了。
可以手动触发,yaml里有这个触发器就行
on:
workflow_dispatch:
我研究下,谢谢
确实可以,再感谢下。
找到了个好的方式,这块是有个隐藏 api 的。如果加上 workflow_dispatch 可以用捷径触发。
curl -H “Content-Type:application/json” -X POST -d ‘{“inputs”: {}, “ref”:”master”}’ https://api.github.com/repos/yihong0618/running_page/actions/workflows/xxxxxxx/dispatches -H “Authorization: token d8e0xxxxxxxxxxxxxxx”
我记得API是有的,https://www.zhwei.cn/hexo-github-actions-yuque/
这里有些有用的链接,用的是repository_dispatch,workflow_dispatch也类似
好的。哈哈,至少官方文档里是没有的。我用这个配合捷径实现了些好玩的哈哈。
我schedule里定义的任务时间为每天凌晨1点,但根据log看下来实际执行是在9点。难道crontab的时间要考虑时区影响吗?
很显然是要考虑的,这里说了 Action 是按照 UTC 时间运行的。https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows#schedule
了解了,谢谢。
https://github.com/ad-m/github-push-action 默认会推送到master分支,不适用于10月1号后创建的 profile repo,提了个 [pr](https://github.com/ad-m/github-push-action/commit/b007e7b818e33b04afd056e4c4b57ba917145d7a) 兼容了master跟main2个分支,目前已经被merge了。
好吧,评论不支持 markdown语法
赞 (评论框是 WordPress 原生的,只支持一些基本的 html 标签哈)